設置虛擬集群可能是一個復雜、耗時的過程,因此起步的最佳方式是從細微處著手。
首先需要有兩個Red Hat Enterprise Linux或CentOS 7節點,并配置正確的轉發及反向域名系統,由于Red Hat 6及7之間有些變化,顯著降低了集群管理的復雜度。
集群設置主要依靠兩種技術:Pacemaker 和 Corosync。Pacemaker運行集群管理端,Corosync管理更低級別的集群項目以確保連通性。
使用如下命令同時安裝Pacemaker 和 Corosync:
yum install –y pcs fence-agents-all
該命令將會下載配置集群所需要的所有依賴包,請注意必須在兩個節點上執行上述命令。
你還需要增加一個防火墻規則以允許通過必需的流量。只需要運行如下命令:
firewall-cmd --permanent --add-service=high-availability
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
啟動集群設備
接下來的步驟是啟用并啟動集群服務。需要運行如下命令:
systemctl enable pcsd.service
systemctl start pcsd.service
第一行命令在啟動時啟用集群服務,第二行命令在當前會話啟動集群服務。
圖A 啟用并開啟集群服務
如果你有興趣,可以查看/var/logs/cluster/目錄下日志確認發生了什么。此時,我們已經啟動了集群服務,但還沒有真正構建集群設置。
采用最新版本的RHEL或CentOS,可以在命令行下使用pcs命令——“Pacemaker/Corosync配置系統”的簡稱——直接進行配置,這比之前的安裝過程更簡單。
安裝完集群配置后,創建了一個名為hacluster的用戶管理虛擬集群。為了能夠使用該賬號,必須更改密碼,因此在兩個節點上使用如下命令重置密碼:passwd hacluster
管理虛擬集群
完成上述配置后,就可以開始管理虛擬集群與節點了。第一個步驟是授權包含在虛擬集群中的節點。命令如下:pcs cluster auth node1 node2
如果一切按計劃進行,屏幕看起來應該與圖B類似。
圖B 授權集群節點
創建集群資源
下一個步驟是創建集群資源。可以使用pcs cluster setup命令創建集群資源:pcs cluster setup --start --name myapp node1 node2
此時,集群資源控制器將刷新現有配置,同步新配置數據并構建一個包括兩個指定節點的新配置。接下來就是使用如下命令啟用虛擬集群: pcs cluster enable --all
結果應該會顯示兩個節點已經啟用了。為檢查整個集群的狀態,可以使用命令pcs cluster status,該命令將顯示當前集群狀態的概要信息。
圖C 檢查當前集群狀態
理解共享存儲的作用
在處理虛擬集群節點時需要牢記的一個重要事項是確保已關閉了hypervisor級的文件鎖定系統。不這樣做可能會帶來很多問題,包括導致有問題的磁盤變為只讀的。應該在操作系統級完成鎖定。為覆蓋該設置,請檢查hypervisor文檔。
在本示例中,我們僅設置相關配置。我們需要做的一件事是對服務器如何決定虛擬集群內什么是“活的”以及什么是“死的”進行管理。這可以通過稱之為fencing的進程完成。當節點沒有完全出故障并出現問題時,Fencing允許每個節點停止其他節點以保持集群的完整性。
沒有有效的fencing配置,客戶端將無法啟動。fencing命令是pcs stonith。stonith是“關閉其他節點”首字母的縮略詞,是一個能夠關閉未在正常運行的節點的Linux服務。
有一些fence方法可用,但我們在示例中使用的是內置的虛擬fencing方法。在任何一個節點上運行如下命令:
pcs stonith create newfence fence_virt pcmk_host_list=f1
此時,我們可以使用如下命令重新啟用集群組件:pcs cluster start --all
如果你使用的是pcs status命令,應該顯示正在正常運行的服務。
啟用虛擬IP
完成上述配置后,我們需要啟用虛擬IP。虛擬IP是沒有物理連接的地址。其用意是充當虛擬集群提供服務的容錯前端。例如,如果一個節點出故障,不需要任何手動配置或者明顯的停機時間,所有的流量將會路由到另一個集群節點。
根據需要取代如下命令中的IP地址,然后執行:
pcs resource create Cluster_VIP ocf:heartbeat:IPaddr2 ip=192.168.0.100 cidr_netmask=24 op monitor interval=20s
集群現在應該處于活動狀態。在開始使用集群前你需要增加集群資源。