:::

第四版DLLL-CIAS架構規劃 / DLLL-CIAS Version 4 Structure Planning

image

在整理DLLL-CIAS第三版教學的時候,我發現現有架構中有許多缺陷。因此我著手規劃DLLL-CIAS第四版的架構,目標是達到去中心化、分散式儲存、高可用、腳本自動化安裝,讓IaaS管理更為簡單。以下則是記錄到目前為止的規劃內容。

In order to impove some disadvantages in DLLL-CIAS version 3, I want to plan the next version with decentralized network structure, distributed storage, high availibity and setup script. Following is the next DLLL-CIAS structure draft.


系統架構 / System Architecture

image

這一張圖用來說明目前規劃DLLL-CIAS第四版(以下簡稱v4)的系統架構。跟DLLL-CIAS第三版(以下簡稱v3)的架構不同,虛擬機器管理伺服器(以下簡稱Proxmox)的功能大幅上升、網路管理伺服器(以下簡稱Zentyal)改以虛擬機器架設、而資料儲存伺服器(以下簡稱NAS)則是非必備的元件,在此圖中省略。主要元件只剩下1. 虛擬機器管理伺服器(Proxmox VE)之MASTER;2. 其他虛擬機器管理伺服器;3. 網路管理伺服器。以下先說明網路架構,再說明這三個元件的功能。

硬體需求 / Hardware Requirments

v4架構要求每一個Proxmox節點都能夠擔任身為MASTER的工作,因此硬體需求為:

  • 至少一台伺服器,最多可以擴增到1270台
  • CPU:64位元,必須支援Intel VT或AMD-V
  • 記憶體:8GB以上
  • 硬碟:80GB以上,建議每台伺服器都有2到4顆硬碟
  • 網路卡:1張

不支援以上最低需求的伺服器,再安裝時應該把Keepalive的HA優先度降低為0,以避免自己被輪到擔任Master Proxmox。

網路架構 / Network Topology

v3架構中是以網路管理伺服器(Zentyal)作為網路閘道路由器來連接內外網,在v4架構中則改成所有的節點都可直接連到對外網路。v4的所有節點仍維持原本的區域網路設定,僅有真正對外的伺服器以虛擬網路卡(Virtual Interface)掛載上可對外連線的網路設定。

在這個架構中至少四個對外IP。一個是給Master Proxmox實際對外連線的IP,其他3個是Zentyal上供管理Proxmox、NAS與虛擬機器的IP,其中管理虛擬機器的IP最多可以設定到250個。

設定舉例如下:

  • Master Proxmox IP位址:192.168.56.101
  • Zentyal上的設定:
    • 管理Proxmxo IP位址:192.168.56.102 (必須事先獲得上層DNS授權)
    • 管理NAS IP位址:192.168.56.103
    • 管理虛擬機器的IP位址:192.168.56.104

廣域網路其他設定:

  • Netmask 子網路遮罩:255.255.255.0
  • Gateway 網路閘道:192.168.56.1

v4在區域網路中的設定也跟v3不一樣:

  • Master Proxmox:10.254.0.254
    ※ 以虛擬IP掛載,同時會掛載Proxmox對外IP位址
  • Zentyal的IP位址:10.0.0.254
    ※ 同時會掛載Zentyal對外IP位址與兩個管理用IP
  • 每一台Proxmox:10.254.{1..5}.{1..99}
  • 每一台NAS:10.253.{1..5}.{1..99}
  • 虛擬機器:10.{1..250}.{1..5}.{1..254}

區域網路其他設定:

  • Netmask 子網路遮罩:255.0.0.0
  • Gateway 網路閘道:10.0.0.254

元件(1): 虛擬機器管理伺服器 / Component (1): Virtual Machine Management Server

跟v3架構中Proxmox僅作為Proxmox VE Cluster的一個節點不同,在v4架構中Proxmox還加上了高可用、分散式儲存等多項功能。

網路設定 / Network Configuration

Proxmox僅在區域網路中連線,網路設定為:

  • IP: 10.254.{1..5}.{1..99}
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Proxmox Hostname設定規則為:

  • pve.master-rack.a.1-1.example.com

以下說明hostname設定規則:

  • pve: 這是一個Proxmox VE伺服器
  • master-rack:所在機架代號
  • a:機架上的位置編號
  • pve: 這是一個Proxmox VE伺服器
  • 1-1: IP位址的第三部分與第四部分
  • example.com:依據單位各自狀態設定

