伺服器架設篇 - RockyLinux 9

第零章、笑談 Linux 應用與伺服器學習

在哪邊可以看到 Linux?我又該如何學習 Linux 網路伺服器?

最近更新時間: 2023/08/03

Linux 作業系統的網路伺服器功能超級強~也可以拿來做雲系統的底層作業系統, 當然也能拿來作為端點設備的嵌入式系統應用!大的 (雲) 小的 (端) 通通都可以使用 Linux!學這個應該很有利! 問題是,如果你想要操作好伺服器,但是卻沒有相關的 Linux 及網路基礎知識, 那就好像一心想著跑完半程馬拉松,卻不去進行基礎肌力訓練,當然就很容易閃到腰一樣!沒有好好管理的網路伺服器, 真的很容易被攻擊。任何管理不當或者是設定錯誤或者是操作失誤等等,也都可能造成系統的損傷呢!

其實不只是 Linux 系統啦!所有的事情都一樣不是嘛? 學功夫先練馬步、學數學先背好 9x9 乘法表、學網頁先理解 html 與 css、學程式當然從底層的迴圈與判斷式等邏輯概念學起!所以囉, 學網路伺服器,當然先學網路概念加上理解作業系統操作,才有辦法繼續下去的啦!

0.1、在雲端系統與虛擬機器底下的 Linux

鳥哥以前就有慢跑的習慣,不過,都只能跑個 5K 而已,跑完喘噓噓~後來 2013 年底,學生知道鳥哥有在跑步,就約了要一起去跑半馬, 半馬大約是 21K,當時的鳥哥只有 5K...,5K 到 21K,足足超頻 400% 耶!不過,半馬耶~很想挑戰啊! 所以,從該年底,就開始嘗試每次跑 10K!沒想到真的跑的完!只是需要慢慢跑。但是,每次跑完都很累~腳都很酸~偶而還會閃到腰~就覺得很奇怪~ 持續訓練一年多,還是同樣的問題!於是上網找一找問題,哪裡出錯呢?

原來是因為雖然是慢跑,雖然起跑有暖身操,但是 (1)跑完沒有收操,所以肌肉沒有適當放鬆,就導致這個問題~而且 (2)最重要的核心肌群沒有訓練, 所以腰部的許多肌肉耐力不足,因此即使是緩慢的跑跑,結果也是容易受傷!所以,這幾年來,每天下班之後自己找點時間做些伏地挺身、棒式、深蹲等, 鼓勵自己持之以恆~慢慢的,跑步終於比較不費力了,甚至生平首次半馬也在 2017 年底完成! 經驗告訴我們,除了持續鍛鍊慢跑之外,身體基礎肌力的訓練,幫助應該是很大的。

同樣的,目前大家都說『雲端雲端』了,不管是大數據 (big data) 還是人工智慧 (AI) 等等,這些技術都需要龐大的數據資料, 而數據資料當然都存在雲裡面!而創建出雲服務的底層系統,大部分主要仍以 Linux 為主。所以,雖然目前大家都談這些高階技術,然而, 沒有底層的 Linux 與網路技術等蹲馬步來的基礎功夫,想要直接升上高段班進行高級技能...恐怕是會傷腦筋的!因此, Linux 基礎與 Linux 伺服器基礎,還是需要了解,這樣才有辦法上雲端去管理更高階的數據資料啊!

0.1.1、雲端是什麼鬼?

時至今日,應該沒有人沒聽過『雲端』這兩個字,有陣子『雲端運算』是相當紅的一個名詞~只是,現在 (2023) 都已經被 big data、AI 人工智慧、元宇宙攻佔版面了。但無論是 big data 還是 AI,依舊需要前端的偵測器收集資料, 中繼的小伺服器 (邊緣伺服器) 接收資料同時傳輸到資訊中心,後台的雲程序作為資訊中心統一管理!最終再透過開發人員的技術, 將這些資訊整合分析,變成有用的 big data 的資料收集與機器學習等。而最重要的底層平台,那就是已經成熟的雲系統程序囉! 所以,你的某個端點設備一定經常使用到雲程序的成果,只是你不知道而已啦!

現在,整個網際網路世界已經被雲端取代了!雲端有個特色,那就是..不是雲就是端啊!雲強調的是將系統資源全部整合成為一個資源中心, 因此有所謂的資料中心 (data center) 以及虛擬機器叢集系統 (cluster system) 等等將硬體資源集中管理,然後再透過雲管理程序來整理放行所有的資源。 雲裡面的東西大概有點像底下這樣的圖示,包括儲存、虛擬機器、網頁前端與雲服務等,而應用面則是各種服務都可以啊! 你只要有網路連進去雲程序,就可以使用雲裡面的資源了!

