一、 实验环境: 如下图所示:两台服务器节点,一台客户端通过交换机互连,相关数据规划如下: 设备名称 IP地址 主机名 客户端 192.168.110.2 Client(win7) 服务器1 192.168.110.128 node1.yang.com 服务器2 192.168.110.129 node2.yang.com

二、 配置步骤及说明

  1. 准备工作 a. 主机名解析 在heartbeat中,节点之间的通信使用的节点主机名称,因此必须确保每台主机的名称惟一,并且通过主机名能够访问到对应的IP地址。建议修改每个节点的/etc/hosts文件,使各节点保持一致: [root@node1 ha.d]# cat /etc/hosts 192.168.110.128 node1 node1.yang.com 192.168.110.129 node2 node2.yang.com b. 主机互信 在集群中,建议使用集群主来管理整个集群,需要频繁的从主远程登录其他的成员,因此建议配置主机互信避免每次都输入密码进行操作。 [root@node1 .ssh]# ssh-keygen -t rsa //全部回车,使用空密码即可,此时会在/root/.ssh目录中产生id_rsa.pub的文件 [root@node1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 //在节点1上将id_rsa.pub拷贝到node2即可。 Node2上的配置与此类似。

  2. 安装heartbeat软件 由于在CENTOS6的YUM源中没有配置有heartbeat,因此需要安装额外的YUM源: a. 获取YUM源: wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-6.noarch.rpm b. Yum安装heartbeat Yum install –y heartbeat即可,安装完成后可以使用rpm –ql heartbeat |less查看一下安装产生的相关文件。

  3. Heartbeat安装完成后,其工作目录为/etc/ha.d目录,工作依赖于ha.cf,haresources以及authkeys三个文件,这三文件需要手工从安装的帮助路径拷贝到/etc/ha.d目录。 #cp-p /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/

  4. 配置ha.cf文件 该文件为主配置文件,其中定义了相关日志文件位置、成员节点的信息、消息事件层通信的机制(单播、组播还是广播)等,在我们的场景中需要修改如下的事项,去掉相应行前面的注释标志#: [root@node1 ha.d]# cat /etc/ha.d/ha.cf debugfile /var/log/ha-debug //用于观察heartbeat事务行为 logfile /var/log/ha-log //记录相关的日志 udpport 694 //通信端口694 mcast eth0 225.0.0.1 694 1 0 //采用组播通信机制 auto_failback on //当主节点恢复时,资源回切 node node1.yang.com //定义两个node,分别使用其主机名 node node2.yang.com ping 192.168.110.2 //由于集群只有2个节点,需要借助ping进行检测

  5. 配置authkeys文件 authkeys为成员节点通信的时候采用的加密机制确保通信安全,有三种加密机制,分别为CRC,MD5以及SHA。写法较简单,如下: auth 3 //定义认证采用的id 3 md5 Hello! //定义该id所对应的认证算法以及密钥 该文件是为了确保节点间通信的安全性,建议配置权限为600.

  6. 配置haresources文件 haresouces文件为状态为主的节点需要启用的资源,以及状态为备的节点需要关闭的资源。资源以行为单位,格式如下: nodename resources1 resource2 … 其中nodename必须为ha.cf文件中配置的其中一个节点名称,用于表示资源希望运行在的那个服务器,称为集群主服务器。Resources之间使用空格隔开,这些resources实际上是heartbeat可以调用的脚本,其中IPaddr为软件提供的脚本,其他的脚本位于/etc/ha.d/rc.d/目录中;除了这些脚本外,/etc/init.d/中的脚本,只有符合LSB风格的也可以被调用。因此安装httpd后的httpd脚本是可以直接调用的。 如果resources有参数传递,需要使用::进行分隔,多个参数之间也使用::进行分隔。 本实验为httpd提供高可用服务,因此需要用到的资源如下: a. 对外提供服务的虚拟IP b. 提供WEB服务的httpd脚本,(安装apache后就有此脚本) haresource文件配置: node1.yang.com 192.168.110.100/24/eth0 httpd 到此三个关键的文件就配置完成了,现在将三个文件拷贝至备机: scp -p authkeys haresources ha.cf node2:/etc/ha.d/ 特别注意:备机与主机的文件保持一致即可,注意haresources文件中的node1.yang.com不能修改为node2.yang.com,原因前面已经解释过。

  7. 其他设置 a. 由于集群所需要使用的服务都交由heartbeat软件进行整体控制,因此在两台设备需要确保的是heartbeat在运行,而诸如vip,httpd等资源由heartbeat控制即可。因此可以设置heartbeat开机即启动,将httpd开机关闭。 [root@node1 ha.d]# chkconfig --list heartbeat heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@node1 ha.d]# chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off b. 为了方便后续测试,将两个节点的httpd的网页文件中写入不同的内容以示区分: [root@node1 ha.d]# cat /var/www/html/index.html Comes from node1.yang.com [root@node2 ha.d]# cat /var/www/html/index.html Comes from node2.yang.com

  8. 开启heartbeat服务 a. 启动主节点服务: Service heartbeat start b. 在主节点上启动备节点上面的服务: ssh root@node2 “service heartbeat start”

  9. 测试 a. 在node1上面ip addr查看VIP地址: [root@node1 ha.d]# ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:70:82:69 brd ff:ff:ff:ff:ff:ff inet 192.168.110.128/24 brd 192.168.110.255 scope global eth0 inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0 inet6 fe80::20c:29ff:fe70:8269/64 scope link valid_lft forever preferred_lft forever b. 从客户端访问http://192.168.110.100 c. 在集群主上面将eth0 down掉,再刷新页面: d. 在集群备上机查看VIP: [root@node2 ha.d]# ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:46:09:ee brd ff:ff:ff:ff:ff:ff inet 192.168.110.129/24 brd 192.168.110.255 scope global eth0 inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0 inet6 fe80::20c:29ff:fe46:9ee/64 scope link valid_lft forever preferred_lft forever 分析: 此时主节点ping192.168.110.2不通,同时与不能与备节点通信,因此主节点认为自己故障,将资源放弃;而备节点可以ping通192.168.110.2,而不能与主节点通信,因此认为自己正常,启用相应的资源。可以分析/var/log/ha-debug以及/var/log/ha-log日志中的详细过程。同时可以通过抓包看到节点间的通信以及各节点ping 192.168.110.2地址。

  10. 总结: 本实验简要的说明了heartbeat如何为集群提供httpd的高可用,在真实的环境中应当是heartbeat为各种服务代理服务提供高可用,通过将反向代理将服务转发到后端服务的集群进行处理。而heartbeat为反向代理本身提供集群服务。可以看到所有用于提供服务的资源被heartbeat统一管理,在主节点上开启,当主节点出现故障经过集群判断新的主后,在新的主上面重新启用这些资源。