在這個架構下,舊節點捨棄之後,新的節點不取代舊節點的IP,直接往上新增。例如節點10.254.1.1毀損之後,新機器不設定10.254.1.1,而是設定10.254.1.2。

特別是Hostname必須不同,不能取代舊節點的Hostname,不然Proxmox VE Cluster會發生錯誤。

功能 / Functions

v4架構中每一台Proxmox都具備一樣的工作,以下分項目敘述。

Proxmox VE Cluster跟v3架構一樣,只有Storage多掛載一個目錄:

  • 每一台Proxmox都是Proxmox VECluster的節點
  • 以下設定只有第一台需要設定:
    • 建立Proxmox VE Cluster,名稱為DLLL-CIAS
    • Storage 掛載 /mnt/mfs 為 a_mfs,Max Backup設定為1。關於/mnt/mfs下面會說明。
    • 再到Storage 掛載 /mnt/mfs 為 mfs-backup,Max Backup設定為5,僅有Backup功能。
    • 排程備份VMID 100到mfs-backup,時間為每週一凌晨2:00,備份模式為snapshot,壓縮為none。
    • 排程備份除了VMID 100之外的虛擬機器到a_mfs,時間為每週日凌晨2:00,備份模式為snapshot,壓縮為gzip最佳。
  • 第二台之後設定以下:

高可用:

  • keepalived套件
  • 每一台都擔任BACKUP角色
  • keepalived中使用notify_master的腳本keepalived_to_master.sh:當該節點升格成MASTER角色時執行的動作。細節在下面的「情結:切換MASTER」會說明。
  • 開機自動啟動keepalived

分散式儲存:

  • MooseFS套件
  • 設定/etc/hosts:10.254.0.254 cias-pve-master
  • 除了安裝Proxmox所在硬碟之外的所有硬碟,全部格式化為ext3,掛載到/data/底下。例如/dev/sdb掛載到/data/sdb
  • master套件:安裝完成,預設不啟動,縮短垃圾桶時間,限制只能10.254.0.0/16連線
  • metalogger套件:監控cias-pve-master (原本預設是mfsmaster,在此做修改)
  • chunkserver套件:提供/data底下的資料夾給cias-pve-master當做儲存空間
  • mfsmount (mfs-client端):在/mnt/mfs掛載cias-pve-master
  • 以上都開機自動啟動、開機自動掛載

Zentyal備份到本機端:

  • 用crontab,在每週一凌晨4:00,從/mnt/mfs/dump/vzdump-qemu-100-*_*_*-*_*_*.*,複製並重新命名到/var/lib/vz/dump/zentyal.tar.vma,覆蓋舊檔案

停電斷線自動關機:

  • 使用crontab,每3分鐘確認是否可連線到8.8.8.8。如果無法連線,表示可能對外網路已經斷線,預約15分鐘後進行關機
  • 若恢復連線,則取消關機動作。

元件(2): MASTER虛擬機器管理伺服器 / Component (2): Master Virtual Machine Management Server

在v4架構中只會有一台Proxmox擔任Master,以下簡稱Master Proxmox。這台Master Proxmox在以Keepalived實作的高可用集叢(High Availability Cluster,以下簡稱HA)中,可由任何一台Proxmox擔任。Keepalived會依照優先權決定擔任Master的Proxmox,在安裝Proxmox的時候可以設定優先權。

網路設定 / Network Configuration

Master的Promxox同時具有對外網路與對內網路連線,Keepalived會自動幫擔任Master的Proxmox設定好額外的網路設定。Master的網路設定都是用虛擬IP的方式設定,並不影響原本Proxmox本身的網路設定。

廣域網路設定如下,請根據現實環境來修改:

  • IP: 192.168.56.101
  • Netmask: 255.255.255.0
  • Gateway: 192.168.56.1

區域網路設定如下:

  • IP: 10.254.0.254
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Hostname為:cias-pve-master。但實際上並不設定在伺服器本身,僅在/etc/hosts記錄。

功能 / Functions

