HeartBeat用于搭建雙機熱備環(huán)境,可以通過專門的心跳線來連接雙機,也可以通過普通的網(wǎng)線來連接。
官方網(wǎng)站:http://www.linux-ha.org
當然在linux 下面除了heartbeat還有很多,比如redhat的cluster軟件等等。下面將簡單介紹heartbeat的安裝和配置。
2.安裝
2.1. 準備
本試驗環(huán)境共有2個主機,其IP分別為:
主機名 IP地址
alssme_probe3 172.18.158.23
alssme_probe4 172.18.158.24
如果/etc/hosts中沒有配置的話, 則需要先配置/etc/hosts文件
2.2 創(chuàng)建用戶和用戶組
heartbeat需要haclient用戶組和hacluster用戶。
兩個節(jié)點做同樣的操作,并保證haclient和hacluster的ID一樣。
[root@alsme_probe3 log]# groupadd haclient
[root@alsme_probe3 log]# useradd -g haclient hacluster
2.3. 安裝
可以直接下載rpm包,或者自己下載源碼包進行編譯,在這里,我采用自己編譯源碼的方式。安裝heartbeat前,需要先安裝libnet包。
[root@alsme_probe3 tmp]# tar zxvf heartbeat-2.1.3.tar.gz
[root@alsme_probe3 tmp]# rpm -ivh libnet-1.1.2.1-2.2.el4.rf.x86_64.rpm
[root@alsme_probe3 tmp]# cd heartbeat-2.1.3
[root@alsme_probe3 tmp]#./configure
[root@alsme_probe3 tmp]# make
[root@alsme_probe3 tmp]# make install
同樣地,在另一個主機上也是這么安裝。
libnet包可以在http://rpmfind.net/linux/rpm2html/search.php這里搜索到。
3. 配置
heartbeat有三個配置文件:
ha.cf
authkyes
haresources
這些文件在每臺機器都要保持一致.下面將一一介紹.
cp /usr/local/share/doc/heartbeat-2.1.3/ha.cf /usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/haresources /usr/local/etc/ha.d
cp /usr/local/share/doc/heartbeat-2.1.3/authkeys /usr/local/etc/ha.d
3.1 編輯hertbeat主配置文件ha.cf,2個主機上的內(nèi)容一樣。
以下是需要打開的配置,ha.cf里面有詳細說明。
[root@alsme_probe3 tmp]# vi /usr/local/etc/ha.d/ha.cf
## ha的日志文件記錄位置。如沒有該目錄,則需要手動添加
logfile /var/log/ha-log #File to write other messages to
logfacility local0 #這個是設置heartbeat的日志,這里是用的系統(tǒng)日志
##設定心跳(監(jiān)測)時間時間為2秒
keepalive 2 #多長時間檢測一次
warntime 5 #連續(xù)多長時間聯(lián)系不上后開始警告提示
deadtime 20 #連續(xù)多長時間聯(lián)系不上后認為對方掛掉了(單位是妙)
initdead 120 #這里主要是給重啟后預留的一段忽略時間段(比如:重啟后啟動網(wǎng)絡等,如果在網(wǎng)絡還沒有通,keepalive檢測肯定通不過,但這時候并不能切換)
#采用bond0的udp廣播用來發(fā)送心跳信息
#bcast bond0
#采用網(wǎng)卡bond0的udp單播來通知心跳,ip應為對方IP,建議采用單播。當一個網(wǎng)段有多臺這樣cluster話,則一定要采用單播,否則每組cluster都會看到對方的節(jié)點,從而報錯。
ucast bond0 172.18.57.154
##使用udp端口694 進行心跳監(jiān)測
udpport 694
auto_failback off #恢復正常后是否需要再自動切換回來,一般都設為off。
##節(jié)點1,必須要與 uname -n 指令得到的結(jié)果一致。
node alsme_probe3
##節(jié)點2
node alssme_probe4
##通過ping 網(wǎng)關來監(jiān)測心跳是否正常
ping 172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一起啟動、關閉的進程#respawn hacluster /usr/local/lib64/heartbeat/ipfail#apiauth ipfail gid=haclient uid=hacluster
#是否采用v2 style模式,在三節(jié)點以上時一定要打開
#crm on
從heartbeat的官方文檔來看,目前的ping節(jié)點還沒什么實際用途,只是用于檢測節(jié)點的連通性,并不作為節(jié)點切換的真正依據(jù)。在將來的新版本中也許會這么做。
3.2 編輯雙機互聯(lián)驗證文件:authkeys
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys
auth 1
1 crc
[root@alsme_probe3 heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys
注意authkeys的權(quán)限一定要是600.
3.3 編輯集群資源文件:haresources
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql
如何配置,可以參見haresources,里面也有詳細的說明。
有幾個注意事項:
1).資源組的第一列是我們在ha.cf配置文件中的node之一,而且應該是當前準備作為primary節(jié)點的那一個node。
2).每一行代表一個資源組,如果一行寫不下可以用" "換行
3).資源組啟動順序是從左往右,關閉的順序是從右往左
4).腳本的參數(shù)通過::來分隔和傳遞
5).一個資源組里面不同資源之間以空格分隔
6).不同的資源組之間沒有必然關系
7).每個資源都是一個角本,可以是在/etc/init.d目錄下面的,也可以是/usr/local/etc/ha.d/resource.d目錄下面的角本。這些角本必須要支持xxx start;xxx stop;模式。
8).關于service IP的資源設置格式詳見haresources文件。
9).如果mysql是編譯安裝的話, 則需要修改/etc/init.d/mysql文件中的basedir和datadir兩個參數(shù)
3.4 資源角本例子---drbd
下面是drbd的資源管理角本的例子:
[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
#!/bin/sh
case "$1" in
start)
#聲明為drbd的primary節(jié)點
drbdadm primary db
#掛載文件系統(tǒng)
mount /dev/drbd0 /data
#啟動相關服務
service mysql start
;;
stop)
#上面操作的反向
service mysql stop
umount /dev/drbd0 /data
drbdadm secondary db
;;esac
exit 0
我們測試的mysql是安裝mysql時自帶的,在/etc/init.d目錄下面,它可以實現(xiàn)mysql的啟動和關閉。
如果我們采用的是heartbeat+雙master模式的話, 則不需要加上mysql資源組。
如果我們采用的是heartbeat+master/slave模式的話,則需要重新mysql角本,在start時將slave變成master。在stop時將master變成slave。
建議還是采用heartbeat+雙master模式,這樣將數(shù)據(jù)丟失降到最低。
4. 測試
測試切換不外乎以下幾種:1).手工調(diào)用heartbeat的節(jié)點切換腳本
2).拔掉網(wǎng)線,測試在primary節(jié)點的網(wǎng)絡斷開后的切換情況,通過測試,在拔掉網(wǎng)線后,當主節(jié)點發(fā)現(xiàn)無法和standby節(jié)點無法通信后,會在log中記錄warn信息,如果延續(xù)時間達到在ha.cf中設定的時長后,會開始釋放資源,standby節(jié)點發(fā)現(xiàn)無法和主節(jié)點通信一段時間(ha.cf設定)后,開始嘗試啟動資源并將自己active成primary節(jié)點。切換過程除ha.cf中設定的時長之外的時間段同樣非常短。這里容易出現(xiàn)custer腦分裂的問題。如果采用雙master的話,就不存在這個問題。
3). shutdown primary主機,測試是否能夠正常切換。4). 主節(jié)點機器掉電,是否能夠正常切換。
第一種和第三種測試方法一定要測一下。
5.管理
啟動和關閉heartbeat的方法:
/etc/init.d/hearbeat start或service heartbeat start
和
/etc/init.d/hearbeat stop或service heartbeat stop
手工切換:
[root@alsme_probe3 rc.d]# /usr/local/share/heartbeat/hb_standby
2008/07/19_20:01:21 Going standby [all].
[root@alsme_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
手工接管
[root@alsme_probe3 rc.d]# /usr/local/share/heartbeat/hb_takeover
查看heartbeat狀態(tài)
[root@alsme_probe3 rc.d]# service heartbeat status
heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...
6.其他
實際測試結(jié)果表明:如果采用myisam存儲引擎,則在primary節(jié)點當?shù)舻臅r候,總會丟失數(shù)據(jù);而采用innodb存儲引擎時,如果 primary節(jié)點本身沒有程序往本機寫數(shù)據(jù)的話,那么基本上不會發(fā)生數(shù)據(jù)丟失;而如果primary節(jié)點本身有程序在寫數(shù)據(jù),則在當機瞬間,本機上的程序可能還會寫入部分數(shù)據(jù),而如果是其他主機程序連接過來的話,基本上不會發(fā)生丟數(shù)據(jù)的情況。
建議:在drbd+hb的環(huán)境中,最好是采用innodb存儲引擎,并且設置innodb_flush_log_at_trx_commit = 1,這使得幾乎每個提交的事務都能記錄在 ib_logfile* 中,在 secondary 節(jié)點上能得到恢復,減小損失。
heartbeat有兩種模式,默認的模式只支持兩個節(jié)點。如果cluster里面有2個以上節(jié)點的話,則需要采用cib模式,即v2 style:
1).把三個節(jié)點都加到ha.cf里,然后在ha.cf里加上"crm 1"
2).然后用/usr/local/lib64/heartbeat/haresources2cib.py 把原來的/usr/local/etc/ha.d/haresources 轉(zhuǎn)換成 /usr/local/var/lib/heartbeat/crm/cib.xml.
"/usr/local/lib64/heartbeat/haresources2cib.py haresources /usr/local/var/lib/heartbeat/crm/cib.xml"
3).把haresources清空
另外如果只起一個節(jié)點的話,則service IP地址需要2分鐘才能生效。這個時間不知道是如何控制的。