IT运维笔记


使用Heartbeat实现双机热备

使用Heartbeat实现”双机热备”或者称为“双机互备” heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。 heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务 --- ## 一、网络环境设定 每个主机分别带有两块以太网卡,其中一块用于网络通信,另一块用于心跳功能。两个节点的网络设置如下: node1: 主机名:srv5.localdomain ( NodeA ) eth0: 192.168.8.5 255.255.255.0 //对外IP地址 eth1: 192.168.9.5 255.255.255.0 //HA心跳使用地址 node2: 主机名:srv6.localdomain ( NodeB ) eth0: 192.168.8.6 255.255.255.0 //对外IP地址 eth1: 192.168.9.6 255.255.255.0 //HA心跳使用地址 vip: 192.168.8.100 同时通过网络和另一台机器192.168.9.7相互连接用来检测网络连接情况。 网络拓扑结构图如下: \ 两台机器的/etc/hosts文件中需要加入如下的配置 192.168.8.5 srv5.localdomain 192.168.8.6 srv6.localdomain 主节点的/etc/sysconfig/network文件的HOSTNAME如下 HOSTNAME=srv5.localdomain 从节点的/etc/sysconfig/network文件的HOSTNAME如下 HOSTNAME=srv6.localdomain --- ## 二,安装配置 2.1,在两台机器上分别安装heartbeat `yum -y install heartbeat-stonith heartbeat-pils heartbeat heartbeat-devel heartbeat-gui libnet` 2.2,配置heartbeat Heartbeat的主要配置文件有ha.cf、haresources、authkeys,需要放在/etc/ha.d目录下, 在通过yum安装Heartbeat后,默认并没有这三个文件, yum 安装后可以从/usr/share/doc/heartbeat-2.1.3找到,拷贝到/etc/ha.d并编辑 ``` cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/ cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/ cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/ ``` 2.3,主配置文件:ha.cf 内容设置如下: ``` debugfile /var/log/ha-debug #用于记录heartbeat的调试信息 logfile /var/log/ha-log #用于记录heartbeat的日志信息 logfacility local0 #系统日志级别 keepalive 2 #设定心跳(监测)间隔时间,默认单位为秒 warntime 10 ##警告时间,通常为deadtime时间的一半 deadtime 30 # 超出30秒未收到对方节点的心跳,则认为对方已经死亡 initdead 120 #网络启动时间,至少为deadtime的两倍。 hopfudge 1 #可选项:用于环状拓扑结构,在集群中总共跳跃节点的数量 udpport 694 #使用udp端口694 进行心跳监测 ucast eth1 192.168.9.6 #采用单播,进行心跳监测,IP为对方主机IP auto_failback on #on表示当拥有该资源的属主恢复之后,资源迁移到属主上 node srv5.localdomain #设置集群中的节点,节点名须与uname –n相匹配 node srv6.localdomain #节点2 ping 192.168.8.2 192.168.9.7 #ping集群以外的节点,这里是网关和另一台机器,用于检测网络的连接性 respawn root /usr/lib/heartbeat/ipfail apiauth ipfail gid=root uid=root #设置所指定的启动进程的权限 ``` 2.4,资源文件haresources ha.cf文件设置了heartbeat的检验机制,没有执行机制。Haresources用来设置当主服务器出现问题时heartbeat的执行机制。其内容为:当主服务器宕机后,该怎样进行切换操作。切换内容通常有IP地址的切换、服务的切换、共享存储的切换,从而使从服务器具有和主服务器同样的IP、SERVICE、SHARESTORAGE,从而使client没有察觉。在两个HA节点上该文件必须完全一致。 cat /etc/ha.d/haresources srv5.localdomain IPaddr::192.168.8.100/32 2.5,认证文件authkeys 用于配置心跳的加密方式,该文件主要是用于集群中两个节点的认证,采用的算法和密钥在集群中节点上必须相同,目前提供了3种算法:md5,sha1和crc。其中crc不能够提供认证,它只能够用于校验数据包是否损坏,而sha1,md5需要一个密钥来进行认证。 本次实例中,内容设置如下: ----------------------------------------------- cat /etc/ha.d/authkeys auth 1 1 crc ----------------------------------------------- 注:需要更改该文件的属性为600,否则heartbeat启动将失败 [root@server01 ~]#chmod 600 /etc/ha.d/authkeys 2.6,配置从节点的heartbeat 将主节点上的heartbeat配置文件拷贝到从节点,并确保两个节点上的配置文件权限相同: ----------------------------------------------- scp /etc/ha.d/ha.cf root@srv6.localdomain:/etc/ha.d/ scp /etc/ha.d/haresources root@srv6.localdomain:/etc/ha.d/ scp /etc/ha.d/authkeys root@srv6.localdomain:/etc/ha.d/ ----------------------------------------------- ha.cf文件需修改ucast的内容,将其指向主节点: ucast eth1 192.168.9.5 #指定对方IP 其他文件内容无需修改。在主备节点上haresources和authkeys文件必须是相同的 --- ## 三,测试 使用http服务测试 heartbeat 编辑各自主机的测试用文件index.html,放到/var/www/html/目录下,内容分别为“NodeA”和“NodeB” 在两机上分别启动httpd服务和heartbeat服务 #service httpd start #service heartbeat start 先在主节点上启动: heartbeat为主节点设置虚拟IP地址192.168.8.100。在主节点使用ifconfig可以看到多了个eth0:0,其具体信息如下: ----------------------------------------------- [root@srv5 ha.d]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:F1:9C inet addr:192.168.8.100 Bcast:192.168.8.100 Mask:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:67 Base address:0x2000 ----------------------------------------------- 查看日志: heartbeat[23230]: 2014/10/04_01:28:24 info: Local status now set to: 'up' heartbeat[23230]: 2014/10/04_01:28:25 info: Link 192.168.8.2:192.168.8.2 up. heartbeat[23230]: 2014/10/04_01:28:25 info: Status update for node 192.168.8.2: status ping heartbeat[23230]: 2014/10/04_01:28:25 info: Status update for node 192.168.9.7: status ping heartbeat[23230]: 2014/10/04_01:28:25 info: Link 192.168.9.7:192.168.9.7 up. heartbeat[23230]: 2014/10/04_01:30:24 WARN: node srv6.localdomain: is dead //从节点还没有启动 heartbeat[23230]: 2014/10/04_01:30:24 info: Comm_now_up(): updating status to active heartbeat[23230]: 2014/10/04_01:30:24 info: Local status now set to: 'active' //从另一台节点抢占资源 heartbeat[23230]: 2014/10/04_01:30:24 info: Starting child client "/usr/lib/heartbeat/ipfail" (0,0) heartbeat[23230]: 2014/10/04_01:30:24 WARN: No STONITH device configured. heartbeat[23230]: 2014/10/04_01:30:24 WARN: Shared disks are not protected. heartbeat[23230]: 2014/10/04_01:30:24 info: Resources being acquired from srv6.localdomain. heartbeat[23317]: 2014/10/04_01:30:24 info: Starting "/usr/lib/heartbeat/ipfail" as uid 0 gid 0 (pid 23317) harc[23318]: 2014/10/04_01:30:24 info: Running /etc/ha.d/rc.d/status status mach_down[23364]: 2014/10/04_01:30:25 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired IPaddr[23385]: 2014/10/04_01:30:25 INFO: Resource is stopped //然后在本机启动资源 ResourceManager[23473]: 2014/10/04_01:30:25 info: Acquiring resource group: srv5.localdomain IPaddr::192.168.8.100/32 IPaddr[23500]: 2014/10/04_01:30:25 INFO: Resource is stopped ResourceManager[23473]: 2014/10/04_01:30:25 info: Running /etc/ha.d/resource.d/IPaddr 192.168.8.100/32 start 其他PC机从浏览器登录https://192.168.8.100/index.html可以看到其页面内容为“NodeA”. 将主节点的eth1断网,刷新页面,内容显示为“NodeB”,表示http服务已交给从节点并由从节点运行。 此时,再在主节点上查看ifconfig,不显示vip的设备及其vip。 同时查看主节点日志:主节点让出资源 [root@srv5 ha.d]# tail /var/log/ha-log ResourceManager[21049]: 2014/10/04_00:52:00 info: Releasing resource group: srv5.localdomain IPaddr::192.168.8.100/32 ResourceManager[21049]: 2014/10/04_00:52:00 info: Running /etc/ha.d/resource.d/IPaddr 192.168.8.100/32 stop IPaddr[21113]: 2014/10/04_00:52:00 INFO: ifconfig eth0:0 down IPaddr[21087]: 2014/10/04_00:52:00 INFO: Success 从节点接管资源,查看从节点日志: IPaddr[20183]: 2014/10/04_01:43:53 INFO: eval ifconfig eth0:0 192.168.8.100 netmask 255.255.255.255 broadcast 192.168.8.100 IPaddr[20157]: 2014/10/04_01:43:53 INFO: Success mach_down[20038]: 2014/10/04_01:43:53 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired mach_down[20038]: 2014/10/04_01:43:53 info: mach_down takeover complete for node srv5.localdomain. heartbeat[19467]: 2014/10/04_01:43:53 info: mach_down takeover complete. ipfail[19495]: 2014/10/04_01:43:53 info: NS: We are still alive! ipfail[19495]: 2014/10/04_01:43:53 info: Link Status update: Link srv5.localdomain/eth1 now has status dead