天天看點

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

文章目錄

  • 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

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 建立一個二節點的群集

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 驗證群集配置資訊會有錯誤
           
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 建立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
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 當停止節點server1服務時,另一個節點server4自動接管,自動添加VIP

pcs cluster stop server1

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 重新啟動節點server1,資源不會回切,server4保持不變 繼續接管

pcs cluster start server1

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

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

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 建立組(使兩個資源被同一節點管理)

pcs resource group add hagroup vip haproxy

:按照指令順序,先管理vip,再是haproxy

  • 通路:http://172.25.17.100/status
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

4.2 測試1:關閉節點的pcs服務

  • 關閉節點server4發現,自動被空閑節點server1接管,server4重新開啟服務後,不會回切

pcs node standby

pcs node unstandby

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

4.3 測試2:關閉haproxy服務

  • 關閉haproxy服務後,系統檢測到又會自動開啟,顯示狀态時會有日志顯示haproxy關閉過
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

4.4 測試3:删除vip

  • 删除後,檢測到vip被删除,會自動添加
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

4.5 測試4:禁掉硬體裝置

ip link set down 網卡接口

  • 發現資源被自動接管到另一空閑節點server4,但是server1仍舊以為是自己接管,等到server1重新開機後才顯示正常
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

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

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 建立目錄/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/

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

5.2 被檢測節點配置(叢集伺服器)

  • 所有叢集伺服器安裝fence-virt

yum install fence-virt.x86_64 -y

ssh server4 yum install fence-virt.x86_64 -y

  • 檢視fence代理

stonith_admin -I

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 添加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:虛拟機名稱
           
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 開啟STONITH元件功能

pcs property set stonith-enabled=true

  • 驗證群集配置資訊

crm_verify -LV

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

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

:啟動服務

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與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

:重新讀取配置檔案

【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx
  • 測試:在測試主機配置解析後再通路

vim /etc/hosts

192.168.17.1     demo.westos.org
           
【Linux35】Pacemaker高可用叢集+HAProxy+fence-virtd+nginx1. Pacemaker簡介2. 安裝與配置3. 測試4. pacemaker與HAProxy5. fence(防止叢集伺服器假死)6. lvs與nginx

繼續閱讀