鳥哥的 Linux 私房菜

第零章、說說笑笑談 Linux 應用及本書編輯與學習方式

最近更新日期:2018/01/16

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

原來是因為雖然是慢跑,雖然起跑有暖身操,但是 (1)跑完沒有收操,所以肌肉沒有適當放鬆,就導致這個問題~而且 (2)最重要的核心肌群沒有訓練, 所以腰部的許多肌肉耐力不足,因此即使是緩慢的跑跑,結果也是容易受傷!所以,這幾年來,睡前習慣押個 20+15 伏地挺身,加上兩次 45 秒左右的棒式, 以及 30+30 的深蹲,漸漸的跑步比較不費力了,甚至生平首次半馬也在 2017 年底完成!除了持續鍛鍊慢跑之外,身體基礎肌力的訓練,幫助應該是很大的。

Linux 作業系統的網路伺服器功能超級強~也可以拿來做雲系統的底層作業系統,當然也能拿來作為端點設備的嵌入式系統應用! 大的 (雲) 小的 (端) 通通都吃掉了~所以特別好用~學這個應該很有利!問題是,如果你想要操作好伺服器 (慢跑) ,但是卻沒有相關的基礎知識 (肌力訓練), 那很可能就是經常會閃到腰 (被攻擊、當機了、錯誤設定或操作導致系統損毀等)!其實不只是 Linux 系統啦!所有的事情都一樣不是嘛? 學功夫先練馬步、學數學先背好 9x9 乘法表、學網頁先理解 html 與 css、學程式當然從底層的迴圈與判斷式等邏輯概念學起!所以囉, 學網路伺服器,當然先學網路概念加上理解作業系統操作,才有辦法繼續下去的啦!

0.1、雲端系統與虛擬機器是什麼?

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

0.1.1、雲端是什麼鬼?

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

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

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

公有雲就多了!包括:

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

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

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

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

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

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

樹莓派
圖 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 的精神了~以剛剛慢跑的概念來看,那個監測的手錶就是底層的偵測器 (sensor),負責監測你的身體資訊。 然後透過一些中繼器,最簡單的就是你的手機,將偵測器監測到的資料透過手機傳輸到雲程序當中!透過雲程序的解析後, 再用以各項服務的提供 (例如告知你這次跑步花費多少熱量?做個人健康控管,做運動諮詢。將你的資訊傳給運動專家解析,還可以做哪方面的增強等等)。

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

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



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 的軟體納入核心後,目前在 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 的管理界面出現了!目前 CentOS 上面就使用 libvirtd 這個 daemon 來管理! 不過,libvirt 其實使用度是相當廣泛的,他僅是一個中介界面,可以管理相當多的虛擬機器監督器呢!

libvirt
圖 0.1.6、Libvirt 中介軟體示意圖 (https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine)
  • 以 Gocloud 為例說明一下硬體、KVM、Qemu、libvirt 的相關性好嗎?

你可能聽過 openstack 或者其他相關軟體,包括鳥哥目前在使用的 Gocloud 等,都屬於比較前端的,偏向管理員與使用者用戶操作功能的軟體。 但在硬體資源的底層,可能就是使用 Linux 作業系統搭配上述的監督器與模擬軟體所管控的。以鳥哥使用的 Gocloud 來說:

  • 硬體資源:硬體使用了一部 Storage、三部以上的 KVM host (主要提供 KVM guest 的主機系統)、一部資源分配伺服器,因此五部主機就可以了。
  • 作業系統與網路服務:上述的 5 部主機都是使用 Linux 作業系統來管理。而 Storage 使用 NFS 提供檔案系統給各 KVM host 作為虛擬機器的磁碟來源,資源分配伺服器則是偵測 KVM host 的可用資源來提供 KVM guest 的產生,各主機之間使用 ssh 進行操控的作業;
  • 虛擬化:主要的監督器為 KVM,而且透過 qemu 來模擬各個週邊,包括磁碟系統也是喔!
  • 虛擬機器管理:Gocloud 除了自己的管理模組之外,大部分的情況下,都是透過呼叫 libvirt 的控制功能來管理 KVM guest 的! 這個時期使用 libvirtd 提供的 virsh 管理指令來作為主要的控制方式。而啟動 KVM guest 時,則是使用 libvirt 的 XML 檔案格式, 搭配可用的 qemu 模擬資源來產生虛擬機器的各項週邊硬體。

基本上,就是圖 0.1.6 的關聯圖啦!這樣理解否~

  • 虛擬機器的用途

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

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



0.1.4、網路基礎的重要性

  • IPv4 與 IPv6

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

  • 區域網路功能與網路速度單位

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

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

  • 網路佈線

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

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

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

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

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

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

  • 虛擬化網路

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

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

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


0.2、照著本書籍實做的方式與流程

從 2014 年底開始, Red Hat 釋出新版的 RHCE 7 的考試,鳥哥從 2015 年開始使用 CentOS 7 來教學,包括 Linux 系統基礎與伺服器設定。 且由於虛擬化技術的成熟,因此經常有大機器裡面生出多台小虛擬機器給學生進行實驗的應用產生。

新版的 RHCE 試題有趣的地方在於,過去的舊版考試,大部分的思考邏輯中,考的是『一部 Server 的設定』。而新版的考試裡面, 則是要考量到『整個機房架構底下, 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 來理解系統運作的狀況,並且進一步提前處理可能或即將產生的錯誤哩!

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



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

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

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

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

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

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

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

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

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

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

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

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

  • 第一部份的章節安排

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

  • 小型雲系統與主機安全強化流程
  • 第一個虛擬機器的安裝與 SELinux 探索
  • 網路基礎與磁碟快照虛擬機器
  • 網際網路與區域網路設定
  • 網路偵錯與常用網路指令
  • 橋接器、防火牆與 NAT 伺服器


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

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

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

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

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

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

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

  • 遠端連線伺服器 ssh, VNC, XRDP
  • NTP 伺服器
  • bonding、teamd 及 DHCP
  • 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 伺服器
  • 簡易郵件伺服器
  • 系統監測

0.3、砍掉重練是很重要的

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

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

2018/01/16:這幾年做的許多夢,想要一步一步的寫下來~這裡先將夢境寫一寫,未來也要讓自己參考自己的夢想啊~呵呵~
2018/01/16以來統計人數
計數器
   http://linux.vbird.org is designed by VBird during 2001-2017.