HeartBeat管理集群5.24上午
(文档heartbeat.pdf)
它不会管理服务是否正常
没有fence(强制重新启动,例如内核崩溃)
heartbeat作用:
通过它可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在实际生产应用场景中,heartbeat的功能和另一个高可用开源软件keepalived很多相同之处。
网址:http://linux-ha.org/wiki/Main_Page
heartbeat工作原理
通过修改heartbeat软件的配置软件,可以指定那一台heartbeat服务器作为主服务器(有VIP和服务资源),则另一台将自动成为热备服务器。然后再热备服务器上配置heartbeat守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内为监听到来自主服务器的心跳,就会自动启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。
以上描述的是heartbeat主备的模式,heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失败或者宕机了,这是每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好地实现一台主机故障后,企业业务能够不间断的持续工作。但是接管转移时还是需要时间5-20s
heartbeat和keepalived服务一样,heartbeat高可用是服务器级别的,不是服务级别。
切换常见条件:
1)服务器宕机
2)heartbeat服务本身故障
3)心跳连接故障
服务故障不会导致切换,可以通过服务宕机把heartbeat服务停掉。
heartbeat 脑裂
由于两台高可用服务器对之间在指定时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称作裂脑,也有人称其为分区集群或大脑垂直分隔,英文为splitbrain.
当前环境rhel6.5
相关安装包
heartbeat-3.0.4-2.el6.x86_64.rpm
heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
在server35.example.com机子上:
1. yum localinstall heartbeat*
2. cd /etc/ha.d
cat README.config
3. cd /usr/share/doc/heartbeat-3.0.4
cp ha.cf haresources authkeys /etc/ha.d/
ha.cf(心跳主配置文件)
vimha.cf
debugfile/var/log/ha-debug
调试日志文件文件,取默认值
logfile/var/log/ha-log
系统运行日志文件,取默认值
logfacilitylocal0
日志等级,取默认值
keepalive2
心跳频率,自己设定1:表示1秒;200ms:表示200毫秒
deadtime30
节点死亡时间阀值,就是从节点在过了30后还没有收到心跳就认为主节点死亡,自己设定
warntime10
发出警告时间,自己设定
initdead60
守护进程首次启动后应该等待60秒后再启动主服务器上的资源
udpport694
(不能别人冲突,最好更改)
心跳信息传递的udp端口,使用端口694进行bcast和ucast通信,取默认值
#baud19200
串口波特率,与serial一起使用。
#serial/dev/ttyS0
采用串口来传递心跳信息。
bcasteth1
采用udp广播播来通知心跳
#ucasteth1 10.0.0.3
采用网卡eth1的udp单播来通知心跳,eth1的IP
#mcasteth0 225.0.0.1 694 1 0
采用udp多播播来通知心跳
auto_failbackon
当主节点恢复后,是否自动切回
#stonithbaytech /etc/ha.d/conf/stonith.baytech
stonith用来保证共享存储环境中的数据完整性
watchdog /dev/watchdog
(watchdog能让系统在出现故障1分钟后重启该机器,这个功能可以帮助服务器在确实停止心
跳后能够重新恢复心跳。如果使用该特性,系统需执行modprobesoftdog,要让系统启动的时候,在内核中装入"softdog"内核模块,vim/etc/rc.local加入modprobesoftdog)
nodeserver35.example.com
主节点名称,与uname–n保持一致。排在第一的默认为主节点,所以不要搞措顺序
nodeserver71.example.com
副节点名称,与uname–n保持一致
ping192.168.2.251 (最好写成网关IP)
respawnhacluster /usr/lib64/heartbeat/ipfail
apiauthipfail gid=haclient uid=hacluster
默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
所以当网络中断时,并不会进行LoadBalancer和Backup之间的切换。
可以通过ipfail插件,设置'pingnodes'来解决这一问题,但不能使用一个集群节点作为ping的节点。
资源文件(/etc/ha.d/haresources):
vimharesources
station3.example.com Ipaddr::192.168.2.111/24/eth0:0 httpd
这个文件中定义了实现集群所需的各个软件的启动脚本,这些脚本必须放在/etc/init.d或者
/etc/ha.d/resource.d目录里IPaddr的作用是启动VirutalIP,它是HeartBeart自带的一个脚本;ldirectord的作用是启动ldirectord监控程序,它会使ldirectord.cf中定义的lvs生效,并监听其健康状;httpd是apache服务的启动脚本。
认证文件(/etc/ha.d/authkeys)
文件的权限必须是600:
auth1 (选的是1,明文)
1crc
#2sha1 HI!
#3md5 Hello!
chmod 600 /etc/ha.d/authkeys
yuminstall httpd -y
scp ha.cf haresources authkeys 192.168.2.171:/etc/ha.d/
在另一台机子上:server71.example.com
-
yumlocalinstall heartbeat*
-
yumintsall httpd -y
两台机子都开启服务
/etc/init.d/heartbeat start
看日志文件:
tail-f /var/log/message
网页访问:
192.168.2.111
它自动会开启httpd,自己不会开启
分别查看日志,是否有报错,服务正常的话server35上多了个eth0:0接口,若没有出现,请等待一会,再使用ifconfig查看,若还是没有eth0:0接口出现,检查配置文件是否正确!
若停止server35上的heartbeat服务,则server171会接管,并产生一个eth0:0接口!
下午