1. 程式人生 > 實用技巧 >企業部分之-HA高可用叢集的搭建

企業部分之-HA高可用叢集的搭建

高可用叢集的概念:高可用叢集就是當某一個節點或伺服器發生故障時,另一個節點能夠自動且立即向外提供服務,即將有故障節點上的資源轉移到另一個節點上去,這樣另一個節點有了資源既可以向外提供服務。高可用叢集是用於單個節點發生故障時,能夠自動將資源、服務進行切換,這樣可以保證服務一直線上。在這個過程中,對於客戶端來說是透明的。

實驗環境:需要三臺純淨的虛擬機器 iptables關閉 selinux為disabled

server1:172.25.19.1 #ricci節點主機

server2:172.25.19.2 #ricci節點主機

server3:172.25.19.3 #luci管理主

yum源的配置vim /etc/yum.repo/

[server]

name=huang

baseurl=http://172.25.254.19/rhel6.5

gpgcheck=1

[HighAvailability]

name=huang

baseurl=http://172.25.254.19/rhel6.5/HighAvailability

gpgcheck=1

[LoadBalancer]

name=huang

baseurl=http://172.25.254.19/rhel6.5/LoadBalancer

gpgcheck=1

[ResilientStorage]

name=huang

baseurl=http://172.25.254.19/rhel6.5/ResilientStorage

gpgcheck=1

[ScalableFileSystem]

name=huang

baseurl=http://172.25.254.19/rhel6.5/ScalableFileSystem

gpgcheck=1

三臺虛擬機器都要配置yum源

wKiom1dxJFOyAIpGAAFBb-Bq7iQ237.png三臺虛擬機器和物理機都要有解析 如下一個範列其他主機一樣配置

wKiom1dhct6wIvAeAACh4IvjBx0408.png

實驗過程:

server1 ricci節點主機上:

yum install ricci -y #安裝ricci軟體

echo westos | passwd --stdin ricci #給ricci密碼 一定要有 否則建立不了叢集

chkconfig ricci on #設定ricci服務開機自啟

/etc/init.d/ricci start

yum install httpd #不要啟動該服務

在server2 ricci節點主機上:進行以上同樣的步驟。

在server3 luci管理主機上:

yum install luci -y #安裝luci管理軟體

/etc/init.d/luci start #啟動luci服務 wKioL1dxJXHTkgLbAAAvllHBbpc234.png

在瀏覽器訪問https://server3.example.com:8084

wKioL1dhdS7im89nAAAdb7ynNH0878.png

注:使用server3的root使用者登入

建立叢集:

wKiom1dhdL3BWtOkAADIUqIrinE514.png

叢集的名字隨便填寫 但字元數不要超過15個 超過了就會建立不成功

wKiom1dhdQTw-RsQAABmLuAqmJM774.png

顯示該頁面 說明叢集建立成功

用cluster命令檢視ricci節點主機上的叢集狀態

wKiom1dxJmyxR8MnAABCKK_hzl0347.png

重複建立叢集會報錯 如果想重新建立 需要 rm -rf /etc/cluster/cluster.conf 然後重啟服務 再建立 在網頁上所做的動作都會寫入該檔案 /etc/cluster/cluster.conf

fence裝置檔案的生成

在物理機上:

yum search fence

wKioL1dxJyDy6ZweAABudsy0kUQ716.png

然後 yum install fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicas -y

wKioL1dhdtDz205GAAByMYh9ND4023.png

執行命令 fence_virtd -c

wKioL1dhdz-z_d4qAAEY3Tw4OQ0666.pngwKiom1dhdhHzOJJtAAD5bbTy1Dg263.png

wKiom1dhdkvyUAiLAACriWaSuu0254.pngf

mkdir /etc/cluster -p(有該目錄就不需要建立了)

cd /etc/cluster/

dd if=/dev/urandom of=/etc/cluster/fence_xvm/key

wKiom1dhdtvDQGvgAACSJM7F9t8169.png

scp /etc/cluster/fence_xvm/key [email protected]:/etc/cluster/

scp /etc/cluster/fence_xvm/key [email protected]:/etc/cluster/

systemctl restart fence_virtdwKioL1dhd6fSaXBiAABMdWJqwno960.png

在網頁中新增fence裝置

wKiom1eMz6LQSo2tAABgZKmBb9g463.png-wh_50

在兩個節點中分別執行以下步驟

wKiom1eM0JXhN2D6AAAl-IcFvlg971.png-wh_50

wKioL1eM0N-SR5AwAAA6voD78zc469.png-wh_50

新增錯誤域

wKiom1eM0U7ALypjAABeNq_18fs579.png-wh_50

新增叢集資源

wKiom1eM0dbzZvM5AAAzlrwndKg124.png-wh_50

wKioL1dhfFORAYNTAACeayXbe5g122.png

注:此ip是一個浮動虛擬的ip 用於外界的訪問

新增服務組

wKiom1dhe0DiwfIQAADrW7SlX_s750.png

在服務組在新增前面新增的兩個資源

wKioL1eM0qeRKpbTAAAu3EQzO1Q412.png-wh_50

可見叢集已經自動開啟了httpd服務

測試:

在server1上:fence_nde derver1.example.com server1會斷電重新啟動 說明fence配置成功

在server1上:cluster檢視叢集的狀態wKiom1dhe82ybvvEAACKMh-Ppzs349.png

可見httpd服務在已經在server1上已經開啟

為了使效果更明顯 配置測試頁:echo server1.example.com > /var/www/html/index.html

echo derver2.example.com > /var/www/html/index.html

瀏覽器訪問虛擬ip 172.25.45.100

wKioL1dhfHCjbnJuAABOAYJt-9g228.png

在server1上:ip addr show


wKioL1dhfHLiAexJAAD-kLVu_aU499.png

可以看到浮動的ip

在server1上:clusvcadm -r apache -m server2.example.cm #把httpd服務轉移到另一節點上

wKioL1dhfPCzNFFrAADW2YLD0IA505.pngwKiom1dhfAyR_9YpAAEEgQoAI7U241.png

斷網模擬

在server1上:ifconfig eth0 down server1掛掉 此時服務會跳轉到server2 浮動ip也會跳轉到server2上 當server1重新啟動後 服務又會重新跳轉到server1上 因為server1是主節點 設定的優先順序最高 又設定了服務回切

核心崩潰模擬

在server1上:echo c > /proc/sysrp-trigger

和以上類似

儲存共享:

在server3上:先添加個虛擬硬碟

wKiom1dhfLaxDbE4AAB2bDGe-Us980.png

yum install scsi-* -y

vim /etc/tgt/targets.conf 新增以下內容:wKioL1dhff7AZYVkAABJ4HNDZTk879.png

tgt-admin -s #檢視

/etc/init.d/tgtd start #啟動服務

wKiom1dhfUTA6W9vAADq2EpNVLg399.png

在server1上:yum install iscsi-* -y

iscsiadm -m discovery -t -st -p 172.25.45.3 #與server3上的裝置關聯

iscsiadm -m node -l #登入到裝置

fdisk -l #檢視可用的分割槽

wKiom1dhfYjDEfV8AACeSHRmWvs116.png

建立邏輯卷 首先

fdick -cu /dev/sda #建立分割槽

在server2上:yum install iscsi-*

iscsiadm -m discovery -t -st -p 172.25.45.3

iscsiadm -m node -l

fdisk -l #檢視可用的分割槽

wKioL1dhf6CggmHnAACcye_x2gc722.png


從server1上同步過來

cat /proc/partitons #檢視系統分割槽

wKiom1dhfuKzr2yFAABbmGr-ReM783.png

在server1上: pvcreate /dev/sda1 #建立物理卷

pvs #檢視物理卷資訊

在server2上:pvs 檢視物理卷是否同步過來server2上

wKioL1dhgE_ge4gfAAA01qCKxEo321.png

vgcreate clustervg /dev/sda1

在server2:vgs 檢視物理卷組是否同步過來server2上

wKiom1dhf2qBz1UkAAAz6uj0dGw501.png

lvcreate -L 2G -n lv1 clustervg

同樣在server2上檢視是否同步過來

wKiom1dhgEWxLy01AABv-wql0ys535.png


mkfs.ext4 /dev/clustervg/lv1 #格式化

測試:掛載

server1和server2都掛載到/mnt/下,可以sever1在/mnt/下建立一個檔案或者目錄 server2不能看到 只有server2解除安裝後 再掛載上去 才能在/mnt/下看到建立的東西

儲存和叢集的聯絡:

在網頁上 新增叢集資源 選擇新增檔案系統

apache 關掉 刪掉scripts,新增Filesystem和Script

wKiom1dhgOijyOlJAADgjP3u2hU907.png

wKiom1dhgOiR_RBbAABV_28x13I871.png