Master的Proxmox基本功能都跟其他Proxmox一樣,只是額外具有以下功能:

  • 負責給其他Proxmox加入Cluster用
  • Keepalived的status為MASTER
  • MooseFS的mfsmaster跟mfscgiserv皆啟動,可用9425連接埠觀看
  • 自身運作著Zentyal虛擬機器
  • 定時匯出虛擬機器列表到mfs管理目錄中
  • 定期檢查節點是否存活,如果沒有存活則自動將該節點進行情節(6)移除節點的腳本

元件(3): 網路管理伺服器 Zentyal / Component (3): Network Management Server

Zentyal的工作跟v3時差不多,但是把管理區域區隔開來,這部份會在雲端網路模組中改進。

網路設定 / Network Configuration

Zentyal的網路設定跟v3一樣有兩張網卡。對外廣域網路網卡上基本設定了一個IP,然後再用虛擬IP掛載至少兩個管理用IP。對內區域網路網卡則只會有一個設定。

廣域網路的設定請根據現實環境來修改。管理Proxmox的IP如下,這同時也是Zentyal Web GUI的連線設定,也必須是擁有DNS授權的功能:

  • IP: 192.168.56.102
  • Netmask: 255.255.255.0
  • Gateway: 192.168.56.1

然後以下兩個廣域IP是用虛擬IP的方式設定:

  • 管理NAS用:192.168.56.103。整合到雲端網路模組設定。
  • 管理虛擬機器用:192.168.56.104。此類型IP可以增加到240個。整合到雲端網路模組設定。

區域網路設定只有一個,設定如下:

  • IP: 10.0.0.254
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

Hostname為cias-router。

功能 / Functions

Zentyal使用KVM虛擬機器,主要工作為基本的閘道器跟雲端網路模組這兩種。

以KVM虛擬機器架設Zentyal設定為:

  • 硬碟:4 GB
  • 記憶體:2 GB
  • 網路卡:1張virtio高速網卡

該虛擬機器會預先配置好以下動作:

  • 安裝好Zentyal 3.0,僅安裝最小需要的元件:DNS Server、DHCP Server
  • 啟用模組
  • 配置區域網路設定:10.0.0.254/8
  • 安裝好雲端網路模組
  • 網路設定:SSH僅供10.254.0.254連線,其餘禁止
  • 設置DHCP Server:提供範圍是10.251.{0..254}.{1..254}
  • 設置腳本:新增Zentyal帳號與密碼 (create_user.sh)、設定Proxmox管理IP (setup_ip_proxmox.sh)、設定NAS管理IP (setup_ip_nas.sh)、設定虛擬機器管理IP (setup_ip_vm.sh)
  • 開發用腳本:清除log設定 (dev_clean.sh)

基本網路閘道器角色功能為:

  • DNS Server:可以設定註冊新的Domain Name
  • DHCP Server:給區域網路暫時取得IP使用

雲端網路模組包括:

  • PVE Back End:Proxmox連線管理:固定使用原本的IP,給Proxmox做連接埠轉遞跟反向代理伺服器(reverse proxy,以下簡稱RP)來連線管理
  • NAS Back End:NAS連線管理:指定一個IP給NAS用,給NAS做連接埠轉遞管理跟RP來連線管理
  • VM IP:虛擬機器管理IP對應編號設定:設定IP與區域網路第二部分對應,對應編號範圍為{0..250}。舉例來說,192.168.56.104對應設定0,對應的區域網路範圍就是10.0.{1..5}.{1..99},對應VMID為{1..5}{01..99}。虛擬機器VMID與區域網路IP對應請看後面的介紹。
  • VM Back End:虛擬機器連線管理:給虛擬機器做連接埠轉遞跟RP。直接設定VMID,由VMID轉換成區域網路IP對應。虛擬機器VMID與區域網路IP對應請看後面的介紹。
  • 其他:URL Redirect、DNS,功能跟v3相同,只是IP使用的是給Proxmox管理用IP。

元件(4): 資料儲存伺服器 NAS / Component (4): Storage Server

NAS在v4架構中不是必須的,但如果有多的NAS想納入架構的話,在v4中依有NAS的位置。跟v3一樣,NAS的功能主要的工作是擺放備份檔案、ISO跟虛擬應用範本。許多人會拿NAS來放置KVM的映像檔,然後運作KVM,但是在DLLL-CIAS中並不這樣做。DLLL-CIAS的虛擬機器預設都會運作在a_mfs上。

網路設定 / Network Configuration

