文章目錄
- 1. Pacemaker簡介
-
- 1.1 Pacemaker簡介
- 1.2 pcs 簡介
- 1.3 pcs常用管理指令
- 2. 安裝與配置
- 3. 測試
- 4. pacemaker與HAProxy
-
- 4.1 配置
- 4.2 測試1:關閉節點的pcs服務
- 4.3 測試2:關閉haproxy服務
- 4.4 測試3:删除vip
- 4.5 測試4:禁掉硬體裝置
- 5. fence(防止叢集伺服器假死)
-
- 5.1 檢測主機安裝與配置
- 5.2 被檢測節點配置(叢集伺服器)
- 5.3 測試1:損壞核心
- 5.4 測試2:禁掉硬體裝置
- 6. lvs與nginx
1. Pacemaker簡介
1.1 Pacemaker簡介
Pacemaker是 Linux環境中使用最為廣泛的開源叢集資料總管, Pacemaker利用叢集基礎架構(Corosync或者 Heartbeat)提供的消息和叢集成員管理功能,實作節點和資源級别的故障檢測和資源恢複,進而最大程度保證叢集服務的高可用。從邏輯功能而言, pacemaker在叢集管理者所定義的資源規則驅動下,負責叢集中軟體服務的全生命周期管理,這種管理甚至包括整個軟體系統以及軟體系統彼此之間的互動。 Pacemaker在實際應用中可以管理任何規模的叢集,由于其具備強大的資源依賴模型,這使得叢集管理者能夠精确描述和表達叢集資源之間的關系(包括資源的順序和位置等關系)。同時,對于任何形式的軟體資源,通過為其自定義資源啟動與管理腳本(資源代理),幾乎都能作為資源對象而被 Pacemaker管理。此外,需要指出的是, Pacemaker僅是資料總管,并不提供叢集心跳資訊,由于任何高可用叢集都必須具備心跳監測機制,因而很多初學者總會誤以為 Pacemaker本身具有心跳檢測功能,而事實上 Pacemaker的心跳機制主要基于 Corosync或 Heartbeat來實作
- pcsd.service:服務名稱
1.2 pcs 簡介
pcs:Pacemaker叢集的管理工具
- Pacemaker社群推出了兩個常用的叢集管理指令行工具,即叢集管理者最為常用的 pcs和 crmsh指令;
- 此外,需要注意的是, pcs指令行的使用對系統中安裝的 pacemaker和 corosync軟體版本有一定要求,即 Pacemaker1.1.8及其以上版本, Corosync 2.0及其以上版本才能使用 pcs指令行工具進行叢集管理
1.3 pcs常用管理指令
cluster:配置叢集選項和節點
status:檢視目前叢集資源和節點以及程序狀态
resource:建立和管理叢集資源
constraint:管理叢集資源限制和限制
property:管理叢集節點和資源屬性
config:以使用者可讀格式顯示完整叢集配置資訊
2. 安裝與配置
實驗環境:1. 防火牆關閉 2. selinux為Disabled
兩台伺服器(之間做好免密):
server1:192.168.17.1
server4:192.168.17.4
- 軟體倉庫配置
vim /etc/yum.repos.d/westos.repo
[dvd]
name=rhel7.6 BaseOS
baseurl=http://192.168.17.1/rhel7.6/
gpgcheck=0
[HighAvailability]
name=rhel7.6
baseurl=http://192.168.17.1/rhel7.6/addons/HighAvailability
gpgcheck=0
- 安裝pacemaker與pcs與psmisc與policycoreutils-python
yum install -y pacemaker pcs psmisc policycoreutils-python
ssh server4 yum install -y pacemaker pcs psmisc policycoreutils-python
- 永久開啟服務
systemctl enable --now pcsd.service
ssh server4 systemctl enable --now pcsd.service
- 設定密碼
echo westos | passwd --stdin hacluster
ssh server4 'echo westos | passwd --stdin hacluster'
- 配置群集節點認證
pcs cluster auth server1 server4

