使用heartbeat實現mysql高可用集羣

使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章