heartbeat介绍:
作用:
通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在升级生产应用场景中,heartbeat的功能和另一个高可用keepalived有很多相同之处
heartbeat官方地址:http://linux-ha.org/wiki/Main_Page
工作原理:
通过修改heartbeat软件的配置文件,可以指定哪一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置Heartbeat守护进程来监听来自主服务器的心跳消息。如果热备服务器在制定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,阶梯主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的
以上描述的是主备模式,还有主主模式,即两台服务器互为主备,这是它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定时间内未收到对方发送的心跳报文,那么,乙方就会认为对方失效或者宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务
切换条件:
1)服务器宕机
2)Heartbeat服务本身故障
3)心跳连接故障
心跳连接介绍:
要部署heartbeat服务,至少需要两台主机来完成。那么,要实现高可用服务,这两台主机之间是如何做到互相通信和互相检测的呢?
1)串行电缆(首选,缺点是距离不能太远)
2)一根以太网电缆两网卡直连(推荐)
3)以太网电缆,通过交换机等网络设备连接(次选),次选,增加了交换机故障点,同时,线路不是专用心跳线,容易受其他数据传输的影响,导致心跳报文发送问题
裂脑:
由于两台高可用服务器对之间在指定时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务器在两端同时启动而放生冲突的严重问题,最严重的的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑,也有人叫做分区集群或大脑垂直分割
Heartbeat消息类型:
1)心跳消息:约150字节的数据包,可能为单播、广播或多播的方式,控制心跳频率及出现故障要等待多久进行故障转换
2)集群转换消息:ip-request和ip-reques-resp。当主服务器恢复在线状态时通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败取得的资源及服务。主服务器释放主服务器失败时取得的资源及服务后,就会通过ip-request-resp消息通知主服务器它不在
Heartbeat高可用集群实战
环境准备:
Master: OS:Centos6.5 IP: eth0:192.168.1.1 #服务器管理IP eth1:192.168.220.10 Hostname:heart-master VIP:192.168.1.249 Backup: OS:Centos6.5 IP: eth0:192.168.1.2 #服务器管理IP eth1:192.168.220.20 Hostname:heart-backup VIP:192.168.1.250 hosts: echo "192.168.220.10 heart-master" >> /etc/hosts echo "192.168.220.20 heart-backup" >> /etc/hosts #这个两个都要配置 #心跳连接 [root@heart-master /]# route add -host 192.168.220.20 dev eth1 [root@heart-backup /]# route add -host 192.168.220.10 dev eth1 #模拟心跳连接,都是从eth1出去,等于两块网卡直连,可以放到rc.local里,用于开机启动
软件安装:
#下载并安装epel包 [root@heart-master ~]# wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@heart-master ~]# rpm -ivh epel-release-6-8.noarch.rpm [root@heart-master ~]# yum -y install heartbeat* #配置文件讲解 ha.cf heartbeat参数配置文件 在这里配置heartbeat的一些基本参数 authkey heartbeat认证文件 高可用服务器对之间根据对端的authkey,对对端进行认证 haresource heartbeat资源配置文件 如配置IP资源及脚本程序等 #默认配置文件路径 [root@heart-master ~]# ls /etc/ha.d/ harc rc.d README.config resource.d shellfuncs #但现在并没有什么配置文件,所以我们要从安装点拷贝一份模板过来 [root@heart-master ~]# cd /etc/ha.d/ [root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf . [root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/authkeys . [root@heart-master ha.d]# cp /usr/share/doc/heartbeat-3.0.4/haresources .
ha.cf配置文件参数说明
# debugfile /var/log/ha-debug #heartbeat的调试日志存放位置 logfile /var/log/ha-log #heartbeat的日志存放位置 logfacility locall #在syslog服务中配置通过local1设备接收日志 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 eth2 225.0.0.1 694 10 #设置广播通信使用的端口,694位默认使用的端口号 auth_failback on #用于定义当节点恢复后,是否将服务自动切回 node heart-master #主节点主机名,可以通过命令“uname -n”查看 node heart-backup #备用节点主机名,可以通过命令“uname -n”查看,也可以使用IP crm no #是否开启Cluster Resource Manager(集群资源管理)功能 #
Authkeys文件配置
#Authentication file. Must be mode 600 #此处提到,authkey权限必须为600 #Available methods:crc sha1,md5.Crc doesn't need/wat a key #可以设置的认证方法,crc是最不安全的 #sha1 is believed to be the “best”、MD5、next best #sha1的方式是最好的,咱么用这个
haresources文件参数解读
heart-master IPaddr::192.168.1.249/24/eth0 heart-backup IPaddr::192.168.1.250/24/eth0 #heart-master为主机名,表示出事状态会在heart-master绑定Ip192.168.1.249 #IPaddr为heartbeat配置IP的默认脚本,其后的IP等都是脚本的参数 #192.168.1.249/24/eth0为集群对外服务的VIP,初始启动在heart-master上,24为子网掩码,eth0位ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口 #同理192168.1.250/24/eth0位集群对外服务的VIP,初始启动在heart-backup上,24为子网掩码,eth0为ip绑定的实际物理网卡,为heartbeat提供对外服务的通信接口 #配置实例 heart-master IPaddr:192.168.1.249/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext3 rsdata #heart-master看上面 #192.168.1.249/24/eth0看上面,(加上一句),这里相当于执行/etc/ha.d/resource.d/IPaddr 192.168.1.249/24/eth0 stop/start #drbddisk::data,启动drdb data资源。这里相当于执行/etc/ha.d/resource.d/drbddisk dataa stop/start #Filesystem::/dev/drbd0::/data::ext3,drbd分区挂载到/data目录,这里相当于执行/etc/ha.d/resoucre.d/Filesystem /dev/drbd0 /data ext3 stop/start #rsdata,启动mysl服务脚本。这里相当于执行/etc/init.d/rsdata stop/start
生成环境实例配置
#ha.cf [root@heart-master ha.d]# cat /etc/ha.d/ha.cf #the start by Daniel debugfile /var/log/ha-debug logfile /var/log/ha.log logfacility local1 keepalive 2 deadtime 30 warntime 10 initdead 60 #bcast eth1 mcast eth1 225.0.0.250 694 1 0 auto_failback on node heart-master node heart-backup crm no #the end by Daniel #authenkeys [root@heart-master ha.d]# cat /etc/ha.d/authkeys auth 1 1 sha1 47c9336850f1db6fa58bc470bc9b7810eb397f04 #haresources [root@heart-master ha.d]# cat /etc/ha.d/haresources heart-master IPaddr::192.168.1.249/24/eth0 heart-backup IPaddr::192.168.1.250/24/eth0 #这三个配置文件master和backup一样 #启动 #先启动一台 [root@heart-master ha.d]# /etc/init.d/heartbeat start Starting High-Availability services: INFO: Resource is stopped INFO: Resource is stopped Done. #查看VIP [root@heart-master ha.d]# ip addr | grep 192.168.1 inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.250/24 brd 192.168.1.255 scope global secondary eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global secondary eth0 #再启动另一台 [root@heart-backup ha.d]# /etc/init.d/heartbeat start Starting High-Availability services: INFO: Resource is stopped INFO: Resource is stopped Done. #查看两边VIP [root@heart-master ha.d]# ip addr | grep 192.168.1. inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global secondary eth0 [root@heart-backup ha.d]# ip addr | grep 192.168.1 inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.250/24 brd 192.168.1.255 scope global secondary eth0 #如果出现了两边都有249和250的时候就是发生了裂脑
heartbeat实现web服务高可用实战案例
#安装 [root@heart-master ha.d]# yum -y install httpd [root@heart-backup ha.d]# yum -y install httpd #启动 [root@heart-master ha.d]# /etc/init.d/httpd start [root@heart-backup ha.d]# /etc/init.d/httpd start # [root@heart-master ha.d]# echo 1.1 > /var/www/html/index.html [root@heart-backup ha.d]# echo 1.2 > /var/www/html/index.html #现在访问http://192.168.1.249/,显示的1.1,250显示的1.2,down调master,再次访问249,显示的1.2 #我们要实现的heartbeat控制httpd的启动,实现ip切换 #修改haresources [root@heart-master ha.d]# cat haresources heart-master IPaddr::172.16.50.249/24/eth0 httpd <控制服务的脚本名 heart-backup IPaddr::172.16.50.250/24/eth0 #master和backup一样 #配置http服务启动脚本 heartbeat控制的脚本要求(以httpd举例): 1.脚本路径要放入/etc/init.d/httpd或者/etc/ha.d/resource.d 2.脚本执行需要以/etc/init.d/httpd stop/start方式 3.脚本具备可执行权限 4./etc/init.d/httpd要和haresources的控制脚本名一样 #先关掉两边的httpd服务 #然后重启两边的heartbeat服务,会发现master的httpd已经起来了,backup的并没有,这是为什么呢?主要是因为给的heart-master上配置的httpd脚本,只有当master down机才会启动,我们可以模拟一下 [root@heart-master ha.d]# /etc/init.d/heartbeat stop #再次查看backup,发现ip已经切换过来,然后网页再次访问249