Heartbeat是Linux-HA工程的一個組件,自1999年開始到如今,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內獲得了普遍的應用。Heartbeat經過以太網交叉線後者串口電線來傳輸Heartbeat信號,來對集羣中的主機進行心跳監控。當主服務器出現故障的時候,沒法響應心跳信息,這個時候備用服務器就會把服務資源搶過去以實現服務的不間斷使用。Heartbeat除了重要的Heartbeat組件外還包括如下組件:html
Heartbeat包括如下幾個組件:node
heartbeat – 節點間通訊校驗模塊linux
CRM - 集羣資源管理模塊vim
CCM - 維護集羣成員的一致性api
LRM - 本地資源管理模塊服務器
StonithDaemon - 提供節點重啓服務網絡
logd - 非阻塞的日誌記錄app
apphbd - 提供應用程序級的看門狗計時器ide
Recovery Manager - 應用故障恢復測試
底層結構–包括插件接口、進程間通訊等
CTS – 集羣測試系統,集羣壓力測試
在HA集羣中備機接管服務的時候必定要保持數據的一致性,在Heartbeat中咱們能夠經過DRBD來實現服務器之間的數據的同步,代替共享磁盤陣,由於。在主節點寫入的數據會經過DRBD設備存儲到主節點的磁盤設備中,同時,這個數據也會自動發送到備用節點對應的DRBD設備,最終寫入備用節點的磁盤設備上,並且使用DRBD不須要太多的硬件的投資。
主機環境:rhel6 x86_64 selinux and iptables disabled
主機:server2.example.com 172.25.254.2
副機:server3.example.com 172.25.254.3
從oss.linbit.com/drbd下載所需的安裝包
解決依賴性: 在server主機上:
yum install gcc flex rpm-build kernel-devel -y tar zxf drbd-8.4.3.tar.gz cd drbd-8.4.3 ./configure --enable-spec --with-km
編譯生成 drbd rpm包:
rpmbuild -bb drbd.spec
提示須要將drbd包放入用戶家目錄的/rpmbuild/SOURCES/下 再次編譯:
rpmbuild -bb drbd.spec
編譯 drbd 內核模塊
rpmbuild -bb drbd-km.speccd
安裝生成的rpm包
cd /root/rpmbuild/RPMS/x86_64/ yum install *
將生成的rpm包複製到server3主機上安裝:
scp /root/rpmbuild/RPMS/x86_64/* 172.25.254.3:
配置: 在/etc/drbd.d/目錄下建立任意以.res結尾的配置文件
vim /etc/drbd.d/example.res
添加以下配置: resource example { meta-disk internal; device /dev/drbd1; syncer { verify-alg sha1; } on server2.example.com { disk /dev/vda; address 172.25.254.2:7789; } on server3.example.com { disk /dev/vda; address 172.25.254.3:7789; } } 初始化drbd
drbdadm create-md example
在server3主機上作上述一樣的操做
同時啓動server2和server3主機的drbd
/etc/init.d/drbd start
將server2主機強制設爲主節點並同步數據
drbdsetup /dev/drbd1 primary --force
在兩臺主機上用cat /proc/drbd命令能夠同時看到同步狀態
同步結束後格式化drbd1磁盤
mkfs.ext4 /dev/drbd1
掛載文件系統並寫入數據
mount /dev/drbd1 /var/www/html echo "hello.example.com" >/var/www/html/index.html
卸載文件系統並把兩臺主機都設爲secondary節點
umount /dev/drbd1 drbdadm secondary example
drbd配置完後接下來就是heartbeat的配置了。(在兩臺機子中作相同步驟:)
安裝軟件包:
yum install heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm heartbeat-devel-3.0.4-2.el6.x86_64.rpm ldirectord-3.9.5-3.1.x86_64.rpm -y
向/etc/ha.d/裏拷入配置文件.
cd /usr/share/doc/heartbeat-3.0.4/ cp ha.cf haresources authkeys /etc/ha.d/
更改配置文件ha.cf:
vim /etc/ha.d/ha.cf logfile /var/log/ha-log #日誌文件 keepalive 2 #心跳時間 deadtime 30 #無響應時間 warntime 10 #警告時間 initdead 60 #守護進程啓動後主機啓動資源須要等待的時間 udpport 694 #端口 cast eth0 #使用物理網卡eth0傳輸心跳消息 auto_failback on #設置當主機修復後服務是否回返到主機 node server2.example.com node server3.example.com #設置節點,主機在上副機在下 ping 172.25.254.55 #判斷主副機的網絡情況 respawn hacluster /usr/lib64/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster #指定用戶和用戶組
在/etc/ha.d/haresources文件配置要啓動的資源
server2.example.com IPaddr::172.25.254.100/24/eth0 drbddisk::example Filesystem::/dev/drbd1::/var/www/html::ext4 httpd
server2.example.com: 主節點
IPaddr::172.25.254.100/24/eth0: 虛擬IP
drbddisk::example: 啓用以前配置的drbd
Filesystem::/dev/drbd1::/var/www/html::ext4: 文件系統
httpd: 服務
配置authkeys文件
vim /etc/ha.d/authkeys
啓用明文加密的方式:
auth 1 1 crc
將authkeys文件的權限改成600
chmod 600 authkeys
測試: 經過訪問虛擬IP能夠看到以前作drbd時候所作的網頁了