使用heartbeat實現mysql高可用集羣
clients
|||
vip <----浮動IP
|
|-----------------|
MySQL1 MySQL2 <---- 這兩個節點組成了HA集羣
|---------|-------|
存儲
只有活動節點才掛載存儲,才使用讀寫存儲上的數據,備用節點不去掛載使用。
只要使用到共享存儲的HA集羣,都必須注意避免的腦裂現象,根本避免鬧裂現象的解決方法是使用電源設備。
如果沒有電源設備,可以使用“雙心跳”降低腦裂發生的機率。
node2.upl.com
eth0 1.1.1.129 virbr1
eth1 2.2.2.129 virbr2
node3.upl.com
eth0 1.1.1.130 virbr1
eth1 2.2.2.130 virbr2
存儲
eth0 2.2.2.128 virbr2
一、部署iscsi存儲端
二、MySQL節點發現、連接iscsi目標
建議:開機自動連接iscsi目標。使用udev生成設備的軟連接。
文件系統:gfs2 或者 ext3
# mkfs.ext3 /dev/iscsi/webroot/part1
如果使用gfs2:
配置存儲集羣system-config-cluster,同步配置
啓動cman服務,作用:把集羣關係建立起來。
格式化gfs2
兩個節點同時掛載,測試集羣文件系統。
三、部署mysql服務
1)只需要其中一個節點掛載存儲並且初始化數據庫目錄
2)分別測試mysql服務是否工作正常。
測試完畢之後,手工停止所有資源的使用。
停止mysqld服務,取消掛載。
四、部署heartbeat
1、ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
warntime 6
initdead 60
udpport 694
ucast eth0 1.1.1.130
ucast eth1 2.2.2.130 <----雙心跳
auto_failback on
node node2.upl.com
node node3.upl.com
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
ping 1.1.1.1 <--- 輔助網絡故障的判斷。如果某個節點接受不到對方的心跳,它會嘗試與設定ping節點通訊,如果ping不通,它會結果告訴其他節點,把ping得同的數量和其他節點對比,如果自己的數量比別人少,說明網絡故障是發生在自身,就會把資源主動讓給其他節點。
2、haresources
資源:
vip ---> 數據目錄掛載 --> mysqld服務
node2.upl.com IPaddr::1.1.1.188/24/eth0 Filesystem::/dev/iscsi/webroot/part1::/data mysqld
3、authkey
4、同步配置文件,啓動服務
別忘記修改其餘節點的心跳IP
思考:
在本實驗中設定的是ping 1.1.1.1 <---- 1.1.1.1都是節點eth0(定義生成網絡同時也是其中一個心跳網絡),如果心跳故障出現在eth1(第二心跳網絡),結果會怎麼樣?
結果:
活動節點的eth1出現故障,無法接受到心跳,也無法連接存儲,但是他是無法判斷存儲是否連接正常(由於heartbeat使用的style-1語法風格,無法支持資源的健康判斷),然後因爲在eth1所在的網絡無法接受到另外一個節點的心跳,所以他們會從eth0網絡(另外一個心跳網絡)進行ping count對比,結果對比數量一樣,所以資源會切換,故障不會切換。但問題是當前的活動節點(故障節點)已經無法連接存儲,所以他的mysql服務也就無法正常使用。
如何解決?
ping 1.1.1.1
ping 2.2.2.1