heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持 冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。
高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内 部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效, 何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在Linux-HA里这个功能由一个叫做heartbeat的程序完成。
heartbeat的配置(红帽企业6.5系统)
首先安装关于heartbeat的rpm包
在这个网站 phone.net下载 在所有的集群节点上都配置
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
修改配置文件(查看主配文件下的README文件)
将配置文件从/usr/local/heartbeat-3.0.4/下拷贝到识别的主配置文件路径
cd /usr/share/doc/heartbeat-3.0.4/
cp ha.cf haresources authkeys /etc/ha.d/
cd /etc/ha.d/
ls
vim ha.cf 修改主配文件
debugfile /var/log/ha-debug
调试日志文件文件,取默认值
logfile /var/log/ha-log
系统运行日志文件,取默认值
logfacility local0
日志等级,取默认值
keepalive 2
心跳频率,自己设定。1:表示 1 秒;200ms:表示 200 毫秒
deadtime 30
节点死亡时间阀值,就是从节点在过了 30 后还没有收到心跳就认为主节点死亡,自己设定
warntime 10
发出警告时间,自己设定
initdead 120
守护进程首次启动后应该等待 120 秒后再启动主服务器上的资源
udpport 694
心跳信息传递的 udp 端口,使用端口 694 进行 bcast 和 ucast 通信,取默认值
不要和别人冲突
bcast eth0
采用 udp 广播播来通知心跳
auto_failback on
当主节点恢复后,是否自动切回
watchdog /dev/watchdog(这个需要加载模块 modprobe softdog)
watchdog 能让系统在出现故障 1 分钟后重启该机器,这个功能可以帮助服务器在确实停止心
跳后能够重新恢复心跳
node joan.example.com
主节点名称,与 uname –n 保持一致。排在第一的默认为主节点,所以不要搞措顺序
node joan1.example.cm
副节点名称,与 uname –n 保持一致
ping 192.168.2.251 加载ping模块
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
默认 heartbeat 并不检测除本身之外的其他任何服务,也不检测网络状况。
所以当网络中断时,并不会进行 Load Balancer 和 Backup 之间的切换。
可以通过 ipfail 插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为
ping 的节点。
vim haresources 修改资源文件
安装http服务,不许开启,心跳服务自动开启
yum install httpd -y
vim authkeys 修改认证文件
修改认证文件的权限
将配置文件拷贝给另一各节点
[root@joan1 ha.d]# ls
authkeys ha.cf harc haresources rc.d README.config resource.d shellfuncs
[root@joan1 ha.d]# scp ha.cf authkeys haresources 192.168.2.144:/etc/ha.d/
开启heartbeat 服务
[root@joan1 ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
如果出现问题,就差看日志
tail -f /var/log/message
tail -f /var/log/ha-log
检测,为了区分节点在心跳启动的服务(httpd)的默认发布目录里放不同的东西(两个节点都执行)
echo `hostname` > /var/www/html/index.html
OK现在服务在主节点上运行着,如果主节点上的heartbeat当掉,服务自动切换到辅助节点上,如果主节点恢复正常,服务被接回。