NAS的網路設定都是區域網路,僅提供DLLL-CIAS內部使用,對外連線則是由Zentyal的NAS管理IP來控制。

  • IP: 10.253.{1..5}.{1..99}
  • Netmask: 255.0.0.0
  • Gateway: 10.0.0.254

NAS的Hostname設定規則與Proxmox類似:

  • nas.master-rack.a.1-1.example.com

以下說明Hostname設定規則:

  • nas: 這是一台NAS
  • master-rack:所在機架代號
  • a:機架上的位置編號
  • 1-1: IP位址的第三部分與第四部分
  • example.com:依據單位各自狀態設定
功能 / Functions

在v4中的NAS只會使用它的NFS功能,分享的NFS名稱同Hostname,讓它掛載到Proxmox VE Cluster的Storage中,掛載名稱也跟Hostname相同。


虛擬機器VMID與區域網路IP對應規劃 / Virtual Machine ID and Local IP Address Mapping

為了確保虛擬機器與區域網路IP的一致性,v4架構中在雲端網路模組改以強制設定VMID,而非以往的設定區域網路IP。VMID與IP的對應規則如下:

VMID 100為特殊VMID,僅給zentyal使用。

VMID的組合基本上為3~6碼,分成前三碼跟後三碼兩個部分,前三碼為虛擬機器管理對外IP對應編號,範圍為{0..250},對應到區域網路IP的第二部分;後三碼為連接埠轉遞的編號,範圍為{101..199}、{201..299}、{301..399}、{401..499}、{501..599},連接埠轉遞編號第一碼對應到區域網路IP的第三部分、後兩碼對應到區域網路IP的第四部分。

舉例來說:

  • VMID 101:對外IP編號0,連接埠轉遞101xx,區域網路IP 10.0.1.1,這是VMID範圍的最小值。
  • VMID 10501:對外IP編號10,連接埠轉遞501xx,區域網路IP 10.10.5.1
  • VMID 250599:對外IP編號250,連接埠轉遞599xx,區域網路IP 10.250.5.99,這是VMID範圍的最大值。

在這樣的規劃下,v4的虛擬機器最大數量為495連接埠轉遞*250對外IP編號共123000 (12萬3千)台,此時需要250個給虛擬機器用的對外IP,加上其他元件的需求,總共需要253個對外IP。

若以最低對外IP的條件來看,以最少4個對外IP的規劃中,虛擬機器最大數量即為495台。


管理情節 / Management Scenario

v4的架構中有許多管理情節,主要會用到的有以下幾項,並概述情節中會進行的動作。

情節(1):安裝 / Scenario (1): Install Master

v4架設需要一台伺服器跟一片Proxmox VE 3.2光碟,你可以從這邊下載。安裝動作只需要執行一次,簡稱為Master安裝,只要有Master Proxmox在,其他伺服器應該執行擴增動作。

以下是手動的部份,[M]表示Master安裝中特別會做的動作:

  • 安裝Proxmox VE 3.2
  • [M] 安裝過程中設定對外Master IP
  • 從網路下載dlll_cias-setup.sh腳本
  • 增加執行權限並執行dlll_cias-setup.sh腳本

腳本首先先蒐集設定資訊:

  • 腳本檢查網路可否連線,不可連線則提示訊息後退出
  • 詢問Keepalived的優先度,範圍是{0..100},預設值是50,數字越大越可能擔任Master Proxmox。
  • 腳本檢查是否有Master在,來決定是否是Master安裝模式。
  • [M] 腳本詢問給Zentyal的帳號與密碼
  • [M] 腳本詢問給Zentyal網路設定:Proxmox管理IP、NAS管理IP、虛擬機器管理IP、netmask、gateway
  • 腳本提示準備開始安裝,按enter確認。

腳本先保存管理資訊跟下載必要檔案,保存到/data/cias管理目錄中:

  • [M] 保存Master Proxmox的對外IP、Zentyal的Proxmox網路設定到一個管理連線設定檔
  • [M] 下載keepalived需要的keepalived.conf等必要腳本
  • [M] 根據對外IP來調整keepalived設定檔
  • [M] 製作手動切換的keepalived設定檔
  • [M] 下載MooseFS必要的設定檔案
  • [M] 下載Zentyal虛擬機器即必要腳本
  • [M] 下載DLLL-CIAS管理用的必要腳本
  • [M] 根據此Proxmox VE安裝中設定的管理者email,設定通知設定檔
  • [M] 調整腳本權限

