zoukankan      html  css  js  c++  java
  • 使用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用来设置当主server出现故障时heartbeat的执行机制。其内容为:当主server宕机后,该如何进行切换操作。切换内容通常有IP地址的切换、服务的切换、共享存储的切换,从而使从server具有和主server同样的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命令来模拟资源切换。

  • 相关阅读:
    C# 迭代器.NET实现—IEnumerable和IEnumerator
    Excel、CSV文件处理
    C# 读写ini文件
    SCARA——OpenGL入门学习五六(三维变换、动画)
    GDI与OpenGL与DirectX之间的区别
    SCARA——OpenGL入门学习四(颜色)
    SCARA——OpenGL入门学习三
    SQLite数据库表是否存在
    数据库SQL语句单引号、双引号的用法
    C# 委托与事件
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4200775.html
Copyright © 2011-2022 走看看