heartbeat簡介:Heartbeat 項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通信是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能。下面描述了 heartbeat 模塊的可靠消息通信機制,並對其實現原理做了一些介紹。
hartbeat原理:heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鏈路和串口進行,而且支持冗 餘鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運 行在對方主機上的資源或者服務。
實驗環境:
server1:172.25.45.1
server2:172.25.45.2
iptables off and selinux disabled
所需軟件包:heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm ldirectord-3.9.5-3.1.x86_64.rpm heartbeat-devel-3.0.4-2.el6.x86_64.rpm
所需環境:若有其它集羣,要先關閉相關進程
【server1/server2】
1 | rpm -ivh heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-devel-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm ldirectord-3.9.5-3.1.x86_64.rpm |
需要先解決依賴性如下圖:
可以直接yum install
如果是純淨的虛擬機還需要安裝以下服務
【server1/server2】
1 2 | yum install -y mysql-server yum install -y iscsi-initiator-utils |
【server3】
1 | yum install -y scsi-target-utils |
添加一個硬盤 /dev/vdb
1 | vim /etc/tgt/targets.conf |
<target iqn.2016-07.com.example:server.target1>
backing-store /dev/vdb
initiator-address 172.25.45.1
initiator-address 172.25.45.2
</target>
1 | /etc/init.d/tgtd start |
【server1/server2】
1 2 | iscsiadm -t st -m discovery -p 172.25.45.3 iscsiadm -m node -l |
增加一個分區/dev/sda1,並格式化。
【server1】
1 2 3 | cd /usr/share/doc/heartbeat-3.0.4/ cp haresources ha.cf authkeys /etc/ha.d/ cd /etc/ha.d/ |
1 | vim ha.cf |
將48行、56行、61行、71行、76行、91行、211行、212行、220行、253行、259行的註釋取消
將71行的initdead的值改爲60
將211行node後改爲server1.example.com
將212行node後改爲server2.example.com
將220行ping的IP改爲172.25.45.250
將253行的目錄改爲/usr/lib64/heartbeat/ipfail
1 | vim haresources |
在最後添上以下內容:
server1.example.com IPaddr::172.25.45.100/24/eth0 mysqld
1 | vim authkeys |
將23行、24行的註釋取消
1 2 | chmod 600 authkeys scp ha.cf haresources authkeys 172.25.45.2:/etc/ha.d/ |
1 2 | /etc/init.d/heartbeat start tail -f /var/log/message |
【server2】
1 | /etc/init.d/heartbeat start |
【server1】
1 | ip addr show |
關閉server1的heartbeat的服務,vip切到server2上,但把server1的heartbeat服務打開,vip會切回server1上
2.
【server1】
1 | vim haresources |
修改最後一行的內容爲以下:
server1.example.com IPaddr::172.25.45.100/24/eth0 Filesystem::/dev/sda1::/var/lib/mysql::ext4 mysqld
1 | scp haresources 172.25.45.2:/etc/ha.d/ |
1 | /etc/init.d/mysqld stop |
1 2 3 4 5 6 7 8 | mount /dev/sda1 /mnt cd /var/lib/mysql/ cp -rp * /mnt/ chown mysql.mysql /mnt/ umount /mnt /etc/init.d/heartbeat stop /etc/init.d/heartbeat start tail -f /var/log/message |
1 | /etc/init.d/heartbeat start ##在server2上 |
1 | ip addr show |
1 | /etc/init.d/heartbeat stop |
1 | ip addr show ##在server2上 |
將server1上的heartbeat服務再次打開,則server2上的vip和掛載都會切回server1
##drbd##
爲server1和server2都添加一個4G的虛擬硬盤
【server1/server2】
1 2 | /etc/init.d/heartbeat stop /etc/init.d/iscsi stop |
1 | fdisk -l |
所需軟件包:drbd-8.4.3.tar.gz
1 2 3 | tar zxf drbd-8.4.3.tar.gz cd drbd-8.4.3 ./configure --enable-spec --with-km |
1 | yum install -y gcc flex rpm-build ##解決依賴性 |
1 | rpmbuild -bb drbd.spec ##報錯 |
1 2 3 4 | cd cp drbd-8.4.3.tar.gz rpmbuild/SOURCES/ cd - rpmbuild -bb drbd.spec |
1 | rpmbuild -bb drbd-km.spec ##解決依賴性: yum install -y kernel-devel |
1 2 | cd /root/rpmbuild/RPMS/x86_64 ls |
1 | rpm -ivh * |
1 | scp * 172.25.45.2: |
【server2】
1 | rpm -ivh drbd-* |
【server1】
1 2 | cd /etc/drbd.d/ vim example.res |
添加以下內容:
resource sqldata {
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
on server1.example.com {
disk /dev/vdb;
address 172.25.45.1:7789;
}
on server2.example.com {
disk /dev/vdb;
address 172.25.45.2:7789;
}
}
1 | scp example.res 172.25.45.2:/etc/drbd.d/ |
【server1/server2】
1 2 | drbdadm create-md sqldata /etc/init.d/drbd start |
【server1】
1 | cat /proc/drbd |
1 2 | drbdadm primary sqldata --force cat /proc/drbd |
1 | watch cat /proc/drbd |
1 2 | mkfs.ext4 /dev/drbd1 mount /dev/drbd1 /mnt |
1 2 3 4 | cd /var/lib/mysql/ cp -rp * /mnt/ chown mysql.mysql /mnt umount /mnt |
1 2 | drbdadm secondary sqldata cat /proc/drbd |
【server2】
1 2 | drbdadm primary sqldata cat /proc/drbd |
1 2 3 | mount /dev/drbd1 /mnt cd /mnt ls |
1 2 | cd umount /mnt |
1 | drbdadm secondary sqldata |
【server1】
1 | vim /etc/ha.d/haresources |
修改內容爲以下:
server1.example.com IPaddr::172.25.45.100/24/eth0 drbddisk::sqldata Filesystem::/dev/drbd1::/var/lib/mysql::ext4 mysqld
1 | scp /etc/ha.d/haresources 172.25.45.2:/etc/ha.d/ |
1 | cat /proc/drbd ##此時ro:Secondary/Secondary |
1 2 | /etc/init.d/heartbeat start tail -f /var/log/messages |
【server2】
1 | /etc/init.d/heartbeat start |
【server1】
1 | cat /proc/drbd |
1 | /etc/init.d/heartbeat stop |
【server2】
1 | cat /proc/drbd |