腳本接著進行網路設定與Keepalived的安裝:

  • 安裝Keepalived必要元件
  • 從管理目錄複製必要設定到指定位置
  • 根據現在網路卡數量,將所有網路卡都bonding到vmbr0上
  • [M] 修改vmbr0網卡設定為10.254.0.1
  • 啟用Keepalived
  • [M] 此時vmbr0應該會額外被掛上Master對外IP跟10.254.0.254的虛擬IP
  • 設定開機自動執行

腳本接著進行MooseFS安裝:

  • 新增10.254.0.254 cias-pve-master設定到/etc/hosts
  • 安裝MooseFS所需元件(包括更新fuse)
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用metalogger
  • [M] 啟用master
  • 確認cias-pve-master可連線
  • 格式化Proxmox VE安裝外的其他磁碟,並進行掛載
  • 依據磁碟數量調整chunk設定檔
  • 啟用chunk
  • 掛載mfsmount
  • 設定開機自動執行
  • [M] 把需要共用的檔案放到 /mnt/mfs/cias 中

如果是Master安裝模式,則腳本進行以下動作:

  • [M] 新增Promxox VE Cluster
  • [M] 新增Cluster的Storage,掛載MooseFS
  • [M] 新增Cluster的排程備份

如果是Master安裝模式,則腳本接著進行Zentyal的安裝:

  • [M] 從管理目錄還原Zentyal虛擬機器
  • [M] 開機Zentyal
  • [M] 以預設帳號cias與預設密碼dlll@nccu連線到Zentyal (預設IP為10.0.0.254)
  • [M] 設定Zentyal的管理用IP
  • [M] 新增Zentyal帳號與密碼
  • [M] 在背景執行備份Zentyal
  • [M] 在背景執行備份Zentyal到Local

腳本新增排程工作:

  • 設定排程,定期將Zentyal備份檔案備份到Local硬碟中
  • 設定排程,定期偵測斷線自動關機腳本
  • [M] 設定排程,定期將現有節點上所擁有的虛擬機器的VMID儲存到/mnt/mfs/cias/pve_master_vmid.conf中
  • [M] 每隔5分鐘確認所有節點可連線狀態,若一節點無法連線,則等待30分鐘,若30分鐘後仍然無法連線,執行情節(6)移除此節點

腳本提示安裝完成訊息:

  • 安裝完成
  • 根據/mnt/mfs/cias/cias-network.conf,顯示Proxmox VE管理IP跟Zentyal網頁管理IP

以上安裝完成,這時候應該會持續備份Zentyal虛擬機器,就讓它跑吧。


情節(2):擴增 / Scenario (2): Extend Slave

v4架構下,擴增時需要一台伺服器跟一片Proxmox VE 3.2光碟,你可以從這邊下載。若已經架設好Master Proxmox,則其他伺服器則是用擴增的方式安裝,簡稱Slave安裝。

以下是手動的部份,[S] 表示擴增使用

  • 安裝Proxmox VE 3.2
  • [S] 安裝過程中設定區域網路IP 10.254.{0..254}.{2..254} (因為10.254.0.1給Master Proxmox使用了)
  • 從網路下載dlll_cias-setup.sh腳本
  • 增加執行權限並執行dlll_cias-setup.sh腳本

腳本首先先蒐集設定資訊:

  • 腳本檢查網路可否連線,不可連線則提示訊息後退出
  • 詢問Keepalived的優先度,範圍是{0..100},預設值是50,數字越大越可能擔任Master Proxmox。
  • 腳本檢查是否有Master在,來決定是否是Master安裝模式。因為有Master在了,所以以下是Slave安裝。
  • [S] 詢問Master Proxmox的連線密碼,並測試連線到Master Proxmox以確認金鑰
  • 腳本提示準備開始安裝,按enter確認。

腳本從Master Proxmox複製管理資訊:

  • [S] 用rsync複製Master Proxmox的管理目錄底下的檔案到本機的管理目錄

腳本接著進行MooseFS安裝:

  • 新增10.254.0.254 cias-pve-master設定到/etc/hosts
  • 安裝MooseFS所需元件(包括更新fuse)
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用metalogger
  • 確認cias-pve-master可連線
  • 格式化Proxmox VE安裝外的其他磁碟,並進行掛載
  • 依據磁碟數量調整chunk設定檔
  • 啟用chunk
  • 掛載mfsmount
  • 設定開機自動執行

