Heartbeat是High-Availability Linux Project (Linux下的高可用性项目)的产物,是一套提供防止业务主机因不可避免的意外性或计划性宕机问题的高可用性软件。Heartbeat可以从Linux-HA 项目Web 站点免费获得,它提供了所有HA (高可用性)系统所需要的基本功能,如启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享IP 地址的所有者等。它通过串行线、以太网接口或同时使用两者来监测特定服务(或多个服务)的运行状况。@H_404_3@
Heartbeat实现了HA 功能中的核心功能――心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。@H_404_3@
Heartbeat采用虚拟IP地址映射技术实现主从服务器的切换对客户端透明的功能。@H_404_3@
@H_404_3@
实验环境@H_404_3@
centos6.5_x64@H_404_3@
@H_404_25@master eth0 192.168.1.128
@H_404_3@
eth1 192.168.1.129@H_404_3@
slave eth0 192.168.1.130@H_404_3@
eth1 192.168.1.131@H_404_3@
vip 192.168.1.200@H_404_3@
@H_404_3@
实验软件@H_404_3@
epel-release-6-8.noarch.rpm@H_404_3@
heartbeat.x86_64@H_404_3@
@H_404_3@
软件安装@H_404_3@
rpm -ivh epel-release-6-8.noarch.rpm@H_404_3@
yum install -y libnet heartbeat* Nginx* glib*@H_404_3@
@H_404_3@
vim /etc/hosts@H_404_3@
centos6 192.168.1.128 添加两行配置 master/slave相同操作 uname -n名字@H_404_3@
centos6-1 192.168.1.130@H_404_3@
@H_404_3@
less /etc/hosts@H_404_3@
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4@H_404_3@
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6@H_404_3@
centos6 192.168.1.128@H_404_3@
@H_404_3@
ssh-keygen -t rsa master/slave相同操作@H_404_3@
@H_404_3@
Generating public/private rsa key pair.@H_404_3@
Enter file in which to save the key (/root/.ssh/id_rsa):@H_404_3@
Enter passphrase (empty for no passphrase):@H_404_3@
Enter same passphrase again:@H_404_3@
Your identification has been saved in /root/.ssh/id_rsa.@H_404_3@
Your public key has been saved in /root/.ssh/id_rsa.pub.@H_404_3@
@H_404_3@
scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/authorized_keys@H_404_3@
scp /root/.ssh/id_rsa.pub root@192.168.1.130:/root/.ssh/authorized_keys ssh信任@H_404_3@
@H_404_3@
@H_404_3@
scp /root/aa.txt root@192.168.1.128:/root/@H_404_3@
aa.txt 100% 0 0.0KB/s 00:00@H_404_3@
scp /root/bb.txt root@192.168.1.130:/root/@H_404_3@
bb.txt 100% 0 0.0KB/s 00:00@H_404_3@
如果使用scp命令没有提示输入密码表示ssh信任成功@H_404_3@
@H_404_3@
chkconfig --level 35 Nginx on@H_404_3@
@H_404_3@
cd /usr/share/doc/heartbeat-3.0.4/ master/slave相同操作@H_404_3@
cp authkeys ha.cf haresources /etc/ha.d/@H_404_3@
@H_404_3@
vim /etc/ha.d/authkeys@H_404_3@
#auth 1@H_404_3@
#1 crc@H_404_3@
#2 sha1 HI!@H_404_3@
#3 md5 Hello! 找到@H_404_3@
@H_404_3@
#auth 1@H_404_3@
auth 3@H_404_3@
#1 crc@H_404_3@
#2 sha1 HI!@H_404_3@
3 md5 Hello! 改为 第一种是CRC循环冗余校验,第二种是SHA1哈希算法,第三种是MD3哈希算法@H_404_3@
chmod 600 /etc/ha.d/authkeys@H_404_3@
@H_404_3@
vim /etc/ha.d/haresources@H_404_3@
centos6 192.168.1.200/24/eth0:0 Nginx master端配置@H_404_3@
centos6-1 192.168.1.200/24/eth0:0 Nginx slave端配置@H_404_3@
设定虚拟IP和对应的接口,并且指定启动虚拟IP时启动Nginx服务@H_404_3@
@H_404_3@
vim /etc/ha.d/ha.cf@H_404_3@
#debugfile /var/log/ha-debug 找到@H_404_3@
debugfile /var/log/ha-debug 改为@H_404_3@
touch /var/log/ha-debug@H_404_3@
@H_404_3@
#logfile /var/log/ha-log 找到@H_404_3@
logfile /var/log/ha-log 改为 日志文件位置@H_404_3@
touch /var/log/ha-log@H_404_3@
@H_404_3@
logfacility local0@H_404_3@
@H_404_3@
#keepalive 2 找到 检查时间间隔@H_404_3@
keepalive 2 改为@H_404_3@
@H_404_3@
#deadtime 30 找到 设定死亡时间@H_404_3@
deadtime 30 改为 @H_404_3@
@H_404_3@
#warntime 10 找到 设定告警时间 @H_404_3@
warntime 10 改为@H_404_3@
@H_404_3@
#initdead 120 找到 设定初始化时间@H_404_3@
initdead 20 改为@H_404_3@
#udpport 694 找到
@H_404_3@
udpport 694 改为 udp端口号@H_404_3@
#ucast eth0 192.168.1.2 找到@H_404_3@
ucast eth1 192.168.1.131 改为 master端配置eth1为心跳线ip 192.168.1.131为slave端ip@H_404_3@
ucast eth1 192.168.1.129 改为 slave端配置 eth1为心跳线ip 192.168.1.129为master端ip@H_404_3@
@H_404_3@
auto_failback on 找到启动抢占模式(主在挂了以后重新起来后备会自动切换成备)auto_failback auto_failback on改为@H_404_3@
node centos6-1@H_404_3@
#ping 10.10.10.254 找到@H_404_3@
ping 192.168.1.101 改为@H_404_3@
#respawn hacluster /usr/lib/heartbeat/ipfail 找到
@H_404_3@
respawn hacluster /usr/lib64/heartbeat/ipfail 改为@H_404_3@
chmod 600 /etc/ha.d/ha.cf
@H_404_3@
@H_404_3@
service heartbeat start master/slave端相同操作@H_404_3@
@H_404_3@
netstat -tuplna | grep heartbeat@H_404_3@
udp 0 0 0.0.0.0:56611 0.0.0.0:* 6831/heartbeat: wri@H_404_3@
udp 0 0 0.0.0.0:694 0.0.0.0:* 6831/heartbeat: wri@H_404_3@
ps -ef | grep heartbest
@H_404_3@
root 8034 8015 0 00:27 pts/0 00:00:00 grep heartbest@H_404_3@
@H_404_3@
tail -f /var/log/ha-log@H_404_3@
ip-request-resp(default)[12892]: 2017/10/25_01:25:59 received ip-request-resp 192.168.1.200/24/eth0:0 OK yes@H_404_3@
ResourceManager(default)[12915]: 2017/10/25_01:26:00 info: Acquiring resource group: centos6 192.168.1.200/24/eth0:0 Nginx@H_404_3@
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_192.168.1.200)[12943]: 2017/10/25_01:26:00 INFO: Resource is stopped@H_404_3@
ResourceManager(default)[12915]: 2017/10/25_01:26:00 info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0:0 start@H_404_3@
IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: Adding inet address 192.168.1.200/24 with broadcast address 192.168.1.255 to device eth0 (with label eth0:0)@H_404_3@
IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: Bringing device eth0 up@H_404_3@
IPaddr(IPaddr_192.168.1.200)[13076]: 2017/10/25_01:26:00 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-192.168.1.200 eth0 192.168.1.200 auto not_used not_used@H_404_3@
@H_404_3@
ip addr@H_404_3@
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN@H_404_3@
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00@H_404_3@
inet 127.0.0.1/8 scope host lo@H_404_3@
inet6 ::1/128 scope host@H_404_3@
valid_lft forever preferred_lft forever@H_404_3@
2: eth1: <BROADCAST,MULTICAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000@H_404_3@
link/ether 00:0c:29:45:17:73 brd ff:ff:ff:ff:ff:ff@H_404_3@
inet 192.168.1.129/24 brd 192.168.1.255 scope global eth1@H_404_3@
inet6 fe80::20c:29ff:fe45:1773/64 scope link@H_404_3@
valid_lft forever preferred_lft forever@H_404_3@
3: eth0: <BROADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000@H_404_3@
link/ether 00:0c:29:45:17:69 brd ff:ff:ff:ff:ff:ff@H_404_3@
inet 192.168.1.128/24 brd 192.168.1.255 scope global eth0@H_404_3@
inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0:0@H_404_3@
inet6 fe80::20c:29ff:fe45:1769/64 scope link@H_404_3@
valid_lft forever preferred_lft forever master端@H_404_3@
@H_404_3@
@H_404_3@
ip addr@H_404_3@
1: lo: <LOOPBACK,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN@H_404_3@
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00@H_404_3@
inet 127.0.0.1/8 scope host lo@H_404_3@
inet6 ::1/128 scope host@H_404_3@
valid_lft forever preferred_lft forever@H_404_3@
2: eth0: <BROADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000@H_404_3@
link/ether 00:0c:29:3d:5b:1b brd ff:ff:ff:ff:ff:ff@H_404_3@
inet 192.168.1.130/24 brd 192.168.1.255 scope global eth0@H_404_3@
inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary eth0:0@H_404_3@
inet6 fe80::20c:29ff:fe3d:5b1b/64 scope link@H_404_3@
valid_lft forever preferred_lft forever@H_404_3@
3: eth1: <BROADCAST,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000@H_404_3@
link/ether 00:0c:29:3d:5b:25 brd ff:ff:ff:ff:ff:ff@H_404_3@
inet 192.168.1.131/24 brd 192.168.1.255 scope global eth1@H_404_3@
inet6 fe80::20c:29ff:fe3d:5b25/64 scope link@H_404_3@
valid_lft forever preferred_lft forever slave端@H_404_3@
看到eth0:0 说明配置成功
@H_404_3@
@H_404_3@
echo Nginx_master > /usr/share/Nginx/html/index.html master端@H_404_3@
echo Nginx_slave > /usr/share/Nginx/html/index.html slave端@H_404_3@