我们在提供服务的时候,服务器很有可能会因为种种原因宕机,这就大大降低了用户体验,那么如何能

够保证在服务器宕机的情况下依然不影响用户体验呢,这里最常用的方式HA集群,又称为双击热备,它

其实也就是基于非常简单的主从架构。


我们简单地理解就是:有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换到

B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均

衡的功能。


这里有一个非常重要的概念,叫做流动ip,也称vip。


一个 HA 架构,一个交换机下面有两台机器 Web1 和 Web2,其中 Web1 为主节点,正常是它在提供服

务,而 Web2 备用节点是闲置的。 Web1 和 Web2 中间有一根心跳线,检查对方的存活状态。流动 IP,

也叫 vip 是对外提供服务的 ip,正常情况下是配置在Web1 上的,当 Web1 宕机后, Web2 会自动配置

该 vip,对外提供服务。所以我们说,vip就是连接主机和从机的桥梁。


现在来看看如何搭建HA架构:


1、准备两台机器,一台master,一台slave


2、记住两台机器的ip地址:

    master : eth0 192.168.1.115

    slave : eth0 192.168.1.126


3、两台机器同时操作:


    3.1. 关闭防火墙 iptables -F

  
       关闭selinux: setenforce 0


     3.2. vim /etc/hosts   // 增加内容如下: 

 
          192.168.1.115 master   
        192.168.1.126 slave


4、两台机器上都安装heartbeat的rpm包,如果没有,需要先安装epel的扩展源:


    yum install -y epel-release


    yum install -y heartbeat* libnet


5、HA集群可以针对任意服务来进行,这里我们对nginx服务进行操作


    yum install -y nginx


6、主(master)上配置


    # cd /usr/share/doc/heartbeat-3.0.4/


    # cp authkeys ha.cf haresources /etc/ha.d/


    # cd /etc/ha.d/


    # vim authkeys


    更改或者增加一行


    3 md5 Hello!


    然后修改其权限


    # chmod 600 authkeys


    编辑 haresources 文件


    # vim haresources


    加入下面一行


    # master 192.168.1.110/24/eth0:0 nginx


    说明:master为主节点的hostname,192.168.1.110为流动ip,/24 表示网段,eth0:0为vip的设

备名,nginx 为heartbeat 监控的服务,也是两台机器对外提供的核心服务。


    然后编辑ha.cf


    # vim ha.cf


    改为如下内容


   debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    logfacility     local0
    keepalive 2
    deadtime 30
    warntime 10
    initdead 60
    udpport 694
    ucast eth0 192.168.1.100
    auto_failback on
    node    master
    node    slave
    ping 192.168.1.1
    respawn hacluster /usr/lib/heartbeat/ipfail 


    说明:

        /var/log/ha-debug:该文件保存heartbeat 的调试信息


        logfile /var/log/ha-log:该文件为heartbeat 的日志文件


        keepalive 2:心跳的时间间隔,默认时间单位为秒


        deadtime 30:超出该时间间隔为收到对方节点的心跳,则认为对方死亡


        warntime 10:超出该时间间隔为收到对方节点的心跳,发出警告并记录到日志中


        initdead 60:在某些系统上,系统重启后要经过一段时间网络才能正常工作,该选项


     用于解决这种情况产生的时间间隔,取值至少为deadtime的两倍。


        udpport 694:设置广播通信使用的端口,694为默认端口


        ucast eth0 192.168.1.126:设置对方机器心跳检测的网卡和ip


        auto_failback on: heartbeat 的两台主机分别为主节点和从节点。主节点在正常情

     况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选      项设为 on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节      点。

 

        node 指定主和从,各占一行,主在上从在下。


        respawn hacluster /usr/lib/heartbeat/ipfail:指定与 heartbeat 一同启动和关

     闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是 ipfail,该进程用于检      测和处理网络故障,需要配合 ping 语句指定的 ping node 来检测网络连接。如果你的系统是      64,请注意该文件的路径。


7、把主上的三个配置拷到从上


    # cd /etc/ha.d/


    # scp authkeys ha.cf haresources slave:/etc/ha.d/


8、到从上编辑ha.cf


    # vim /etc/ha.d/ha.cf


    ucast eth0 192.168.1.126 改为 ucast eth0 192.168.1.115


9、启动 heartbeat


    先主后从


    /etc/init.d/heartbeat start