腳本接著進行網路設定與Keepalived的安裝:

  • 安裝Keepalived必要元件
  • 根據現在網路卡數量,將所有網路卡都bonding到vmbr0上
  • 從管理目錄複製必要設定檔到指定位置
  • 啟用Keepalived
  • 設定開機自動執行

如果是Slave安裝模式,則腳本進行以下動作:

  • [S] Proxmox VE Cluster加入到Master Proxmox中

腳本新增排程工作:

  • 設定排程,定期將Zentyal備份檔案備份到Local硬碟中
  • 設定排程,定期偵測斷線自動關機腳本
  • [S] 以背景執行從Zentyal備份檔案備份到Local硬碟中

腳本提示安裝完成訊息:

  • 安裝完成
  • 根據/mnt/mfs/cias/cias-network.conf,顯示Proxmox VE管理IP跟Zentyal網頁管理IP

以上安裝完成,這時候應該會持續備份Zentyal虛擬機器,就讓它跑吧。


情節(3):自動切換Master Proxmox / Scenario (3): Automatically Swtich Master Proxmox

由於Keepalived工具提供的高可用集叢,當Master Proxmox無法連線時,Keepalived會自動挑選其中一台Proxmox,把它當作Master Proxmox,並進行以下切換的動作。

以下Keepalived會自動設定:

  • 掛載對外Master Proxmox對外網路
  • 掛載cias-pve-master 10.254.0.254

然後進行MooseFS高可用設定:

  • metalogger復原master資料:mfsmetarestore -a
  • 啟動master

虛擬機器的高可用:

  • 一一檢查/mnt/mfs/cias/pve_master_vmid.conf中的VMID
  • 如果集叢中VMID 100虛擬機器存在且可用,試著Migrate到這個節點上
  • 如果集叢中無法取得該虛擬機器,則嘗試從備份檔案中還原虛擬機器
    • VMID 100是Zentyal,從本機端取得還原檔案
    • 其他VMID則從mfs取得檔案還原,選擇負載量最低且非Master Proxmox的節點去還原
  • 確認虛擬機器的auto_start=1下正常開機

通知:

  • 寫信給現在mfs管理目錄中設定的管理者

情節(4):手動切換Master Proxmox / Scenario (4): Manual Swtich Master Proxmox

有些情況下我們希望手動指定Master Proxmox到特定伺服器上,而若該伺服器沒有被Keepalived指名,我們可以用以下的指令來手動切換Master Proxmox。

  • 到管理目錄執行 dlll_cias-swtich_to_master.sh

該腳本會先進行以下動作

  • 將原本keepalived.conf改成keepalived.conf.temp
  • 把調高權限的keepalived.conf複製到此位置:此設定中預設status為MASTER,priotity為999。
  • 重新啟動Keepalived,此時因為設定的關係,會將其他節點上的Master Proxmox狀態搶到自己身上
  • 自動執行情境(3)的腳本
  • 刪除調高權限的設定檔,復原原本的keepalived.conf設定檔

情節(5):手動退出集叢 / Scenario (5): Proxmox Escape From Cluster

此節點預備要退出集叢,則在要此節點上執行此腳本:

  • 設定遷移完畢之後的通知email
  • 取得本機上的虛擬機器列表
  • 每一台虛擬機器進行以下動作
    • 根據每一台Proxmox的RAM使用量,決定移到負荷量最低且非Master Proxmox的Proxmox
    • 遷移虛擬機器,除了VMID 100
  • 如果自己是Master Proxmox
    • 更新本機端虛擬機器檔案
    • 重新啟動Keepalived,此時其他節點會搶走MASTER狀態,並把VMID 100 Zentyal遷移到他身上去
    • 每隔5分鐘確認VMID 100是否遷移完成
  • 全部遷移完成之後,脫離Cluster
  • 發信通知管理者,以及mfs管理目錄中的管理者
  • 實體伺服器關機

情節(6):移除Proxmox節點 / Scenario (6): Delete Proxmox Node

如果某一個節點因為意外斷線,則必須重建該節點上面的虛擬機器,並移除該節點。這個情節是由Master Proxmox定時運作,此腳本工作為:

  • 取得參數:指定要移除的節點
  • 確認該節點是否可連線
  • 如果可連線,則在該節點上執行情節(5)
  • 如果不可連線,則讀取該節點的虛擬機器列表
  • 選擇最低負載量與非Master Proxmox,從mfs備份檔案中還原
  • 全部還原完成之後,將此節點從cluster中移除
  • 寫信通知email