wKioL1dhgf2yR1rnAACKzuq-UjY211.pngwKiom1dhgOrgm_ZOAACHu7xD03I721.png

先製作一個測試頁 echo www.westos.com> /var/www/html/index.html

clusvcadm -e apache #在該主機上啟動apache

訪問 172.25.19.100 效果如下

wKioL1dhgf7ABvnAAABNOmej7vo656.png


核心崩潰模擬 在server1上:echo c > /proc/sysrq-trigger

server1掛掉 服務的檔案系統自動掛載跳轉到另一節點server2上

wKioL1dxLDPRA5c-AABg0cC6IpQ050.pngwKiom1dxLECjFGU1AABZd5g8Mnk576.pngwKioL1dxLE7A-E0fAACix53KtXg052.png還可以斷網模擬 停止服務在測試 效果都和 以上差不多 不管那個節點的主機掛了 都不影響服務和磁碟的自動掛載 保證了服務的高可用性

gfs2檔案系統的儲存共享:

在網頁上:Service Groups中刪掉FilesystemScrip 叢集資源中 刪掉webdata

lvremove /dev/clustervg/vg1

lvs 檢視server2上是否還存在 不存在說明進行了同步

lvcreate -L 2G -n demo clustervg #重新建立邏輯卷

lvs 一樣看server2是否同步

mkfs.gfs2 -p lock_dlm -t hua_ha:mygfs2 -j 3 /dev/cluster/demo 注:3 為節點加1

gfs2_tool sb /dev/cluster/demo all

wKioL1dhgt3TStW5AACc9Pc-6eM657.png

測試:

server1和server2上的/dev/clustervg/demo都掛載在/mnt/下 然後在server1上 cd /mnt/ 建立一個檔案或者文集夾

在server2上執行 gfs2_tool journals /dev/clustervg/demo 進去/mnt/目錄可以看見server1建立的東西

永久掛載:

blkid #可以檢視裝置的uuid

wKiom1dhgrnDl-yyAAD5x8Z7IE4698.png

umount /mnt/

在server1和server2上都掛載在/var/www/html下

vim /etc/fstab

UUID="d287c031-bb4a-013a-3d29-ddd651a4b168" /var/www/html gfs2 _netdev 0 0

df #檢視掛載資訊

wKiom1dhguPBNKnlAADhSr-FTco615.png在網頁上:增加資源-GFS2,在Service groups新增GFS2和Script

wKioL1dhhCzhCtvpAADGqAs462I904.pngwKiom1dhgxjwHYMxAABWwWUzpYs732.pngwKioL1dhhC2AMa9QAAB30hq0nOY999.png

wKioL1dhhC3y6CxwAACIgPb9xQU416.pngclusvcadm -e apache

測試頁:echo www.westos.com /var/www/html/index.htl

瀏覽器訪問 網頁顯示 www.westos.com 斷網模擬和核心崩潰測試的原理上面類似 就不再一一測試了

增加日誌:

jfs2_jadd -j 2 /dev/clustervg/demo

wKiom1dhg3LAfAtjAAD2mqrlIbs021.png

lvextend -L +511M /dev/clustervg/demo

gfs2_grow/dev/clustervg/demo

wKioL1dhhKTQZDqxAACO4Csj5oE664.pngwKiom1dhg8bQfXSqAAAy36VR6Lo755.png

wKioL1dhhNuiW8ALAABt5bs3Z2A159.png

wKiom1dhg8ijPz7CAABRi9FdqYI148.png總結實驗過程真的一步步聯絡都非常的緊密,一個環節出錯後面的實驗都搞不了,首先我們在實驗之前就要把實驗的環境搞好。尤其要注意防火牆,一定要關閉,否則叢集建立不了,要注意三臺虛擬機器時間一定要同步,否則會導致資訊的不同步,在實驗中出錯過幾次,叢集老師建立不了,仔細檢查後是在真機中沒有設定解析,網路不互通,連叢集建立的網頁都打不開,還有就是建立了集群后,新增服務組時,apache服務組時disabled,新增的兩個資源都沒生效,很是納悶,最好發現一臺ricci主機沒有設定子網掩碼。發現後問題成功的解決了,有的實驗真的不是一次就能成功的,出現各種錯都要花時間去排錯。總之實驗不容易,實驗過程中要細心,一步錯步步錯,但也不要怕出錯,覺得出現錯誤,排錯更能讓你的水平提升一個層次。

轉載於:https://blog.51cto.com/hgh1882928/1827561