cloud computing示 cloud computing示
圖 0.1.1、雲運算示意圖 (https://en.wikipedia.org/wiki/Cloud_computing)

上面左圖,底下兩個元件分別是大量的虛擬機器 (VMs) 以及資料中心 (Database),使用到這兩個的元件,主要則是雲服務 (Queue, 佇列) 以及雲平台 (Web frontend, 網頁前台畫面)。至於右圖,中間的雲主要分三層,底層是基礎設施 (Infrastructure),如電腦、網路、儲存元件等。 中間是平台系統 (Platform),如特定儲存目標、身份識別中心、執行應用程式、佇列資料、資料庫中心等。上方則是應用層 (Application), 包括偵測系統、內容顯示、協同工作系統、訊息溝通平台與金融中心等。而使用到這些雲程序的,則是使用者操作的端點設備,如伺服器、桌機、觸控設備等。

那這朵雲放在哪裡呢?依據雲服務的客戶而有公有雲及私有雲,所謂的私有雲指的是跟資訊廠商合作,開發出給特定企業專用的內部雲系統。 至於公有雲則是資訊公司自己建置,用來提供給客戶 (無論個人還是企業) 註冊與使用的公開服務系統。私有雲常見的有:

公有雲就多了!包括:

現在,你根本不需要買實體機器,只要跟這些雲服務商購買服務,就可以直接獲得一台雲裡面的作業系統 (我們稱之為虛擬機器), 這個作業系統還可以讓你選擇哩!而且購買之後,還連帶的給你適當的使用頻寬等等。只是,每個月就得要付出一筆費用就是了。當然,鳥哥還是喜歡自己管系統, 這個沒辦法!天性~各位夥伴則不必然一定要像鳥哥這樣,既然人家都幫你把資源管理好了,你直接買雲裡面的系統就 OK!除非你的資料不想上網, 或者是運算量太大,買實體機器比較划算的情況,否則,買雲虛擬機器就可以了。

因為企業或個人不需要自己建置機房,不需要考量電力與資源的配備,不需要考慮散熱,只需要考慮頻寬與所用的軟硬體資源搭配的維護費用是否合理就好。 因此,鳥哥的學生很多畢業之後,接觸的業界就已經沒有自己建立伺服器與機房,而是直接購買外部的雲伺服器,就直接在網路上面安裝系統, 處理系統。所以囉,虛擬化幾乎是顯學了!這個不學不行了!

  • 那麼雲『端』又是什麼?

雲程式主要是將運算資源與儲存資源統一控管,然後再使用管理界面或者是其他方式來管理資源分配,包括招商的功能等等。 所以,想要玩『雲程序』方面的技術,沒有錢 (沒錯!你真的沒有看錯) 是玩不起來的!那麼好了,當你從雲裡面取得應用的資源後, 假設這個資源是整個作業系統好了,你總是得要加以設定、系統維護與做相關的資料整理吧?這時,如果沒有適當的終端設備,怎麼取得進行維護?

你當然可能會想到,不過就一台 PC 吧?好,如果你有 100 個員工,你花了 100 個雲系統取得了好控制的資源,然後, 還得要加上每個員工一部 PC,這部 PC 還有使用年限,年限到了要一口氣換掉 100 台 PC!光是想到這 100 台 PC 的維護與管理, 想不崩潰也很難吧?這時,如果有個簡單的可以隨時更換的系統來作為取得雲系統的界面,那不是很棒嘛?沒錯啦!這就是端設備的想法! 在這個想法上,最知名的應用就是樹莓派啊~目前台灣很多硬體廠商也都在想要搞類似樹莓派,但是顯示與運算功能更強大的單版電腦。

這種單版電腦的特性就是比較不耗電,方便攜帶,可以隨意佈建在難以放置個人電腦這種大裝置的環境中。 此外,目前許多偵測器材的中介接收與發送訊號用的小型伺服器 (或稱為邊緣伺服器),也是透過類似樹莓派這種小裝備的佈建! 一片樹莓派的大小大約在 10cm x 6cm 左右,耗電量通常在 5W ~ 15W 以內,所以行動電源就可以驅動這種小電腦!

樹莓派
圖 0.1.2、樹莓派單板電腦示意圖 (https://en.wikipedia.org/wiki/Raspberry_Pi)

講個雲端最容易思考到的應用!在企業的訓練環境,或者是學校的教育環境,買個三、五部 PC 搭建一個私有雲的環境, 並建置好一個班級或一個訓練單位的虛擬機器量,然後透過樹莓派這種小裝置,直接連線到雲系統取得要訓練用的虛擬機器, 就可以讓所有的人在雲裡面享用資源了!一方面雲虛擬機器的統一設定規劃比較簡單, 再方面這樣的整體價格要比每個訓練人員具有一人一 PC 的設置費用更加便宜!

而不論雲與端,這兩方面的底層作業系統,大部分就是採用 Linux 作業系統來做基底的~所以,學 Linux 很好用喔!

0.1.2、Internet of Things 又是什麼鬼?

這幾年你也常聽到所謂的物聯網 (Intenet of Things, IoT),那又是什麼東西?先講個最簡單的~你知道你去運動時,跑了多久?速度多快?心跳有多少? 如果你有一些穿戴式裝置,例如可以偵測心跳的手錶的話,那麼就可以透過 wifi 或藍芽的功能,將手錶偵測到的資料傳輸到手機或其他接收裝置, 之後再將這些數據傳給數據中心,根據你個人的身體特質,數據中心會告訴你,跑太慢啦!還是跑太快啦!做一些即時回饋的機制~ 這個穿戴式的小配備,就是物聯網的一環!

那物聯網與雲端有沒有關係啊?來來來~我們來看一下 Samsung 提供的一張簡單的圖示來聊聊各個環節:

Samsung物聯網圖示
圖 0.1.3、物聯網示意圖 (https://www.slideshare.net/zinnov/internet-of-things-by-samsung)

鳥哥覺得上面這張圖非常經典~繪製出整個 IoT 的精神了~以剛剛慢跑的概念來看,那個監測的手錶就是底層的偵測器 (wireless sensor network),負責監測你的身體資訊。然後透過一些中繼器,最簡單的就是你的手機或家裡的無線基地台 (internet gateway),將偵測器監測到的資料透過手機或家用網路傳輸到雲程序 (cloud computing) 當中!透過雲程序的解析後,再用於提供各項服務 (service & applications)。例如告知你這次跑步花費多少熱量?做個人健康控管,做運動諮詢。將你的資訊傳給運動專家解析,還可以做哪方面的增強等等。

最理想的 IoT 作法是,未來所有的家電、裝置與設備通通做好連結,例如,當冰箱沒有食物了,自動透過網路下單到店家去訂購食材, 店家的食材準備好之後,自動發給物流業者,然後進行進貨這樣。總之,就是物品跟物品之間會互相連結進行連動,讓人類變得懶懶的就可以永續生活下去這樣 (誤)...

但是要完成上述的總總功能,你得要有許多的技術才行!例如,中間的雲端運算 (cloud computing) 你就得要透過硬體資源管理去控制一大群叢集設備, 這些設備大部份應該都是以 Linux 為底層系統的。然後網路中繼器 (Internet Gateway) 包括手機與小型裝置,這也是 Linux 在嵌入式設備的一大強項! 而最底層的這些偵測器,很多也是整合訊號直接發送到類似 Arduino 連結到單版電腦的功能啊!這些幾乎都或多或少用到 Linux 系統與其相關的網路服務的。 所以,不學學這些基本技術怎麼行呢?對吧!(Arduino 其實也很好玩!等有空,我也來寫寫簡單的教學好了!)

0.1.3、Linux 的虛擬化功能

言歸正傳,再來聊聊雲程序的虛擬機器吧!這才是我們這整份資料想要探討的重點啊!先來聊聊什麼是虛擬機器,跟虛擬機器的應用好了。

過去鳥哥上課時,鳥哥的學生都會說:『老師,您說作業系統都要經常操作,否則學不會。問題是,我家沒有 Linux 耶,怎麼練習?』 後來鳥哥教了 Virtualbox 的方法,讓學生自己回去自己的系統上面安裝一套虛擬機器。考試的時候,學生還是說不會!我說不是已經教你安裝一套了嘛? 他說:『因為啊~老師啊!我家的環境跟老師您教的環境不太一樣!我老是搞不清楚要做些什麼』....比較乖的學生則是這樣:『老師, 我好像遇到瓶頸了,能不能拿機器來給老師看看?』好喔!我以為是筆電,結果,學生將家裡的桌機整個主機都搬來學校... 好厲害!好厲害!不過,開機後....咦!錯誤呢?不見了啊!重新開機就自動修復某些錯誤了...真是傷腦筋!

這個 virtualbox 就是一般可以安裝在個人電腦,讓你的主機模擬出一台邏輯上完全獨立的『機器』,在這個『虛擬』機器上面你就可以安裝作業系統這樣。 所以,最終的結果是,你可以『同時操作兩個以上的作業系統,在同一台實體主機上』的意思。而且,這台『虛擬機器』搞壞了也沒關係, 因為該系統的硬碟就是個檔案而已~將檔案重建,該系統就回復正常了!所以在管理方面相當簡單!

VirtualBox 螢幕截圖
圖 0.1.4、VirtualBox 軟體的螢幕截圖 (https://en.wikipedia.org/wiki/VirtualBox)

只是這個『虛擬機器』幾乎所有的硬體都是模擬出來的,因此,可能在運作效能上會比較沒有這麼快速!所以,用來學習作業系統最好了! 因為『虛擬機器』不會破壞你原有的系統,而且『虛擬機器』掛掉也不會影響你的系統運作!最後,『虛擬機器』可以從無到有全部練習! 所以,在學習的角度上,虛擬機器當然是相當好用的一項工具。

  • 虛擬機器監督器 (hypervisor) 有哪些

事實上,虛擬機器雖然邏輯上是一部完全獨立的主機,但是畢竟用到的就是實體的主機資源。因此,當虛擬機器要使用實體資源時, 就得要透過一組軟體來控制~這組軟體就稱為虛擬機器監督器 (hypervisor) 了!上面圖示裡面的 VirtualBox 就是一個監督器啦! 包括前面提到的 VMWare 也是個監督器~那麼 Linux 上面常見的監督器有哪些呢?基本上常見的是這兩個:

  • Xen:目前由 Citrix 公司繼續維護與發展,有自由軟體的分支可使用;
  • KVM:直接納入 Linux 核心的監督器,安裝好 Linux 立刻就能用這個監督器了

早幾年在 Linux 底下玩虛擬化時,大多使用 Xen 這個軟體,不過該軟體當時就沒有納入 Linux 核心,因此想要使用還得要重新編譯一個可以支援 Xen 的核心才行。而自從 Linux 將 KVM (Kernel-based Virtual Machine) 的軟體納入核心後,目前在 Linux 上面的主流監督器,就變成 KVM 囉。

但是,事實上無論是 Xen 還是 KVM,這兩個軟體僅是作為硬體資源監督,且大部分在傳達 CPU 指令功能,在一般『電腦其他硬體』的模擬方面, 還得要透過其他軟體的支援才行!其中一個名為 qemu 的軟體,就是用來模擬各種週邊硬體的!包括主機板晶片組、網路卡、USB、顯示卡等等, 就是透過 qemu 這套軟體來達成的!這兩個軟體的相關性簡單的用下圖來做個說明:

KVM + Qemu
圖 0.1.5、KVM 與 Qemu 的相關性 (https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine)

上圖最上方的 KVM guest 就是一個虛擬機器,你可以在 Linux 系統上面建立多個 KVM guest (只要你的硬體資源如 CPU 與記憶體足夠的話!), 且透過 qemu 去模擬各個週邊,就能夠在一部實體機器上建立多個虛擬機器來同時操作囉!不過,如果每個 KVM guest 都得要自己手動設定與處理, 這些參數很難搞定~因此後來就有統一控制這些 guest 的管理平台出現了!目前 RockyLinux 上面就使用 libvirtd 這個 daemon 來管理! 不過,libvirt 其實使用度是相當廣泛的,他僅是一個中介界面,可以管理相當多的虛擬機器監督器呢!

libvirt
圖 0.1.6、Libvirt 中介軟體示意圖 (https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine)
  • 虛擬機器的用途

一般企業或使用者自己申請公有雲的虛擬機器,大部分都是用在架設網路伺服器上,包括建置資料庫系統、Web 伺服器等等。 這也是鳥哥從這一版開始會以虛擬機器介紹,請大家建置一套虛擬機器的主機系統,並透過實際操作來管理虛擬機器的緣故。

而鳥哥由於上課需求的關係,使用的私有雲或者是跟學生共同開發的超小型雲系統,就是想要讓學生在任何地方都可以取得雲裡面的虛擬機器, 然後這部虛擬機器是學生專屬的!可以在裡面做任何的事情。而鳥哥就透過週邊界面完全相同的虛擬機器進行教學~ 學生就沒有藉口說沒地方練習啦!而且因為雲裡面的系統可以隨時產生與銷毀,因此也相當適合於線上實做作業與考試環境的進行喔!

0.1.4、網路基礎的重要性

這次鳥哥希望透過一部實體主機的協助,在虛擬機器的環境中,建置好我們所需要的一座小機房的環境, 而不是單純所有服務通通架構在一部 Linux 系統上面而已。既然如此,那麼機房內的網路環境該如何設計? 是否需要建立路由器?是否需要設計交換器?是否需要溝通不同的網段?如何測試不同的 IP 版本等等。 如果沒有基礎網路概念,那麼很難繼續下去啦!底下的幾個重點,你應該都要了解一下才好!

  • IPv4 與 IPv6

目前我們所在的世界,沒有網路應該是很難想像的一件事~而如果想要理解伺服器的網路運作,沒有網路基礎的話,會很麻煩! 如同上一小節提到的,IoT 應該是未來的趨勢,那麼所有的節點應該都需要有網路連接,有網路連接基本上就應該要有 IP 位址, 但是 IPv4 的 IP 位址在前幾年就已經發派完畢,目前已經沒有新的 IP 位址可用了。那我們還需要這麼多的物件來連線,怎辦? 這就需要 IPv6 的支援!嗄!這啥鬼?不懂就慘了!對不對!詳細 IPv6 留待後面我們慢慢來講!

[vbird@localhost ~]$ ip addr show
3: enp0s7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:54:00:00:02:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.180/24 brd 192.168.100.255 scope global noprefixroute enp0s7
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe00:280/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
# 上面 inet 是 IPv4,而 inet6 則是 IPv6 的 IP 位址~看不懂對不對~
# 沒關係!後面章節我們慢慢再來談!
  • 區域網路功能與網路速度單位

另外,你也會經常聽到區域網路對吧?那區域網路是什麼?他可以讓你的主機之間進行什麼動作?你的防火牆可以針對整個區域網路做些什麼設定? 區域網路的 IP 位址表示法又是什麼等等~如果你不清楚,那麼伺服器的防火牆設定,會讓你非常非常頭疼!

目前的網際網路速度越來越快,據說已經有 100Gbps 的設備已經在開發中,伺服器等級的設備大多已經內建 10Gbps 的網路晶片組, 甚至一般家用的系統,也都內建了 2.5Gbps, 5Gbps 的網路速度了!真是飛快! 你知道這個數據代表的是什麼意思嘛?這些超級快的網路能夠用在哪裡?每一部電腦都可以使用到這麼快的速度嘛? 如果整個區域網路裡有這麼一個高速的設備存在,所有的主機都能夠享用的到嘛?如果不懂網路基礎,那你的 $$ 肯定會花錯地方!

[vbird@localhost ~]$ ethtool enp3s0f0
Settings for enp3s0f0:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
                                2500baseT/Full
                                5000baseT/Full
        Supported pause frame use: Symmetric
.....
        Speed: 10000Mb/s
.....
# 重點在於:單位!Mb/s 是什麼單位? Mbytes/s 又是什麼單位?這很重要!
  • 網路佈線

網路佈線一直是網路管理者心中最大的擔心!因為一個佈線不良,可能會影響到好幾年的工作效益!有摸過一點點網路的朋友都知道 RJ-45 的『水晶頭』, 網路也有一堆人在教你如何壓制水晶頭~問題是,如果你需要的環境是 10Gbps 以上的網路速度的環境, 自己壓水晶頭有沒有關係?又該使用什麼等級的網路線?為什麼外觀看起來一模一樣的網路線,只是列為『等級不同』就差好多好多錢? 這就是我們需要注意的部份!

  • 網路磁碟機與主動備援線路

有很多所謂的網路磁碟機架構,就是讓 server 透過網路去取得一個網路『硬碟』來使用~我們都知道,主機的硬碟如果死掉, 你這部系統當然就會卡卡並且可能立刻就不能用了!那麼網路來的『硬碟』當然就是吃網路囉!那...如果網路線鬆脫, 或者是網路流量增加導致網路暫時停頓,那這個網路硬碟『可能就會被判斷為損毀』的情況~此時,你可能會需要使用到兩條以上的線路來備援! 咦!兩條網路線?那怎麼共用一個 IP 位址來連線呢?這就是我們需要理解的!

  • 為什麼使用 https 以及為什麼網路會變慢?

現在很多 ISP 公司都直接告訴你,所有的服務請加密!為什麼要加密啊?不加密行不行?當然行!不過,後果請自負~ 那,為什麼不加密的資料可能會被竊取?這就涉及到基本乙太網路的傳輸協定了!如果不清楚這個協定,你當然也就不知道怎麼防備!

你也會經常發現你的客戶或朋友說:『咦!怎麼網路又變慢了!』好!想一想,怎麼找出來變慢的原因?是你的網路環境? 伺服器的 loading 過高?你的電腦裡面有問題?該網路服務本身就慢,其實是網際網路的線路被挖斷了嘛?還是地震導致海底電纜又斷了? 等等,都需要你理解網路基礎後,才有辦法進一步釐清問題~這也是統管理員應該要學會的基礎技能喔!

  • 虛擬化網路

最後,未來大多是虛擬機器的世界,這種世界裡面的網路設定與細分,就得要透過一些虛擬的網路界面來搞定。 因為你看不到實際的線路,所以如果不懂得網路拓樸的大致圖示,可能會導致挺嚴重的後果!此外,最單純的網路卡模擬, 也是得要透過所謂的實體網卡的橋接 (bridge) 才能模擬的出來!所以,這些基礎功不能不知道的喔!

qemu bridge
圖 0.1.7、虛擬機器透過橋接取得網路卡使用權示意圖 (http://slideplayer.com/slide/3900554)

上面只是提出一些你為什麼需要學習網路基礎的原因而已,還沒有講重要的概念與原理喔!所以你都看不懂也沒關係!我們會在後面慢慢談。 不過,永遠在你心理先有個概念,網路基礎好重要啊!這樣就好了!

0.2、此文件實做的方式與流程

IT 界應該還算挺看重 RHCE 這張證照的,這張證照歷經多次改版,從 RHCE 8.x 以後的版本,主要是針對 ansible 這個大量部署的工具來做認證。但實際上,鳥哥認為,要進行這個證照之前,應該要對伺服器與機房有點理解才好! 早期的 RHCE 7.x 版其實就是考伺服器建置管理的部份~新的 RHCE 8.x 以後的版本,反而認為那是應該要知道的基礎知識! 所以略過不考...

因為鳥哥在大學端授課,我們並沒有龐大的資訊資源來支援我們做許多研究,同時,資訊教室裡面的設計其實很亂, 我們經常需要一些特別的機器來進行各項服務,其中,裸機用的備份、復原系統就很重要!我們的系統主要交由學生來主導設計, 雖然成果不是十全十美,但對於學生的訓練來說,鳥哥覺得是很不錯的一個過程。

在這個訓練過程中,我們得要考慮到的是『整個機房架構底下, Server/client 應該要如何配合才對』! 這對於網路維運人員來說,確實才是重點!加上目前你只要購買一部不要太爛的機器設備, 就能搭建出好多個虛擬機器來進行機房建構的測試環境。所以,這就是這份文件的基礎想法啦!

主要的目的是希望能夠以鳥哥貧乏的經驗底下,見過的可能的機房內各種設備的使用情境,帶給大家一個透過虛擬機器實驗的環境, 讓朋友們提早理解未來若管理大量機器設備下,應該要有的技術這樣!

0.2.1、你不一定看得懂?

這份資料既然是談論比較深入的架站規劃、流程、技巧與維護等工作,那麼比較基礎的 Linux 操作與相關的 Shell 語法,在這裡面就不可能談論的很多。 所以,當您嘗試閱讀這份文件的時候,請注意,您最好已經具備有 Linux 作業系統的相關知識,以及文字介面 (BASH Shell) 的相關技巧。 還有,必需要能夠瞭解一些 Unix-Like 的工作流程,例如登錄檔的產生與放置的地點、服務的啟動與關閉方式、工作排程的使用方法、以及其他種種相關的事項。 也就是說,如果您從未接觸過 Linux ,那麼建議您由『鳥哥的 Linux 私房菜 -- 基礎學習篇』開始 Linux 的探索歷程, 否則,這份文件對您而言,可能會過於難以理解。

另外,這是一本自學的文件,所以拿來作為教科書講解,可能會有些許的不便。最大的不便大概就是作業的份量太少了... 大部分的實做都已經在個章節實做流程當中跑完,所以當然不會有太多的課後習題~如果老師們想拿來作為教科書, 或許應該可以參考鳥哥另一個專門用來作為上課訓練的教材較佳:

本文件的流程與訓練跟一般教科書與其他書籍差異很大,因為主要的目的是讓網路新手可以有個入門的方向,同時不只入門, 而是希望能夠讓入門者『真的理解各個流程在幹麻』,以及『架設這個 server 的原理、目的與手段』通通有個理解, 因此整個維持鳥哥的一貫作風,就是...非常囉唆...如果你只想要速成的話,使用 google 查查關鍵字就能找到一堆方便的教學, 甚至直接給你完整答案的教學文章~但那畢竟只是讓你解決燃眉之急。總之,建立良好的學習態度是在 Linux 基礎篇裡面就持續的談到, 鳥哥在這裡更可以建議你,甚至可以直接到官網找資料來閱讀就好,都比讀一些速成的書要好的多!^_^

  • 努力自己找出問題點

因為種種原因,每個系統可能產生的問題都會不一樣~包括連 SELinux 產生問題時,setroubleshoot 的方案都一堆了! 只要能找到問題並且解決就好了!沒有一定的解決方案~只要能解決問題,大部分都是好方案!只是,當下次出現相同的問題時, 請務必使用相同的方式去解決~並且能夠順利解決該問題,那麼這應該就是一個可以做成 SOP 的好方案~盡速記錄在自己的工作日誌內! 這都是未來自己的資產!

鳥哥上課的時候,最怕學生寫一行指令,就轉頭問,這樣指令寫對不對?然後執行了,產生的訊息完全不看,就又接著敲第二個指令, 還沒有按下 enter ,又舉手轉頭過來問,這個指令對不對...我很想請教一下學生,你們未來出社會,去工作的時候,會拿著電腦問你的老闆說, 老闆,這樣打字對不對嗎?

請自己測試,自己查閱出現的結果,自己了解一下為什麼指令要這樣下達!指令的目的是讓你完成工作, 那麼你想要完成的目標是什麼?先自己搞清楚,那麼出問題的機會就不大!如果凡事都要問專家,那麼你怎麼成為專家? 因為專家的經驗永遠是專家的!你無法學習到~只有自己碰到問題,詢問可能解決的方向,然後自己朝著方向找出答案, 這過程當中的訓練以及得到的經驗,才永遠是你的!

Linux 系統當中,很多的問題與訊息都會紀錄在 /var/log/ 裡面,即使目前已經大量使用 systemd 的 journald 服務, 不過,大部分的 Linux distributions 還是預設會啟用 rsyslog 服務 (你也可以自己手動強迫啟用)。另外,某些複雜的服務也有自己的 log 檔案, 同時,這些服務也能夠自己指定 log 的複雜度。當開始處理這些服務時,為了理解服務的流程,或許可以將 log 的訊息標準訂低一點, 也就是一堆基本資訊也會紀錄起來的意思,讓你可以完整掌握服務的訊息。等到穩定了,再將訊息等級調高一點,讓訊息更為精簡有效~ 這些動作不要小看,系統管理員經常是透過分析這些 log 來理解系統運作的狀況,並且進一步提前處理可能或即將產生的錯誤哩!

鳥哥的系統很多都有 RAID 組成,因為實在很擔心硬碟出錯,所以鳥哥都會讓系統每日自己偵測 RAID 的硬碟健康狀態, 然後做成 email 傳送到我的信箱。根據這個信箱的 log 信件,通常可以提早發現是否有出問題的硬碟,提早更換, 可以避免資料的損毀啊!

0.2.2、章節編排的流程設定-網路基礎與虛擬機器

如前所述,沒有基礎功,想要架設網站,鳥哥的個人建議是...還是花錢請專家幫你搞定比較合理!那,有 Linux 基礎功了呢?接下來要怎麼辦? 這裡談談鳥哥的理想。

  • 不只是伺服器管理員,而是機房管理員

鳥哥希望大家能夠站在『管理機房』這樣的角度來思考你的伺服器學習。談到『機房』,你可能就會想到裡面有全年無休的冷氣、冷的要命的環境、 好吵好吵的風扇、多的要命的電腦主機、永遠持續閃爍的網路交換器燈號等等。事實上,沒錯!機房就是這樣。先不考慮散熱或者是綠色能源使用, 先講講,如果要你控制一棟大樓的網路環境,你該如何設計網路?你的防火牆應該放置在哪個環節上?你的大樓有幾個比較機密的單位, 他們家的網路需要額外切開,你該如何管理進入該網域的權限?

在現在這個磁碟容量大到變態的環境下,任何人使用資訊相關系統都已經不在乎檔案容量了。可以想像得到的是,你的磁碟永遠都會不夠用! 所以可以彈性增加的網路磁碟就顯的重要。但是,你也知道網路磁碟機的『網路狀態』不可以斷線!斷線代表『主機的硬碟損毀』了! 這當然會讓系統整個爆炸!因此,你該如何管理這些重要的網路磁碟裝置的『網路容錯率』?這都需要學習!

所以,整個機房的管理員不是只要設定好你的單部伺服器就好,還得要隨時注意整個區域網路的其他設備的相依性, 隨時做好區網主機的可抽換彈性變動。這些設定與想法,沒有扎實的網路基礎來輔助,會很麻煩!所以,一定要從網路基礎開始學習, 完全不可以略過。

  • 雲程序的虛擬機自我建置

既然要學習管理機房,所以你得要購買足夠的設備!包括可能數十台主機硬體、好幾台主幹交換器、好多的 CAT6A 線路, 以及動輒數百台計算的個人電腦,這樣才算是個基礎的機房環境,對吧!咦!光是學習的初設費我們就得要傾家蕩產了!哪有時間學習啦! 趕快去賺錢!不要往下看了 (大誤...)。

這一章一開始不是一直談到雲端虛擬機器嘛?我們一台實體主機 (鳥哥預計使用 Intel 10 代 i5 等級的 CPU 搭配 32G 以上的記憶體環境來處理) 可以生出大約 10 台以上的 server 數量,然後,還可以設計多個不同的虛擬橋接設備來劃分出不同的子網路。也可以透過 VLAN 來讓網路邏輯上完全獨立! 另外,如果你的一部實體主機無法產生這麼多的虛擬設備,那麼使用兩部以上的實體主機來模擬總可以吧?是可以啦! 但是我們的虛擬機可能都是綁在內部,透過這樣來模擬實體機器的對外 (WAN) 與對內 (LAN) 的實際環境~那兩部實體主機的虛擬機器不就無法溝通了?

沒關係~我們可以透過第二張網卡的橋接,也可以透過第一張網卡設計 VLAN 來讓實體網卡拆開成為兩個區段, 一個區段給 WAN 使用,一個區段給內部 LAN 使用。總之,就有很多種的設計方式!

由於虛擬機器的玩法相當多樣,也能夠讓我們在花費比較少 (一部實體機器) 的情況下來理解整個網路的實際連線情況, 更可以透過這樣的環境來模擬機房『網路內外分離』的情境,所以,當然就得要來學一學啊!

不過讀者們還是得要注意,我們的模擬環境許多的建置是要讓你『理解為什麼要這麼做』,而不是實際上會在虛擬機上面這樣搞! 所以,在設計種種的連線與伺服器/用戶端的交互連線時,大家還是要在腦袋理面實際想出整個連線的架構才好!

  • 第一部份的章節安排

如上所述,網路基礎與虛擬機器的預先建置是本書最重要的一環!所以,鳥哥會先以一個實際的網路環境搭配硬體安裝好一部 Linux 小雲系統, 然後建立第一個虛擬機器,並且做好適當的防護之後,再來繼續聊聊網路基礎,並且透過一部測試用的虛擬機器進行各項網路基礎的練習。 等到網路基礎介紹完畢之後,再實際講講系統如何做防備,以及如何連結上 Internet,接下來就準備進行各項區域網路內常見伺服器的架設。 第一部份預計會講到這些喔:

  • 小型雲系統與主機安全強化流程
  • 第一個虛擬機器的安裝與調整
  • SELinux 初探
  • 網路基礎、Linux網路設定與網路偵錯
  • ....

0.2.3、章節編排的流程設定-區域網路內伺服器

企業總是會有很多的只提供給企業內部使用的服務,包括檔案伺服器、時間伺服器、代理伺服器、網路磁碟系統、帳號控制伺服器等等。 尤其是有異質平台作業系統的情況下,若能整合帳號控制,對於整個企業內部的帳號控管,真的幫助很大!為此, Windows 有開發出 AD 系統, Linux 有老牌的 NIS 服務。但若需要跨平台,可能還是得要使用 LDAP 會比較好!

想一想,同時有 10 個人頻繁的讀寫資料到 Server 去,你的 Server 如果只有一張網路卡,那麼效能瓶頸可能就卡在那張網路卡上面。 如果有 10G 網路當然是最好!不過 10G 網路還很貴~那能不能安裝多片網卡到 Server 上,再將這些網卡綁定在同一個 IP 上? 這樣不就可以增加頻寬了?沒錯~有這功能~這就是 bonding 與 teamd !所以,這個區域網路內的環境介紹,我們也會加上這個特別的功能!

  • 內部伺服器是要服務誰?

總之,機房管理員請注意,你在企業內部的所有服務都是用來『服務自己的同事』,同時『請將自己的同事想成是白痴』, 因此,許多的設定需求請盡量簡單~不要用政治人物的講話方式來說明,請用小學老師的講話方式來解釋,盡量讓同事可以快速、便捷且沒有傷害的操作資訊系統!

但是反過來說,對於跟著自己做事的資訊領域的同事來說,那就不能用上面的態度來處理~畢竟你的資訊方面同事是『可能會直接存取你的重要系統』的一群人! 因此,你必須要嚴格的把關才行!例如許多比較機密的資料要嘛就不要放行,要嘛就一定要嚴格的教育訓練。

基本上,這個部份會談論到的服務有:

  • 區域網路的 DHCP, DNS 與 NTP (虛擬機器重整)
  • 遠端連線伺服器 ssh, VNC, XRDP
  • bonding、teamd與 VLAN
  • LDAP 伺服器
  • Kerboros 與 NFS 服務
  • Samba 與跨平台帳號控制
  • iSCSI 伺服器

0.2.4、章節編排的流程設定-網際網路伺服器

伺服器的建置裡面,你一定會思考到要使用 Web server 吧?不過,其實建立 Web server 的第一個重點在於選擇一個好的主機名稱耶! 而選擇一個好的主機名稱最重要的就是建置 DNS 伺服器耶!因此,在網際網路伺服器的章節裡面,我們會從 DNS 伺服器講起, 然後再帶入 Web & FTP 以及郵件伺服器。

另外,在 Web server 的角度裡面,我們經常需要建置 Data base 的相關工作,所以在這些章節裡面也簡單的介紹一些建立 SQL 資料庫的帳號密碼, 同時增加資料庫的重建與簡易的 SQL 查詢方式。

由於網頁前端與後端工程師都需要長時間的培養,因此這裡不可能直接講解所有的 SQL 技術以及 PHP 或 python 的語法, 只是提供一個基礎的操作而已啦!如果對網頁設計有興趣,也可以參考鳥哥在學校授課所寫的教材:

  • 那,網際網路伺服器又是在服務誰?

話說內部伺服器主要在服務自己的同事,而且由於可能是服務『生產者』(實際 coding 或者是管理圖形影像編輯等,會讓系統 loading 加重的工作), 所以你得要時時將系統調整到最快速!因為網路走內網,要讓系統加速的方式太多了!要仔細的考量考量。

那網際網路服務的對象呢?當然就是貴公司的客戶囉!或者是一般大眾消費者。雖然說網路頻寬越來越大,但如果同時間有太多的連線要求, 你的頻寬還是會被用光光。所以,隨時做好不斷線,然後將資料壓縮,或將資料削減 (例如網路圖檔解析度當然不用太大,因為在瀏覽器上面看, 1024 解析度跟 3096 像素的解析度是不會差太多的!但是檔案容量差很多...),都是一些優化的好方案。而且,由於是走網際網路, 所以效能瓶頸大多是卡在公司對外的那條線路上,要增加頻寬只有再付錢給 ISP 這樣的方法而已~所以,在有限的資源下, 如何創造最大的效益,可能就是身為機房系統管理員的你的最重要任務囉!

因此,後續可能會有一個小章節會談論如何處理伺服器的健康狀態監測、fail2ban 的使用等等技巧喔!

  • DNS 伺服器
  • Apache 伺服器
  • 進階 Apache 動態網頁伺服器
  • Nginx 伺服器
  • FTP 伺服器
  • 簡易郵件伺服器
  • 系統監測: fail2ban, knockd 等

0.3、砍掉重練是很重要的

過去因為使用實體機器,所以做錯了得要重來一次,重新安裝一次~所有的動作都得要重新處理~連個備份都很麻煩! 這次我們使用 RockyLinux 9.x 加上透過虛擬機器來學習,使用的是同一個 image 的來源,先做一個比較穩定的作業系統磁碟之後, 未來都用該系統 clone (複製) 出來做進一步的學習。因此,要砍掉重練只需要短短幾秒鐘就搞定了!站在重複學習的角度來看, 實在是事半功倍!

因此,在這整份資料的練習中,鳥哥有點捨棄了課後練習,畢竟課後練習請直接到各大網站找尋題目來做就好了。 在這個書籍裡面,鳥哥朝向建議使用的幾個範例來處理,一步一步完成所有的系統規劃與建置~在我們小小的虛擬空間裡面, 架設總總的伺服器~而且這些伺服器還可以開開關關,未來有需要,你可以開啟單一虛擬機器來看看學習時期所作的任何設定, 甚至可以直接將自己的設定複製到實際的工作場域去!這就是鳥哥的期望囉!

修改歷史:
  • 2018/01/16:這幾年做的許多夢,想要一步一步的寫下來~這裡先將夢境寫一寫,未來也要讓自己參考自己的夢想啊~呵呵~
  • 2022/04/26:沒想到再次重新編輯這個網頁,竟然已經過了 4 年了!希望到年底,可以將上面的流程全部跑一遍啊!
  • 2022/07/20:才開始寫一點點資料而已,就又推出 RockyLinux 9.0 了!只好重新改寫~順便將文句順一順!
  • 2023/08/03:最近這一年都在處理 Arduino, Raspberry pi 等課程的教學,還有一堆計劃案...延遲好幾年的伺服器文件...
2022/04/26以來統計人數
計數器
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計