Heartbeat 是一款强大的集群管理工具,提供了诸如消息传递、节点成员身份管理、IP 地址分配和迁移等功能。它广泛用于构建高可用性的企业级应用系统,如 Apache、Samba 和 Squid 等。此外,Heartbeat 可以与负载均衡软件结合使用,实现入站请求的分散处理。
本文将以一个包含三台运行 Heartbeat 的服务器组成的示例集群为例,介绍如何测试其故障切换机制。以下是测试拓扑结构:
为了确保服务的连续性,Heartbeat 会将指定的 IP 地址分配给主服务器上的虚拟网络接口卡(NIC)。如果主服务器出现故障,IP 地址会自动切换到另一台可用服务器上的虚拟 NIC。当主服务器恢复后,IP 地址会再次切换回主服务器。这种特性使得该 IP 地址被称为“浮动”地址。
在所有服务器上安装必要的软件包
首先,使用 yum 在每个节点上安装所需的软件包:
yum install PyXML cluster-glue cluster-glue-libs resource-agents
接下来,下载并安装两个 Heartbeat 的 RPM 文件,这些文件可能不在官方 CentOS 软件库中:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-3.0.4-2.el6.x86_64.rpm wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm rpm -ivh heartbeat-*
或者,你可以将 EPEL 软件库添加到源文件中,并使用 yum 进行安装。
由于 Heartbeat 将管理 Apache 的 httpd 服务的启动和停止,因此需要停止 Apache 并禁用其自动启动:
service httpd stop chkconfig httpd off
设置主机名称
编辑每个系统上的 /etc/sysconfig/network 文件,更改 HOSTNAME 这一行:
HOSTNAME=serverX.example.com
使用 hostname 命令立即应用新的主机名称,无需重启服务器:
hostname serverX.example.com
在每一台服务器上运行 uname -n,以确认主机名称已正确设置。
配置 Heartbeat
将 Heartbeat 的默认配置文件从 /usr 复制到 /etc/ha.d/ 目录下:
cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/ cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/ cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
修改所有集群节点上的这三个文件,以满足你的需求。
authkeys 文件包含集群节点之间通信所需的预共享密码。每个 Heartbeat 消息都包含该密码,节点只会处理带有正确密码的消息。Heartbeat 支持 SHA1 和 MD5 密码。在 authkeys 文件中,以下指令将验证方法设置为 SHA1,并定义了使用的密码:
auth 2 2 sha1 pre-shared-password
保存文件并使用 chmod 600 /etc/ha.d/authkeys 为其设置适当的权限。
在 ha.cf 文件中,定义计时器、集群节点、消息传递机制和其他设置:
## 日志 logfile /var/log/ha-log logfacility local0 ## 计时器 ## 所有计时器以秒为单位。如需以毫秒为单位设置时间,使用 'ms'。 keepalive 2 ## 节点被认为已停滞的时间 deadtime 15 ## 证实服务器宕机前等待的额外时间 initdead 120 ## 消息传递参数 udpport 694 bcast eth0 ## 你还可以使用多播或单播 ## 节点定义 ## 确保主机名称符合 uname -n node server1.example.com node server2.example.com node server3.example.com
haresources 文件包含 Heartbeat 认为主节点的服务器主机名称、浮动 IP 地址和高可用性服务的脚本名称。该文件在所有服务器上必须一致。主节点正常运行时,它会处理所有请求;Heartbeat 会停止其他节点上的高可用性服务。当主节点故障时,Heartbeat 会在下一个可用节点上自动启动服务。主节点恢复后,Heartbeat 会再次将其设置为主节点。例如,定义 server1.example.com 为主服务器,192.168.56.200 为浮动 IP 地址,httpd 为高可用性服务:
server1.example.com 192.168.56.200 httpd
配置文件准备好后,启动 Heartbeat 服务并将其添加到系统启动项:
service heartbeat start chkconfig heartbeat on
使用 tailf /var/log/ha-log 命令密切关注 Heartbeat 日志。
Heartbeat 可用于管理多项服务。例如,以下指令将让 Heartbeat 同时管理 Apache 和 Samba 服务:
server1.example.com 192.168.56.200 httpd smb nmb
但是,除非你使用 Pacemaker 之类的集群资源管理器(CRM),否则不建议在一个集群中管理多项服务。如果没有 Pacemaker,Heartbeat 仅通过 IP 地址监测集群节点的状态,而不会关注服务在节点上的实际运行情况。
测试
设置并运行 Heartbeat 后,对其进行测试。在每台服务器上创建单独的 index.html 文件,以便确定哪台服务器正在提供页面。访问 192.168.56.200 或相应的域名,页面应从 server1.example.com 加载。查看 server1 的 Apache 日志文件以确认这一点。刷新页面,确保每次都是从同一台服务器加载。
如果一切正常,测试故障切换机制:停止 server1.example.com 上的 Heartbeat 服务。浮动 IP 地址应迁移到 server2,页面应从该服务器加载。查看 server2 的 Apache 日志文件以确认这一点。如果也停止 server2 上的服务,页面应从唯一的可用节点 server3.example.com 加载。重新启动 server1 和 server2 上的服务后,浮动 IP 地址应根据 haresources 中的设置,从活动节点迁移到 server1。
如你所见,使用 Heartbeat 在 CentOS 下构建高可用性的 Apache 集群非常简单。虽然本文使用了三台服务器,但 Heartbeat 对节点数量没有限制,可以根据需要扩展集群规模。