一、Heartbeat介紹
官方站點:http://linux-ha.org/wiki/Main_Page
Heartbeat可以資源(VIP地址及程序服務)從一臺有故障的服務器快速的轉移到另一臺正常的服務器提供服務,heartbeat和keepalived相似,heartbeat可以實現failover功能,但不能實現對後端的健康檢查。
二、簡要規劃
系統環境 | |
系統 | OEL6.6 |
系統位數 | x86_64 |
內核版本 | 3.8.13-44.1.1.el6uek.x86_64 |
軟件環境 | |
Heartbeat | Heartbeat 3.0.6 Cluster Glue 1.0.12 Resource Agents 3.9.6 |
Heartbeat下載地址 | http://linux-ha.org/wiki/Download |
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz | |
系統規劃 | |
主機名 | IP |
db-1-1 | 192.168.192.21 管理IP 10.0.100.21 心跳IP 192.168.192.100 VIP |
db-1-2 | 192.168.192.22 管理IP 10.0.100.22 心跳IP 192.168.192.100 VIP |
基本配置 | |
# cat << EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.192.21 db-1-1 10.0.100.21 priv-1-1 192.168.192.22 db-1-2 10.0.100.22 priv-1-2 192.168.192.100 vip EOF --配置服務器間主機路由 |
三、編譯安裝
--依賴包安裝(提前檢查好):
yum -y install autoconf automake gcc-c++ asciidoc libxslt-devel libtool libtool-ltdl-devel libxml2 libxml2-devel bzip2-devel glib2-devel mercurial *openssl* net-snmp OpenIPMI flex bison e2fsprogs-devel
--源碼編譯安裝:
下載地址:http://linux-ha.org/wiki/Download
--Heartbeat 3.0.6: # wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 --Cluster Glue 1.0.12: # wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2 --Resource Agents 3.9.6: # wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
--用戶組及用戶配置
# groupadd haclient # useradd -g haclient hacluster
編譯Cluster Glue
# tar -jxvf cluster-clue-1.0.12.tar.bz2 # cd Reusable-Cluster-Components-glue--0a7add1d9996/ # ./autogen.sh # 注:32位系統 LIBS='/lib/libuuid.so.1' # ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' # make && make install
--卸載
# make uninstall && make clean
編譯Resource Agents
# tar -zxvf resource-agents-3.9.6.tar.gz # cd resource-agents-3.9.6 # ./autogen.sh # ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' # make && make install
--卸載
# make uninstall && make clean
編譯Heartbeat
# tar -jxvf heartbeat-3.0.6.tar.bz2 # cd Heartbeat-3-0-958e11be8686/ # ./bootstrap # export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib" # ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' # make && make install
--卸載
# make uninstall && make clean
--heartbeat路徑檢查
# whereis heartbeat heartbeat: /usr/lib64/heartbeat /usr/include/heartbeat /usr/libexec/heartbeat /usr/share/heartbeat /usr/share/man/man8/heartbeat.8
四、Heartbeat配置
# cp doc/{ha.cf,haresources,authkeys} /etc/ha.d/
# chmod 600 /etc/ha.d/authkeys
Heartbeat的配置主要涉 ha.cf、haresources、authkeys 三個文件:
ha.cf:主配置文件;
haresource:用來配置要讓Heartbeat託管的服務;
authkey:用來指定Heartbeat的認證方式。
主備節點兩端的三個配置文件(ha.cf authkeys haresources)完全相同
1)、配置ha.cf文件
# cp /etc/ha.d/ha.cf /etc/ha.d/ha.cf.bak
# > /etc/ha.d/ha.cf
# vi /etc/ha.d/ha.cf
#log configure #用於記錄heartbeat的調試信息 debugfile /var/log/ha-debug #用於記錄heartbeat的日誌信息 logfile /var/log/ha-log #設置heartbeat的日誌,這裏用的是系統日誌 logfacility local1 #options configure #設定心跳(監測)時間時間爲2秒 keepalive 2 #指定若備用節點在30秒內未收到主節點心跳信號,則接管主服務器資源 deadtime 30 #指定心跳延遲告警時間爲10秒(最好在2~10秒之間),,10秒內備節點不能接收主節點心跳信號,即往日誌寫入警告日誌,但不會切換服務 warntime 10 #系統啓動或重啓後預留的忽略時間段,取值至少爲deadtime的兩倍 initdead 120 ########################## #廣播/單播通訊使用的Udp端口 #udpport694 #使用網卡eth1發送心跳檢測(Linux) #bcast eth1 #採用網卡eth1的udp單播來組織心跳,後面跟的IP地址爲雙機對方IP地址 #ucast eth1 10.0.100.22 ########################## #bcasteth1 #採用網卡eth1的Udp多播來組織心跳,一般在備用節點不止一臺時使用。Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的的方式,任選其一 mcast eth1 225.0.0.100 694 1 0 #node configure #定義當主節點恢復後,是否將服務自動切回(DB建議爲off,測試階段設置爲on) auto_failback on #可選配置,通過Heartbeat監控系統運行狀態 #watchdog /dev/watchdo #主節點名稱(主節點主機名),與uname -n顯示一致 node db-1-1 #備用節點名稱 node db-1-2 crm no #通過ping網關檢測心跳是否正常,僅用來測試網絡 #ping 10.0.100.1 #指定和heartbeat一起啓動、關閉的進程,可選 #respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail #設置啓動IPfail的用戶和組 #apiauth ipfail gid=haclient uid=hacluster
注:
① watchdog /dev/watchdog: 可選配置,通過Heartbeat監控系統運行狀態。該特性需在內核中載入"softdog"內核模塊,用來生成實際的設備文件,如系統中沒有該模塊,需進行指定,重新編譯內核。編譯完成輸入 "insmod softdog"加載模塊,然後輸入"grep misc/proc/devices",輸入"cat /proc/misc |grep watchdog",最後生成設備文件:"mknod /dev/watchdog c 10 130" 即可使用
② espawn hacluster /usr/lib/heartbeat/ipfail: 可選配置,指定和heartbeat一起啓動、關閉的進程。這些進程一般是和heartbeat集成的插件,遇到故障可自動重啓。IPfail進程用於檢測和處理網絡故障,需配合ping語句指定ping node檢測網絡連通性;hacluster表示啓動IPfail進程的用戶。
2)、配置authkeys,心跳密鑰驗證文件
# cp /etc/ha.d/authkeys /etc/ha.d/authkeys.bak
# > /etc/ha.d/authkeys
# vi /etc/ha.d/authkeys
#注:auth後填序號,可任意填寫 auth 1 #開頭必須爲序號名,然後爲驗證方式,支持三種( crc md5 sha1 )方式驗證,最後面是自定義密鑰 1 sha1 ccb6d8d12a7c207d7somb6618556d62e4831dfab
3)、配置haresources
# cp /etc/ha.d/haresources /etc/ha.d/haresources.bak
# > /etc/ha.d/haresources
# vi /etc/ha.d/haresources
#db-1-1 #預定的主機節點名稱,與相應主機$uname -n的結果一致。需保證drbd.conf和ha.cf中節點的名字一致。備機此處寫db-1-2。 #IPaddr::192.168.192.100/24/eth0 #規劃的VIP。 db-1-1 IPaddr::192.168.192.100/24/eth0 ###################### ##@說明信息: ##@drbddisk::dbdata_r0<==啓動drbd data資源,相當於執行/etc/ha.d/resource.d/drbddisk dbdata_r0 stop/start操作 ##@Filesystem::/dev/drbd1::/dbdata::ext4 <==drbd分區掛載到/dbdata目錄,相當於執行/etc/ha.d/resource.d/Filesystem /dev/drbd1 /dbdata ext4 stop/start<==設定需要掛載的drbd設備採用的文件系統,相當於系統中執行mount /dev/drbd1 /dbdata ##@mysql <==啓動mysql服務腳本,相當於/etc/init.d/mysql stop/start ###################### #db-1-1 IPaddr::192.168.192.100/24/eth0 drbddisk::dbdata_r0 Filesystem::/dev/drbd1::/dbdata::ext4 mysql
注:
Haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址及啓動服務集羣資源,文件每一行可包含一個或多個資源腳本名,資源間使用空格隔開,參數間使用兩個冒號隔開,主節點和備份節點中資源文件haresources要完全一樣。
一般格式爲: node-name network <resource-group>
node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致。network用於設定集羣的IP地址、子網掩碼和網絡設備標識等。resource-group用於指定需Heartbeat託管的服務(即這些服務可由Heartbeat來啓動和關閉)。
這裏指定的IP地址就是集羣對外服務的IP地址,如要託管這些服務,必須將服務寫成可通過start/stop來啓動或關閉的腳本,放到/etc/init.d/或/etc/ha.d/resource.d/目錄下,Heartbeat會根據腳本名稱自動去/etc/init.d或者/etc/ha.d/resource.d目錄下找到相應腳本進行啓動或關閉操作。
4)、同步兩個節點的配置文件
# scp /etc/ha.d/{ha.cf,haresources,authkeys} db-1-2:/etc/ha.d/ ha.cf 100% 1385 1.4KB/s 00:00 haresources 100% 781 0.8KB/s 00:00 authkeys 100% 77 0.1KB/s 00:00
5)、啓動heartbeat
#chkconfig --add heartbeat #關閉開機自啓動,當服務器重啓時,需要人工去啓動 #chkconfig heartbeat off #chkconfig heartbeat --list #兩個節點都啓動 #service heartbeat start
五、VIP切換測試
① 啓動heartbeat查看當前狀態
[root@db-1-1 /etc/ha.d] #ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:10:a7:fe brd ff:ff:ff:ff:ff:ff inet 10.0.100.21/24 brd 10.0.100.255 scope global eth1 inet6 fe80::20c:29ff:fe10:a7fe/64 scope link valid_lft forever preferred_lft forever 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:10:a7:08 brd ff:ff:ff:ff:ff:ff inet 192.168.192.21/24 brd 192.168.192.255 scope global eth0 inet 192.168.192.100/24 brd 192.168.192.255 scope global secondary eth0:0 inet6 fe80::20c:29ff:fe10:a708/64 scope link valid_lft forever preferred_lft forever [root@db-1-2 /etc/ha.d] #ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:47:ae:ec brd ff:ff:ff:ff:ff:ff inet 192.168.192.22/24 brd 192.168.192.255 scope global eth0 inet6 fe80::20c:29ff:fe47:aeec/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:47:ae:f6 brd ff:ff:ff:ff:ff:ff inet 10.0.100.22/24 brd 10.0.100.255 scope global eth1 inet6 fe80::20c:29ff:fe47:aef6/64 scope link valid_lft forever preferred_lft forever
上面的結果可以看到db-1-1節點擁有vip地址:192.168.192.100,db-1-2節點沒有
② 模擬主節點宕機後的狀態
[root@db-1-1 /etc/ha.d] #service heartbeat stop Stopping High-Availability services: [ OK ] [root@db-1-1 /etc/ha.d] #ip addr|grep eth0 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.192.21/24 brd 192.168.192.255 scope global eth0 [root@db-1-2 /etc/ha.d] #ip addr|grep eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.192.22/24 brd 192.168.192.255 scope global eth0 inet 192.168.192.100/24 brd 192.168.192.255 scope global secondary eth0:0
上面的結果可以看到db-1-1宕機後,vip地址漂移到db-1-2節點上,db-1-2成爲了主節點
③ 模擬主節點故障恢復後的狀態
[root@db-1-1 /etc/ha.d] #service heartbeat start Starting High-Availability services: INFO: Resource is stopped [ OK ] [root@db-1-1 /etc/ha.d] #ip addr|grep eth0 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.192.21/24 brd 192.168.192.255 scope global eth0 inet 192.168.192.100/24 brd 192.168.192.255 scope global secondary eth0:0 [root@db-1-2 /etc/ha.d] #ip addr|grep eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.192.22/24 brd 192.168.192.255 scope global eth0
上面的結果可以看到vip又漂移回節點db-1-1,db-1-1成爲了主節點。