- 建立一個二節點的群集
pcs cluster setup --name mycluster server1 server4
- 啟動群集
pcs cluster start --all
pcs cluster enable --all
- 禁用STONITH元件功能
pcs property set stonith-enabled=false
若是不禁用
pcs status 檢視狀态時會有警告
crm_verify -LV 驗證群集配置資訊會有錯誤
- 建立VIP
pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.17.100 op monitor interval=30s
#參數都可以通過pcs resource create --help檢視
3. 測試
- 在節點server1上檢視,顯示節點server1開啟,并自動添加VIP
- 當停止節點server1服務時,另一個節點server4自動接管,自動添加VIP
pcs cluster stop server1
- 重新啟動節點server1,資源不會回切,server4保持不變 繼續接管
pcs cluster start server1
4. pacemaker與HAProxy
4.1 配置
- 兩個伺服器節點均安裝haproxy,且關閉haproxy服務,配置也相同
yum install -y haproxy
systemctl disable --now haproxy.service
- 建立資源
pcs resource create haproxy systemd:haproxy op monitor interval=30s
- 建立組(使兩個資源被同一節點管理)
pcs resource group add hagroup vip haproxy
:按照指令順序,先管理vip,再是haproxy
- 通路:http://172.25.17.100/status
4.2 測試1:關閉節點的pcs服務
- 關閉節點server4發現,自動被空閑節點server1接管,server4重新開啟服務後,不會回切
pcs node standby
pcs node unstandby
4.3 測試2:關閉haproxy服務
- 關閉haproxy服務後,系統檢測到又會自動開啟,顯示狀态時會有日志顯示haproxy關閉過
4.4 測試3:删除vip
- 删除後,檢測到vip被删除,會自動添加
4.5 測試4:禁掉硬體裝置
ip link set down 網卡接口
- 發現資源被自動接管到另一空閑節點server4,但是server1仍舊以為是自己接管,等到server1重新開機後才顯示正常
5. fence(防止叢集伺服器假死)
fence作用:在HA叢集壞境中,備用伺服器B通過心跳線來發送資料包來看主伺服器A是否還活着,主伺服器A接收了大量的用戶端通路請求,伺服器A的CPU負載達到100%響應不過來了,資源已經耗盡,沒有辦法回複伺服器B資料包時,(回複資料包會延遲),伺服器B認為伺服器A已經挂了,于是備用伺服器B把資源奪過來,自己做主伺服器,過了一段時間伺服器A響應過來了,伺服器A覺得自己是老大,伺服器B覺得自己也是老大,他們兩個就掙着搶奪資源,叢集資源被多個節點占有,兩個伺服器同時向資源寫資料,破壞了資源的安全性和一緻性,這種情況的發生叫做“腦裂”。伺服器A負載過重,響應不過來了,有了Fence機制,Fence會自動的把伺服器A給kill掉,以阻止“腦裂”的發生。
原理:當意外原因導緻主機異常或者當機時,備機會首先調用FENCE裝置,然後通過FENCE裝置将異常主機重新開機或者從網絡隔離,當FENCE操作成功執行後,傳回資訊給備機,備機在接到FENCE成功的資訊後,開始接管主機的服務和資源。這樣通過FENCE裝置,将異常節點占據的資源進行了釋放,保證了資源和服務始終運作在一個節點上。
類型:硬體Fence:電源Fence,通過關掉電源來踢掉壞的伺服器 軟體Fence:Fence卡(智能卡),通過線纜、軟體來踢掉壞的伺服器
5.1 檢測主機安裝與配置
fence主機:192.168.17.250
- 安裝fence-virtd、fence-virtd-libvirt、fence-virtd-multicast,網絡監聽器、電源管理器、核心層面控制虛拟機
yum install -y fence-virtd
yum install -y fence-virtd-libvirt
yum install -y fence-virtd-multicast
- 編寫fence資訊
fence_virtd -c
- 建立目錄/etc/cluster,切到其目錄下,生成key檔案
mkdir /etc/cluster
cd /etc/cluster
dd if=/dev/urandom of=fence_xvm.key bs=128 count=1
:生成key檔案
- 重新開機fence_virtd服務,可以檢視到1229端口
systemctl restart fence_virtd
- 傳輸key檔案到被監測節點(在所有節點提前建立/etc/cluster目錄)
scp fence_xvm.key [email protected]:/etc/cluster/
scp fence_xvm.key [email protected]:/etc/cluster/
5.2 被檢測節點配置(叢集伺服器)
- 所有叢集伺服器安裝fence-virt
yum install fence-virt.x86_64 -y
ssh server4 yum install fence-virt.x86_64 -y
- 檢視fence代理
stonith_admin -I
- 添加fence
pcs stonith create vmfence fence_xvm pcmk_host_map="server1:vm1;server4:vm4" op monitor interval=60s
選項在pcs stonith describe fence_xvm都可以檢視到
#pcmk_host_map的值以鍵值對書寫,如下:
#hostname:虛拟機名稱
- 開啟STONITH元件功能
pcs property set stonith-enabled=true
- 驗證群集配置資訊
crm_verify -LV
5.3 測試1:損壞核心
- 在節點server4測試:損壞核心,發現server4自動關機,再開啟,實作監測功能!
echo c > /proc/sysrq-trigger
5.4 測試2:禁掉硬體裝置
- 禁掉server4硬體裝置,發現server4自動關機,再開啟,實作監測功能!
ip link set down eth0
6. lvs與nginx
- 關閉pcs
pcs cluster stop --all
pcs cluster disable --all
- 安裝源碼nginx
tar zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0
yum install -y gcc pcre-devel openssl-devel
:安裝gcc、pcre-devel、openssl-devel
vim auto/cc/gcc
#CFLAGS="$CFLAGS -g"
#注釋此行(127行)可以使安裝後的二進制檔案更小
./configure --prefix=/usr/local/nginx --with-http_ssl_module
:configure腳本,指定安裝路徑等參數
make && make install
- 配置環境變量并啟動服務
cd /usr/local/nginx/sbin/
:變量配置此目錄
vim .bash_profile
:編寫變量
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin
source .bash_profile
:重新讀取檔案,使變量生效
nginx
:啟動服務
- 配置檔案
vim /usr/local/nginx/conf/nginx.conf
117 upstream westos {
118 server 172.25.17.2:80;
119 server 172.25.17.3:80;
120 }
121
122 server {
123 listen 80;
124 server_name demo.westos.org;
125 location / {
126 proxy_pass http://westos;
127 }
128 }
nginx -t
:檢查文法錯誤
nginx -s reload
:重新讀取配置檔案
- 測試:在測試主機配置解析後再通路
vim /etc/hosts
192.168.17.1 demo.westos.org