heartbeat可以资源(VIP地址及程序服务)从一台有故障的服务器快速的转移到另一台正常的服务器提供服务,heartbeat和keepalived相似,heartbeat可以实现failover功能,但不能实现对后端的健康检查。
2、Heartbeat安装部署 ##部署环境 data-1-1: eth0:10.10.10.8 eth1:10.10.20.8(心跳线,不要配置网关) eth0:10.10.10.18(VIP:对外访问地址) data-1-2: eth0:10.10.10.9 eth1:10.10.20.9(心跳线,不要配置网关) eth0:10.10.10.19(VIP:对外访问地址) ##准备环境(两边操作一样) 因为是虚拟机,所以首先得按照上面的规划修改IP地址、主机名。 修改IP可以使用“setup”命令,有时还可能需要删除“/etc/udev/rules.d/70-persistent-net.rules”文件来调整eth*的名字。 修改主机名字其实就是修改这个文件“/etc/sysconfig/network”。“setup”命令可以修改ip、主机名、禁用防火墙等。 ##关闭iptables [root@data-1-1 tmp]# vi /etc/selinux/config #SELINUX=enforcing #SELINUXTYPE=targeted SELINUX=disabled [root@mysql9 ~]# service iptables stop [root@mysql9 ~]# service ip6tables stop [root@mysql9 ~]# chkconfig iptables off [root@mysql9 ~]# chkconfig ip6tables off ##编辑/etc/hosts文件加入: 10.10.20.8 data-1-1 10.10.20.9 data-1-2 ##修改完后,ping检查一下! ##配置服务器间心跳连接路由(注意两台机器上面的不同之处) ##心跳连接路由规划使用eth1网卡(10.10.20.*),eth1网卡没有配网关和DNS。 [root@data-1-1 ~]# route add -host 10.10.20.9 dev eth1 [root@data-1-1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.20.9 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 10.10.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth0 0.0.0.0 10.10.10.1 0.0.0.0 UG 0 0 0 eth0 [root@data-1-2 tmp]# route add -host 10.10.20.8 dev eth1 [root@data-1-2 tmp]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.20.8 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 10.10.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth0 0.0.0.0 10.10.10.1 0.0.0.0 UG 0 0 0 eth0 ##安装heartbeat(两边操作一样) # yum -y install heartbeat* ##提示找不到包。原因是针对centos6.x的heartbeat尚未发布,解决办法可以到第三方资源为库中找,这里使用epel # wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-release-6-6.noarch.rpm # rpm -ivh epel-release-6-6.noarch.rpm # rpm -qa | grep epel epel-release-6-8.noarch ##再安装heartbeat,这一次一键成功完成安装。 # yum -y install heartbeat* ##heartbeat的安装目录为/etc/ha.d目录下,在/etc/ha.d/resource.d目录下有很多命令。 ##配置heartbeat(两边操作一样) ##节点两端的配置文件(ha.cf authkeys haresources)完全相同,此时/etc/ha.d目录下没有这三个文件,可以从/usr/share/doc/heartbeat-3.0.4目录下找到这个三个文件的模板。 ##1)、ha.cf # vim /etc/ha.d/ha.cf #log configure debugfile /var/log/ha-debug ##heartbeat的调试日志存放位置 logfile /var/log/ha-log ##heartbeat的日志存放位置 logfacility local1 ##在syslog服务中配置通过local1设备接收日志 #options configure keepalive 2 ##指定心跳间隔时间为2秒(即每2秒钟在eth1上发一次广播) deadtime 30 ##指定若设备节点在30秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源 warntime 10 ##指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志写入一个警告日志,但此时不会切换服务 initdead 120 ##指定在heartbeat首次运行后,需要等待120秒才启动主服务器的任何资源。该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍,单机启动时会遇到VIP绑定很慢,为正常现象。该值设置得长的原因。 #bcast eth1 ##指明心跳使用以太网广播方式在eth1接口上进行广播。如使用两个实际网络来传送心跳则#bcast eth0 eth1 mcast eth1 225.0.0.7 694 1 0 ##设置广播通信使用的端口,694为默认使用的端口号。 #node configure auto_failback on ##用来定义当主节点恢复以后,是否将服务自动切回。 node data-1-1 ##主节点主机名,可以通过命令“uname -n”查看。 node data-1-2 ##备用节点主机名,可以通过命令“uname -n”查看。 crm no ##是否开启cluster resource manager(集群资源管理)功能 ##2)、配置authkeys # vim /etc/ha.d/authkeys auth 1 1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04 # chmod 600 /etc/ha.d//authkeys ##authkeys文件权限必须为600 ##3)、配置haresources # vim /etc/ha.d/haresources data-1-1 IPaddr::10.10.10.18/24/eth0 data-1-2 IPaddr::10.10.10.19/24/eth0 ##data-1-1为主机名,表示初始状态会在data-1-1绑定10.10.10.18。 ##IPaddr为heartbeat配置IP的默认脚本(/etc/ha.d/resource.d/IPaddr),其后的ip等都是脚本的参数。 ##10.10.10.18/24/eth0为集群对外服务的VIP,初始启动在data-1-1上,24为子网掩码,eth0为ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口。 ##同理10.10.10.19/24/eth0为集群对外服务的VIP,初始启动在data-1-2上,24为子网掩码,eth0为ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口。 ##在data-1-1启动heartbeat [root@data-1-1 ha.d]# service heartbeat start Starting High-Availability services: INFO: Resource is stopped INFO: Resource is stopped Done. [root@data-1-1 ha.d]# service heartbeat status heartbeat OK [pid 2510 et al] is running on data-1-1 [data-1-1]... [root@data-1-1 ha.d]# ip addr | grep eth0 ##等到120秒 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.8/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.19/24 scope global eth0 inet 10.10.10.18/24 scope global secondary eth0 [root@data-1-2 ha.d]# ip addr | grep eth0 ##data-1-1节点拥有vip地址,data-1-2节点没有 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.9/24 brd 10.10.10.255 scope global eth0 ##在data-1-2启动heartbeat [root@data-1-2 ha.d]# service heartbeat start Starting High-Availability services: INFO: Resource is stopped INFO: Resource is stopped Done. [root@data-1-2 ha.d]# service heartbeat status heartbeat OK [pid 2306 et al] is running on data-1-2 [data-1-2]... [root@data-1-2 ha.d]# ip addr | grep eth0 ##VIP回到了各自的主机上 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.9/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.19/24 scope global eth0 [root@data-1-1 htdocs]# ip addr | grep eth0 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.8/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.18/24 scope global eth0 ##测试heartbeat 的 HA功能 ##首先在data-1-2上面访问web服务: [root@data-1-2 htdocs]# curl http://10.10.10.8/index.html 10.10.10.8 It works! [root@data-1-2 htdocs]# curl http://10.10.10.9/index.html 10.10.10.9 It works! [root@data-1-2 htdocs]# curl http://10.10.10.18/index.html 10.10.10.8 It works! [root@data-1-2 htdocs]# curl http://10.10.10.19/index.html 10.10.10.9 It works! ##然后在data-1-1上面停掉heartbeat,模拟服务器故障: [root@data-1-1 apache2]# service heartbeat stop Stopping High-Availability services: Done. [root@data-1-1 apache2]# ip addr | grep eth0 ##可以看见:10.10.10.18这个VIP已经没有了 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.8/24 brd 10.10.10.255 scope global eth0 [root@data-1-2 htdocs]# ip addr | grep eth0 ##10.10.10.18 VIP飘移到了data-1-2 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.9/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.19/24 scope global eth0 inet 10.10.10.18/24 scope global secondary eth0 [root@data-1-2 htdocs]# curl http://10.10.10.18/index.html ##接下来访问VIP都是访问的data-1-2的web服务 10.10.10.9 It works! [root@data-1-2 htdocs]# curl http://10.10.10.19/index.html 10.10.10.9 It works! ##最后在data-1-1上面启动heartbeat,假设data-1-1已经修复好了: [root@data-1-1 apache2]# service heartbeat start Starting High-Availability services: INFO: Resource is stopped INFO: Resource is stopped Done. [root@data-1-1 apache2]# ip addr | grep eth0 ##可以看见10.10.10.18这个VIP已经回来了。 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.8/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.18/24 scope global eth0 [root@data-1-2 htdocs]# ip addr | grep eth0 ##可以看见:10.10.10.18这个VIP已经没有在data-1-2上了 3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 inet 10.10.10.9/24 brd 10.10.10.255 scope global eth0 inet 10.10.10.19/24 scope global eth0 [root@data-1-2 htdocs]# curl http://10.10.10.18/index.html ##可以看见访问两个VIP,分别访问的是data-1-1和data-1-2上面的各自的web服务 10.10.10.8 It works! [root@data-1-2 htdocs]# curl http://10.10.10.19/index.html 10.10.10.9 It works!