heartbeat 高可用工具

1、Heartbeat介绍
Heartbeat是Linux-HA工程的一个组成部分,它实现了一个高可用集群系统。Heartbeat最核心的部分包括两个:心跳监测和资源接管,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需要启动资源接管模块来接管运行在对方主机上的资源或者服务。

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!


你可能感兴趣的:(heartbeat 高可用工具)