使用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机从浏览器登录http://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

还可以利用/usr/share/heartbeat下的hb_standby和hb_takeover命令来模拟资源切换。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用Heartbeat实现双机热备相关推荐

  1. 【MySQL系列】单机热备(主从结构)和双机热备介绍和使用

    Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份的数据库中.实现mysql数据库的热 ...

  2. Heartbeat双机热备配置

    Heartbeat双机热备配置 简介 Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat ...

  3. Heartbeat V2.x双机热备安装

      Heartbeat V2.x双机热备安装 1       简述 1.1   文档目的 本文档主要介绍linux-HA项目的新版本v2的安装和配置及相关算法,为以后架构linux-HA增加系统的可用 ...

  4. 双机热备+负载均衡(Heartbeat+DRBD+NFS+Keepalived+Lnmp)线上方案

    双机热备+负载均衡 线上方案 (Heartbeat+DRBD+NFS+Keepalived+Lnmp) gotop 对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里 ...

  5. 双机热备+负载均衡 线上方案 (Heartbeat+DRBD+NFS+Keepalived+Lnmp)

    对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其 ...

  6. mysql双机热备的实现

    转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...

  7. mySQL双机冗余_MySQL双机热备实现原理

    双机热备是应用于服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接,正常情况下主机处于工作状态,从机处于监视状态,一旦从机发现主机异常,从机将会在很短的时间之内代替主机,完全实现主机 ...

  8. Nginx+Keeplived双机热备(主从模式)

    Nginx+Keeplived双机热备(主从模式) 参考资料: http://www.cnblogs.com/kevingrace/p/6138185.html 双机高可用一般是通过虚拟IP(漂移IP ...

  9. Linux系统双机热备的方案

    目前,双机和集群采用的操作系统主要有UNIX.Linux.BSD及微软公司的Windows NT/2000.随着Linux的迅速发展,稳定性.安全性及功能的不断增强,人们对Linux的使用越来越广泛, ...

最新文章

  1. 医学数据挖掘学习项目:他克莫司
  2. while opening read connection: jdbc:mysql message from server: Host is not allowed to connect to t
  3. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版
  4. C++ 拷贝构造函数
  5. 【渝粤教育】广东开放大学 商务翻译实务 形成性考核 (49)
  6. C#效率优化(2)-- 方法内联
  7. 【导航仿真】基于matlab GUI PSINS导航仿真【含Matlab源码 1496期】
  8. 关于vb.net初学者,倒计时器的开发
  9. java case when多分支判断_Apache Spark之单分支CaseWhen优化为IF
  10. python控制灯开关_通过树莓派控制电灯开关
  11. ios应用音频与来电铃声冲突问题
  12. 高温熔融玻璃液位检测用激光玻璃液位计
  13. 手机黑屏,但是按开机键有震动,能进系统,usb也能识别fastboot和rec(bl已解)
  14. 电子设计硬件知识要点(1) 电阻、电容、电感、二极管、三极管
  15. JAVA并发-Future/CompletableFuture
  16. python ez setup.py_python 安装 ez_setup.py出现的问题及解决办法
  17. 马哥:linux云计算从入门到精通笔记
  18. Content-Type中application/json和application/xml
  19. 双向链表基本操作(C语言实现)详解
  20. Pulsar 各个Shedder分析及新的Shedder -- AvgShedder

热门文章

  1. php捕捉Warning、Notice错误
  2. 搭载在电源插座上的IoT革命
  3. storm风暴英雄 tempo_风暴英雄玩好乔汉娜需要知道的7个技巧 TempoStorm
  4. exchange外网访问和证书配置
  5. win7系统打开定位服务器地址,win7系统手动打开或关闭系统定位服务的步骤
  6. QT控件学习:QInputDialog
  7. Es refresh index
  8. 表情识别------CNN训练fer2013数据集
  9. 【微信小程序】Java岗面试12家大厂成功跳槽
  10. 怎样买保险才不会被坑?用亲身经历告诉你!