注意事項 / Attention Notes

v4的架構在使用的時候有一些地方需要特別注意。

網路連線安全性 / Network Security

為了讓網路管理伺服器去中心化,所有的節點都暴露在對外網路中。這個意思是,如果該網域底下有人自行設定網路為Master Proxmox的10.254.0.254或任一10.x.x.x的IP,v4架構就會很容易發生錯誤或是被入侵。但是比起v3時會有網路管理伺服器Zentyal單點故障導致整體無法運作的問題,去中心化的設計只是在安全性與便利性上的取捨。

額外的便利性是任一虛擬機器都可以設定成對外IP,提供直接連線。

Master Proxmox的高負荷量 / High Loading of Master Proxmox

目前Master Proxmox主要只有做高可用,可是其本身負擔著大量的工作,最主要的就是Zentyal跟Mooster的mfsmaster。Zentyal必須處理大量連線,而mfsmaster在檔案數量大增的時候對於RAM的需求也很高。

即使可以手動指定負載能力最高的伺服器擔任Master Proxmox,但還是沒辦法讓其他人分擔Master Proxmox的工作量。目前我想不到是否有其他的好辦法,留待下一版DLLL-CIAS再看看有沒有更好的方案吧。


待研究事項 / To-Do

這篇只是v4的架構草案,目前還有許多地方未經確認與實作,仍有待繼續研究。目前主要需要確認的問題包括:

  • 網路卡實作bonding的技術還沒實作過
  • Proxmox VE Cluster節點只剩下一台的時候,會因為cluster not ready而限制很多操作,包括下一個問題。
  • 新master還原虛擬機器zentyal時,會因為舊節點還沒移除而被卡住:理論上,在cluster上會保留斷線的節點以及上面的虛擬機器設定,而禁止在同一個cluster不同節點上新增同樣的VMID。這部份一定得想辦法克服才行。
  • Zentyal在最小安裝與合理負荷之間的平衡:只有實際上架設過後才能知道了
  • Zentyal腳本操作可行性:我記得Zentyal可以用腳本來操作,可是一時間找不到說明文件

可能比較不會是問題,但是需要研究如何撰寫的腳本:

  • 依據磁碟數量來做格式化的腳本
  • metalogger復原master還沒實作過
  • 改進雲端網路模組的功能
  • 確認虛擬機器在Cluster中存在的腳本
  • 遷移虛擬機器到本機端的腳本

實作上面的待辦事項:

  • 架設開發用的Zentyal:要注意硬體設定
  • 各種腳本與設定檔的撰寫

結語:Proxmox VE Cluster依然是大難關 / Conclusion: Problems With Proxmox VE Cluster

以上規劃了DLLL-CIAS第四版的架構,基於第三版的架構之上再納入網路管理伺服器去中心化、分散式儲存、虛擬機器高可用與腳本簡化安裝等想法,並改進了雲端網路模組的設計,讓可同時運作的虛擬機器上限提高。

但是其實最根本的問題還沒解決:Proxmox VE Cluster仍有高度不穩定性的問題。

如果一開始都把Proxmox VE Cluster架設好、加入集叢,然後每個節點放著正常運作,這樣子Cluster沒有問題。若是節點以正常的方式關機,Cluster依然沒有問題。

但問題會出現在節點以非正常方式斷線或關機,或是節點數量只剩下一台時,這樣會導致整個Cluster運作失靈。要移除節點或是用相同Hostname加入Cluster時,好像也有可能導致Cluster毀損。

當Cluster毀損時,不管點任何動作,都會被要求登入,而且除了自己節點之外的其他節點都無法顯示任何訊息。

目前修復Proxmox VE Cluster的方法仍然不明,要如何避免Cluster毀損的方法也還沒有摸熟,這些都是要在發展v4之前必須搞懂得部分。

我們之前修復的方式是以不同名字重建Cluster,然後從NFS中取得備份檔案來還原。手動作業耗費了相當多的時間,我覺得這是相當大的一個問題。

之後有機會會再針對這部份進行深入的研究,至少要確保Cluster正常運作,DLLL-CIAS才算是一個穩定的方案吧。