Zentyal的DLLL-CIAS Router更新記錄 / DLLL-CIAS Router Moduel Update
DLLL-CIAS Router是我在開放原始碼的網路路由器Zentyal上所開發的模組。這次我在Zentyal 4.1版本上再度開發了新版本的DLLL-CIAS Router。這個版本是特別為了DLLL-CIAS架構中的網路管理伺服器(Router)、資料儲存伺服器(Storage)、虛擬機器管理伺服器(Virtual Environment)、以及虛擬機器(Virtual Machines)的架構所設計,並且融入知識管理、允許重複網域名稱的功能,最後則是留下完整的安裝方法與自動備份的功能,即使Zentyal再度毀損也能夠輕易地將之還原。這篇記錄著這一版本DLLL-CIAS Router所增加的各種功能。
安裝 / Installation
DLLL-CIAS Router的資料都已經在GitHub上發佈了,網址如下:
DLLL-CIAS Router是一個附加在Zentyal 4.1版本上的模組,所以必須要先安裝Zentyal,才能在安裝DLLL-CIAS。安裝的手續有點複雜,請見以下兩份文件:
如果進一步想要開發DLLL-CIAS Router的話,則可以繼續閱讀下面兩份文件:
介面 / Interface
這一版本的DLLL-CIAS Router改用了Zentyal 4.1,因此介面風格也都是跟著Zentyal 4.1而有巨大的調整,整個看起來更簡潔、更像是現代系統使用的版本。然而,Zentyal 4.1拿掉了許多Zentyal 3以前的功能,但是卻強化了更多網路連線記錄(log)的功能,所以DLLL-CIAS Router為了Zentyal 4.1而做了許多調整。
在安裝完DLLL-CIAS Router並啟用DLLL-CIAS Router模組之後,左上角的選單就會出現「DLLL-CIAS Router」,點開後會出現它的主要六個功能:設定(Settings)、儲存伺服器(Storage)、虛擬機器管理伺服器(Virtual Environment)、虛擬機器(Virtual Machines)、網域管理伺服器(DNS)、網址轉遞(URL Redirect)。以下讓我們來看看這六個功能是什麼吧。
設定 / Settings
設定功能包括各種Zentyal相關功能的快速連結、Zentyal的備份功能、Zentyal權限管理、Zentyal連接埠、Pound設定、Zentyal伺服器本身的資訊記錄與知識管理。
排程備份與異地備份 / Schedule and Remote Backup
其中我在Zentyal的備份功能之上,以DLLL-CIAS Router加入了每週日早上6點自動排程備份、備份後以Email寄送備份檔案到管理者信箱等功能。上圖就是排程自動備份寄送到管理者信箱的畫面,附件就是Zentyal的備份檔。未來如果Zentyal毀損再重新安裝,用這個備份檔就可以還原之前所做的所有設定。
IP取用權限 / IP Access Permission
這一版本的DLLL-CIAS Router也多加入了新的一層權限角色。原本的權限只有Public跟Only for Administrator List,現在多加入了Only for Workplace List。這個權限是跟Zentyal伺服器對外網路的IP相關。如果Zentyal伺服器對外網路為192.168.11.1,則權限與允許連線的IP如下:
- Public權限表示任何IP的電腦都可以連線進入;
- Only for Administrator List限制只能是192.168.11.0/24,也就是192.168.11.0到192.168.11.255這之間的IP都可以連線。這通常會是同一個部門中的電腦可以連線的意思。
- Only for Workplace List限制只能是192.168.0.0/16,也就是192.168.0.0到192.168.255.255這之間的IP都可以連線。這通常會是指同一個機構的電腦可以連線的意思。
以上都是預設值,這些名單與IP範圍都可以在Settings中修改。
知識管理功能 / Knowledge Management
這一版DLLL-CIAS Router最大的特色就是加入了大量知識管理功能。原本的DLLL-CIAS Router不能在欄位裡面記錄很多資訊,因為Zentyal預設的Text欄位不允許使用者輸入「/」、「?」、「!」等不安全的字元。於是我將用CKEditor輸入的HTML程式碼編譯成Unicode,藉以規避Zentyal的安全字元檢查。而顯示的時候再還原成原本的文字。這個過程挺複雜的,但結果還不錯。可以在Zentyal裡面輸入有格式的文字、貼圖什麼的,感覺真的很好。
後來我發現到Zentyal有allowUnsafeChars選項可以取消安全字元檢查,也可以用HTMLSetter來改變欄位顯示的樣式,請見LibraryFields.pm中的範例。意思是說這個功能我可以做的更簡單一點,或甚至加入其他表單功能。未來有機會再來改進吧。
檔案上傳 (Upload File)也是知識管理必備的功能。 Zentyal 4.1所具備的File欄位,讓我們可以將檔案跟設定結合在一起。而這個整個有格式的欄位輸入、檔案上傳的資訊,都可以用備份功能保存起來喔。
在DLLL-CIAS Router中,知識管理功能會出現在各種設定旁邊。我們可以為Zentyal伺服器加入說明與附加檔案,也可以為儲存伺服器、虛擬機器管理伺服器、虛擬機器等各種資源加入說明。這些說明本身也可以用Zentyal的搜尋功能找出來,真的是非常好用呢!
2. 儲存伺服器 / Storage
這個部分除了記錄DLLL-CIAS架構[??LINK???]中的儲存伺服器之外,也整合了分散式儲存系統MooseFS的設定。
儲存伺服器設定 / Storage (NAS)
首先是儲存伺服器的記錄。儲存伺服器的IP是10.6.1.1~10.6.1.255,規則上可以設定255台。儲存伺服器主要是指網路附加儲存伺服器NAS (Network Attached Storage)。大部分的伺服器都有提供HTTP或HTTPS管理介面,在Storage中的記錄不僅僅只是知識管理,還可以從這裡建立到儲存伺服器的連結埠轉遞設定,也就可以讓DLLL-CIAS Router成為管理儲存伺服器的入口。
跟以前DLLL-CIAS Router不同的是,儲存伺服器或後面要講的虛擬機器管理伺服器更需要注意機器的實體配置。除了實體機器的位置之外,儲存伺服器要注意硬碟的大小,而虛擬機器管理伺服器則是要注意CPU的等級跟RAM的大小。因此者一版的DLLL-CIAS Router特別為了這些架設於實體電腦上的伺服器增添了硬體資訊欄位。
由於DLLL-CIAS的儲存伺服器主要是供虛擬機器管理伺服器Proxmox VE使用,所以大部分會要求這些儲存伺服器具備NFS或CIFS (網路上的芳鄰)這兩種檔案服務。在這一版的DLLL-CIAS Router中也可以一併記錄NFS或CIFS的掛載資訊,這樣就比較容易讓其他服務順利使用儲存伺服器。
分散式儲存伺服器:MooseFS / Distributed Storage: MooseFS
這一版本的DLLL-CIAS Router也實作了我之前所寫的「第四版DLLL-CIAS架構規劃」中提到的分散式儲存系統MooseFS。MooseFS的存在地位跟NFS很像,也是個供其他伺服器掛載的儲存空間。只是MooseFS的特色在於分散式整合。它可以整合多臺伺服器的多個空間成為一個龐大的儲存空間,並且在裡面自動實作預設兩個檔案的冗餘備份。
我本來是想要讓MooseFS取代儲存伺服器NAS,或是用MooseFS來整合多臺NAS,成為一個巨大的儲存空間,但實際上使用的時候才發現MooseFS的運作速度並沒有理想中的快。而且MooseFS還要在其他伺服器假設Chunkserver才能有效擴大儲存空間。
整體來說,MooseFS這部分在這一版的DLLL-CIAS Router實作上還不完整。目前我還是以單純的儲存伺服器NAS來提供其他伺服器掛載而已。會這樣考量也是因為目前我們使用了QNAP,就能夠把NAS上的資料跟Google Drive同步,這樣就可以使用Google Drive教育版龐大的10TB空間。詳細請見我在「想用無限空間沒那麼容易!Google Drive與伺服器整合失敗記錄 」這篇的討論。
虛擬機器管理伺服器:Proxmox VE / Virtual Environment: Proxmox VE
下一個功能是記錄虛擬機器管理伺服器的資訊。虛擬機器管理伺服器的IP是10.6.0.1~10.6.0.255之間,規格上最多可以由255台伺服器組成。虛擬機器管理伺服器跟前面的儲存伺服器一樣都是以實體機器架設,因此會多一些欄位記錄實體機器的資訊。
雖然這邊的虛擬機器管理伺服器是以Proxmox VE為主,但其實可以搭配任何虛擬機器管理伺服器的系統使用。原本我是想要整合Docker來用,不過到目前為止我都還沒有時間把它摸到一個實用的程度。到最後我們仍然在用多年以前的OpenVZ技術就是了。
叢集管理中心 / Main Virtual Environment Server
虛擬機器管理伺服器的叢集中心是什麼樣的概念呢?Proxmox VE具備了叢集的功能,而且是多主式(multi-master)的架構,每一臺叢集中的Proxmox VE伺服器節點都可以控制其他Proxmox VE。我們可以用Proxmox VE預設的網頁管理介面8006連結埠登入任何一臺叢集中的Proxmox VE,進而管理其他Proxmox VE上面的伺服器。那如果是不是代表我們只要用連結埠轉遞,給Zentyal一個連結埠好讓他轉遞到Proxmox VE的8006,這樣不就可以運作了嗎?事實上這樣是不夠的。這是因為Proxmox VE管理虛擬機使用到的主控臺(console),它會使用其他連結埠來進行連線。因此我們必須要給與管理用的Proxmox VE一個完整的IP才行。這些是為什麼我要在「第四版DLLL-CIAS架構規劃」這篇中寫到Proxmox VE需要一個獨立的IP的原因。
前一版的DLL-CIAS Router以手動的方式在Zentyal的主要網卡上設定了另一個虛擬的IP,使得Zentyal同一張網卡上有兩個IP。這一版的DLLL-CIAS則是直接將它整合進系統設定中,這樣方便得多。
一旦設定了叢集管理中心的資訊,在虛擬機器管理伺服器跟虛擬機器的頁面頂端都會出現叢集管理中心點的連線資訊,方便管理者直接從這裡進入虛擬機器管理伺服器、調整各個伺服器。
虛擬機器 / Virtual Machine
接著是記錄虛擬機器的資訊。虛擬機器伺服器的IP是在10.0.1.0~10.5.9.99,最多可以容納5900台伺服器。詳情請看Network IP range的說明。
這邊記錄虛擬機器的方式類似於前面的虛擬機器管理伺服器,但是並沒有實體位置的欄位,而是多加了在同一臺虛擬機器上新增多個網域名稱跟連結埠轉遞。
新增其他的網域名稱 / Other Domain Name
用到現在,我真的覺得多個網域名稱這個功能挺好用的。有時候我們會需要修改虛擬機器的網域名稱,但是又想要保留舊的名稱時,這個功能非常派得上用場。
新增其他網域名稱的時候,因為是跟Pound反向代理伺服器一起的設定,所以我們可以一併指定該網域連到伺服器的連結埠。因此當一臺伺服器有兩種服務同時需要使用的時候,我們就可以用兩個網域名稱來連到兩個不同的連結埠。舉例來說,我們用Apache Tomcat來作為主要網站的伺服器,使用的是8080;另外使用的是Apache來提供圖片、影片等服務,使用的連結埠是80。這時候就可以設定「www.server.com 」連線到8080連結埠、「img.server.com」連線到80連結埠。這樣子就可以直接建立兩個網域名稱,而不必指定連結埠編號。非常好用呢!
網域名稱設定 / DNS
Zentyal作為一臺DNS,除了自己DLLL-CIAS架構底下的網路儲存伺服器、虛擬機器管理伺服器、虛擬機器之外,有些架設在實體機器上,但也需要網域名稱跟IP對應的情況時,就可以用DNS這個功能來設定。
在這版的DLLL-CIAS Router中所新增的DNS功能,主要是這個功能簡化了Zentyal的DNS設定,並且加入知識管理的功能。這樣子就不會忘記到底這個DNS記錄是在什麼情況下記錄了。
網址轉遞 / URL Redirect
有時候我們會想要在連線到指定網址時轉送到另一個網址去。特別是在網站搬家之後,我們需要將連線到舊網址的使用者直接轉送到新網址去。這個功能直接使用了Pound的Redirect功能,而不需要我們額外撰寫其他程式碼喔。
總結 / In closing
在2014年時,我以Zentyal 3來進行開發,請看「Zentyal安裝DLLL-CIAS Router雲端網路模組」這篇的介紹。事隔多年之後,由於實驗室的Zentyal伺服器因硬碟毀損,整個系統再也不能運作。我也就順勢翻新了DLLL-CIAS Router的架構,完成了現在的功能。
在撰寫這篇的過程中,我又發現有許多功能有待調整。儘管DLLL-CIAS Router應該是沒有完美的一天,但到目前為止,應該相當能說是堪用的程度了。這版本加入了大量的知識管理跟自動排程備份功能這點,讓我覺得特別的有用啊。
有讀者可能會好奇到,到底DLLL-CIAS Router跟網路虛擬化跟軟體定義網路有什麼關係呢?老實說,這兩個名詞除了跟VMWare和Cisco等廠商專有技術與硬體綁在一起之外,我至今仍然無法搞懂他們要怎麼來解決我管理大量虛擬機器的問題。
DLLL-CIAS Router看起來好像有點軟體定義網路,但實際上它跟傳統用Linux的iptables來定義防火牆沒什麼不同,Zentyal的備份與匯入功能也不過就是一般資訊系統常見的功能而已,並沒有什麼特別。DLLL-CIAS Router反而比較像是早期MIS系統常見的IP管理系統 (IP Address Management, IPAM),主要目的是指定一套IP規則表,然後將各台機器的IP納入其管理之下。
時至今日,看過了許多網路管理伺服器之後,DLLL-CIAS Router仍然具備了許多他人欠缺的重要特色:
-
符合DLLL-CIAS架構所需要的虛擬機器、虛擬機器管理伺服器、網路儲存伺服器三層次管理架構
-
結合反向代理伺服器跟明確的連結埠轉遞規則,使用少數幾個實體IP位置就能讓數以千記的伺服器同時提供服務:其他家的網路管理伺服器大多都以公司有用不完的IP位置為前提來規劃網路,這點對於小型單位來說是很不適合的做法。
-
整合知識管理功能到網路設定上:現在管理網路幾乎就等於管理伺服器本身,但大部分的網路管理伺服器都真的只有網路管理設定,缺乏對伺服器本身的記錄與說明,讓後續接手的人難以處理。以前我也是使用各種知識管理工具來記錄伺服器的資訊,但分開處理的結果並不是很好,管理者不會習慣刻意去同步網路設定跟知識管理兩邊的資料。現在DLLL-CIAS Router能在設定網路的同時記錄知識管理,希望這樣會讓伺服器管理更簡單一些。
不過DLLL-CIAS Router還有許多有待改進的地方。詳細資料記錄在README.md的#TODO中,包括:
-
Zentyal的單點故障問題如何克服?現在這樣的架構在小型機構上運作是沒什麼問題,不過如果要商業運作的話,首先就要克服單點故障的問題。
-
Pound的負載平衡設定尚未確定能不能運作。
-
排程備份功能好項目沒有正常運作,而且一些細節也希望能夠加入到備份當中。
-
要不要讓MooseFS更加整合到DLLL-CIAS之中?目前還沒有更好的想法。
-
取消 Enable Emergency Restarter 功能
-
要開放VPN功能嗎?
最後,我在寫這篇的時候並沒能專心在桌子前面好好完成,而是分成許多段落、在嚴重過敏的情況下寫完這篇。所以在寫的時候有許多字句跟邏輯非常奇怪,請不要特別在意。畢竟這篇主要目的只是留給記錄,並不是什麼說明手冊就是了。