HEARBEAT介紹
Heartbeat 是可以從 Linux-HA 項目 Web 站點公開獲得的軟件包之一。它提供了所有 HA 系統所需要的基本功能,比如啓動和停止資源、監測羣集中系統的可用性、在羣集中的節點間轉移共享 IP 地址的所有者等。它通過串行線、以太網接口或者同時使用二者來監測特定服務(或多個服務)的健康狀況。當前版本支持兩節點配置,使用專門的 heartbeat“pings”來檢查服務的狀態和可用性。
LINUX heartbeat使用一個心跳協議,心跳協議意味着消息規則的在兩個或更多節點之間發送,如
果消息沒有在給定的節點間接收到,就會認爲這個節點是失效的並且運行某種失敗切換或恢復動
作,LINUX heartbeat使用標準的以太網接口來發送心跳消息。
當LINUX heartbeat被初始化設置好以後,需要選擇一個節點作爲主節點,當主節點的心跳啓動以
後,它將分配一個虛擬IP地址給主節點的網絡接口,外部的進程和應用等將按照這個方式訪問這
個節點,如果主節失效,那麼在集羣中的另一個節點將爲這個虛擬IP地址啓動一個接口並且用地址轉換保證所有訪問這個IP的請求都綁定到本機,也就是IP自動漂移到本機,這種就是IP地址
接管。
每一個虛擬IP地址都可以被看作是一個資源,它被封裝作爲程序其工作方式類似於UNIX的INIT
腳本,這意味着它能夠啓動和停止,並且它也能夠被查詢是否正在運行,用這種方式,LINUX
heartbeat能夠根據用heartbeat協議,根據節點間通信的狀態啓動或停止這些虛擬IP。
LINUX HEARTBEAT的配置
三個最關鍵的修改文件: <"/etc/ha.d/authkeys">
<"/etc/ha.d/haresources">
<"/etc/ha.d/ha.cf">
1 配置/etc/ha.d/ha.cf(只在一個節點上配即可,配好後copy到其它節點)
vi /etc/ha.d/ha.cf
按如下內容進行修改(文件中#開頭的行爲註釋行,更多的選項及選項的詳細說明請參考文件中的註釋及相關文檔)
debugfile /var/log/ha-debug #寫debug信息到這個文件中
logfile /var/log/ha-log #寫運行日誌到這個文件中
keepalive 2 #設置心跳時間爲2秒
deadtime 30 #設置離最近一次心跳多長時間沒有心跳時表明節點失敗
warntime 10 #設置離最近的一次心跳多長時間沒有心跳時發出警告
initdead120 #機器重啓動或是剛開機時,網絡能正確開始工作的時間,最小設置爲deadtime的兩倍
udpport 694 #bcast/ucast方式心跳通訊所用的UDP端口
#baud 19200 #串口的波特率,使用串口作心跳時需設置
#serial /dev/ttyS0 #串口設備名,使用串口作心跳時需設置
bcast eth0 #使用哪一個設備(網卡)做心跳
#bcast eth1 eth2 #使用多個設備(網卡)做心跳時的設置
auto_failback on #當主節點從失敗狀態恢復時是否恢復其主節點的身份,即應用是否返回到其自身運行
#on 返回
#off 不返回,其它節點繼續作爲主節點運行
#legacy 當所有節點都不支持自動返回時,將自身設爲自動返回
node gfs132 #節點的主機名或域名,需在/etc/hosts文件或
node gfs133 #所有節點都以node開始的行列出
ping 172.20.16.2 #ping節點,不屬於cluster內的節點,通常選一臺路由器或交換機作爲Ping節點,
#ipfail模塊通過此節點來驗證網絡的連通性,可指定多個Ping節點
respawn hacluster /usr/lib64/heartbeat/ipfail #由heartbeat調用並監視ipfail模塊
2 配置/etc/ha.d/haresources (只在一個節點上配即可,配好後copy到其它節點)
vi /etc/ha.d/haresources
按如下內容進行修改(文件中#開頭的行爲註釋行,更多的選項及選項的詳細說明請參考文件中的註釋及相關文檔)
gfs132 172.20.16.99 mysqld mon #設置heartbeat管理的資源或服務
#格式爲:主節點主機名或域名 浮動IP 服務名
#主節點主機名或域名爲ha.cf中node行中指定的任一節點
#浮動IP 爲對外提供訪問的IP,主節點失敗後會自動漂移到其它節點,繼續對外提供服務.
#服務名爲 heartbeat管理的服務
#注意,此文件內容所有節點必須保持一致。
3 配置/etc/ha.d/authkeys(只在一個節點上配即可,配好後copy到其它節點)
vi /etc/ha.d/authkeys
按如下內容進行修改(文件中#開頭的行爲註釋行,更多的選項及選項的詳細說明請參考文件中的註釋及相關文檔)
auth 3 #設置認證方式
#1 crc #格式爲:auth <number>
3 md5 Hello! #<number> <authmethod>
[<authkey>] 說明:
#如果是用心跳是用交叉線直接對連兩個節點,用crc方式即可,CPU佔用最少
#如果心跳位於不安全的網絡,如通過共用交換機連接節點,則選用sha1或md5
#sha1佔用CPU資源更多,但是更安全,md5安全性及CPU佔用率居中
#sha1和md5都需要提供認證KEY,即用來加密的KEY
#注意,此文件權限必須設置爲600
4 copy以上配置文件到其它節點
scp /etc/ha.d/ha.cf /etc/ha.d/haresources /etc/ha.d/authkeys [email protected]:/etc/ha.d/
5 分別設置各節點/etc/ha.d/authkeys文件權限
chmod 600 /etc/ha.d/authkeys (文件權限必須設置爲600,否則heartbeat不能正常啓動)
#至此安裝完畢
LINUX HEARTBEAT啓動和停止
1 LINUX HEARTBEAT啓動
在兩個節點分別運行service heartbeat start,如果能成功啓動因該回顯:
[root@ARCHITECT ~]# service heartbeat start
Starting High-Availability services:
[ OK ]
2 LINUX HEARTBEAT停止
在兩個節點分別運行service heartbeat stop,如果能成功停止應回顯:
[root@ARCHITECT ~]# service heartbeat stop
Stopping High-Availability services:
[ OK ]
拓撲圖:
HA-heartbeat-1:
掛載光盤:
[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom
安裝ipvsadm:
[root@node1 heartbeat-2.1.4]# yum install -y ipvsadm
寫條目:
[root@node1 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 -g
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 –g
保存
[root@node1 ~]# service ipvsadm save
[root@node1 ha.d]# service ipvsadm start
Clearing the current IPVS table: [ OK ]
Applying IPVS configuration: [ OK ]
[root@node1 ha.d]# service ipvsadm stop
Clearing the current IPVS table: [ OK ]
安裝heartbeat:
[root@localhost ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm –nogpgcheck
進入目錄:
[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
拷貝文件:
[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/
進入/etc/ha.d/目錄:
[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# ll
total 80
-rw-r--r-- 1 root root 645 Oct 10 16:12 authkeys
-rw-r--r-- 1 root root 10539 Oct 10 16:11 ha.cf
-rwxr-xr-x 1 root root 745 Jul 24 2009 harc
-rw-r--r-- 1 root root 5905 Oct 10 16:12 haresources
drwxr-xr-x 2 root root 4096 Oct 10 16:10 rc.d
-rw-r--r-- 1 root root 692 Jul 24 2009 README.config
drwxr-xr-x 2 root root 4096 Oct 10 16:16 resource.d
-rw-r--r-- 1 root root 7862 Jul 24 2009 shellfuncs
編輯修改ha.cf文件:
[root@node1 ha.d]# vim ha.cf
91 #bcast eth0 # Linux
92 #bcast eth1 eth2 # Linux
93 #bcast le0 # Solaris
94 bcast eth1 # Solaris
212 #node ken3
213 #node kathy
214 node node1.a.com
215 node node2.a.com
生成通過md5加密的隨機數:
[root@node1 ~]# dd if=/dev/random bs=512 count=1 |openssl md5
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.000127271 seconds, 1.0 MB/s
bbdf2b9865f7d1ed1a8a781369e0e7ba
[root@node1 ~]#
編輯修改authkeys文件:
[root@node1 ha.d]# vim authkeys
23 #auth 1
24 #1 crc
25 #2 sha1 HI!
26 #3 md5 Hello!
27 auth 3
28 3 md5 bbdf2b9865f7d1ed1a8a781369e0e7ba //md5加密數
[root@node1 ha.d]# chmod 600 authkeys
編輯修改haresources文件:
[root@node1 ha.d]# vim haresources
45 node1.a.com 192.168.10.100/24/eth0/192.168.10.255 ipvsadm
HA-heartbeat-2:
掛載光盤:
[root@node1 ~]# mkdir /mnt/cdrom
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom
安裝ipvsadm:
[root@node1 heartbeat-2.1.4]# yum install -y ipvsadm
寫條目:
[root@node1 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 -g
[root@node1 ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 –g
保存
[root@node1 ~]# service ipvsadm save
[root@node1 ha.d]# service ipvsadm start
Clearing the current IPVS table: [ OK ]
Applying IPVS configuration: [ OK ]
[root@node1 ha.d]# service ipvsadm stop
Clearing the current IPVS table: [ OK ]
安裝heartbeat:
[root@localhost ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm –nogpgcheck
進入目錄:
[root@node1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/
拷貝文件:
[root@node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
[root@node1 heartbeat-2.1.4]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/
進入/etc/ha.d/目錄:
[root@node1 heartbeat-2.1.4]# cd /etc/ha.d/
[root@node1 ha.d]# ll
total 80
-rw-r--r-- 1 root root 645 Oct 10 16:12 authkeys
-rw-r--r-- 1 root root 10539 Oct 10 16:11 ha.cf
-rwxr-xr-x 1 root root 745 Jul 24 2009 harc
-rw-r--r-- 1 root root 5905 Oct 10 16:12 haresources
drwxr-xr-x 2 root root 4096 Oct 10 16:10 rc.d
-rw-r--r-- 1 root root 692 Jul 24 2009 README.config
drwxr-xr-x 2 root root 4096 Oct 10 16:16 resource.d
-rw-r--r-- 1 root root 7862 Jul 24 2009 shellfuncs
編輯修改ha.cf文件:
[root@node1 ha.d]# vim ha.cf
91 #bcast eth0 # Linux
92 #bcast eth1 eth2 # Linux
93 #bcast le0 # Solaris
94 bcast eth1 # Solaris
212 #node ken3
213 #node kathy
214 node node1.a.com
215 node node2.a.com
生成通過md5加密的隨機數:
[root@node1 ~]# dd if=/dev/random bs=512 count=1 |openssl md5
0+1 records in
0+1 records out
128 bytes (128 B) copied, 0.000127271 seconds, 1.0 MB/s
bbdf2b9865f7d1ed1a8a781369e0e7ba
[root@node1 ~]#
編輯修改authkeys文件:
[root@node1 ha.d]# vim authkeys
23 #auth 1
24 #1 crc
25 #2 sha1 HI!
26 #3 md5 Hello!
27 auth 3
28 3 md5 bbdf2b9865f7d1ed1a8a781369e0e7ba //md5加密數
[root@node1 ha.d]# chmod 600 authkeys
編輯修改haresources文件:
[root@node1 ha.d]# vim haresources
45 node1.a.com 192.168.10.100/24/eth0/192.168.10.255 ipvsadm
web服務器上的配置:
web1服務器上的配置:
Ip信息:
安裝web:
[root@localhost ~]# yum install httpd //安裝web服務器
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
其內容爲:
web1(192.168.10.2)
[root@localhost html]# service httpd restart //重啓web服務
添加下列條目到/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p //使其生效
[root@localhost ~]# route add -host 192.168.10.100 dev lo:0 //保證用vip還回
web2服務器上的配置:
Ip信息:
安裝web:
[root@localhost ~]# yum install httpd //安裝web服務器
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
其內容爲:
web2(192.168.10.3)
[root@localhost html]# service httpd restart //重啓web服務
添加下列條目到/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p //使其生效
[root@localhost ~]# route add -host 192.168.10.100 dev lo:0 //保證用vip還回
測試:
用pc訪問:
刷新頁面後: