zoukankan      html  css  js  c++  java
  • heartbeat+nginx搭建高可用HA集群

    前言:

     HA即(high available)高可用,又被叫做双机热备,用于关键性业务。简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务。常见的实现高可用的开源软件有 heartbeat 和 keepalived。

        这样,一台 web 服务器一天24小时提供web服务,难免会存在 web 服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望的。如果这样,有2台服务器,A对外提供 web 服务,B作为备用,如果A挂掉,那么B立刻替代A的位置去提供 web 服务,这样对用户来说是透明的。但是有个问题,服务器A的 ip 是 10.0.0.100,服务器B的 ip 是 10.0.0.101,显然向用户提供A或B的ip地址是不可行的,因为用户总不能去切换ip来访问的吧。这时heartbeat或keepalived可以提供一个虚拟IP:10.0.0.102,用户只需要访问 10.0.0.102,当A提供服务时,VIP 会设置在A服务器上,当B提供服务时,VIP会设置在B服务器上,这样就可以让用户通过访问 10.0.0.102 来获取web服务,即使A或B服务器切换也不影响用户的正常访问。

    名词解释:

    HA=high available

    VIP=虚拟IP

    准备环境:

    服务器DBMaster:

    主机名:dbmaster
    操作系统:CentOS6.5
    eth0 IP0:192.168.150.3
    eth0 IP1:192.168.150.33

    服务器DBSlave:

    主机名:slave
    操作系统:CentOS6.5
    eth0 IP0:192.168.150.4
    eth0 IP1:192.168.150.44

    漂移VIP:192.168.150.253(也就是要访问的IP)

    S1:设置主机名:

    dbmaster节点设置hostname

    #hostname dbmaster
    #vim /etc/sysconfig/network
    编辑配置文件:
    HOSTNAME=dbmaster
    

      

    dbslave节点设置hostname

    # hostname dbslave
    # vim /etc/sysconfig/network
    编辑配置文件:
    HOSTNAME=dbslave
    

     

    S2:关闭防火墙和selinux(2台节点都要操作)

    关闭iptables

    # iptables -F
    # service iptables save
    # service iptables stop
    

    关闭selinux:

    # setenforce 0
    # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    

     

    S3:配置hosts文件(2台节点都操作)

    # vim /etc/hosts
    增加内容如下:
    192.168.150.3 dbmaster
    192.168.150.4 dbslave
    

     

    S4:安装epel扩展源 (2台都操作)

    # yum install -y epel-release
    

     

    S5:安装heartbeat (2台都操作)

    # yum install -y heartbeat* libnet nginx
    

     

    S4+S5或可为如下操作 

    #rpm -ivh http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm
    yum list|grep heartbeat
    yum -y install  heartbeat*
    安装资源包nginx和heartbeat的依赖包libnet和libxml
    yum -y install nginx
    yum -y install libnet*

    S6:主dbmaster节点配置

    1、拷贝配置文件:

    # cd /usr/share/doc/heartbeat-3.0.4/
    # cp authkeys ha.cf haresources /etc/ha.d/
    # cd /etc/ha.d
    

    2、修改authkeys

    # vim authkeys
    更改或增加如下内容:
    auth 3
    3 md5 Hello!
    然后修改其权限
    # chmod 600 authkeys
    

    3、编辑haresources文件

    # vim haresources
    加入下面一行:
    dbmaster 192.168.150.253/24/eth0:0 nginx
    

    说明:dbmaster为主节点hostname,192.168.150.253为飘vip,/24为掩码为24的网段,eth0:0为vip的设备名,nginx为heartbeat监控的服务,也是两台机器对外提供的核心服务。

    4、编辑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.150.44
    auto_failback on
    node dbmaster
    node dbslave
    ping 192.168.150.253
    respawn hacluster /usr/lib64/heartbeat/ipfail
    

    5、配置说明:

    debugfile /var/log/ha-debug该文件保存heartbeat的调试信息。
    logfile /var/log/ha-logheartbeat的日志文件。
    keepalive 2:心跳的时间间隔,默认时间单位为秒s。
    deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
    warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
    initdead 60:在某系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔,取值至少为deadtime的2倍。
    udpport 694:设置广播通信使用的端口,694为默认使用的端口号。
    ucast eth0 192.168.150.44:设置对方机器心跳检测的网卡和IP。
    auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。

    ping 192.168.150.253:设置的漂移IP。
    respawn heartbeat /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。

     

    S7:把主节点上的三个配置文件拷贝到从节点

    # cd /etc/ha.d
    # scp authkeys ha.cf haresources dbslave:/etc/ha.d
    

     

    S8:从节点dbslave编辑ha.cf

    # vim /etc/ha.d/ha.cf
    只需要更改一个地方如下:如下IP为对方机器的心跳IP
    ucast eth0 192.168.150.33
    

     

    S9:启动heartbeat服务

    配置完毕后,先master启动,后slave启动。启动后要稍后5-10秒左右可以看到nginx的进程。

    # service heartbeat start
    

     

    S10:检查测试

    # ifconfig
    看是否有接口 eth0:0
    
    # ps aux | grep nginx
    看是否有nginx进程
    

    主节点停止heartbeat服务

    # service heartbeat stop
    

     

    总结:

    1、我是在两台服务器上分别部署了tomcat,一样的部署方式及一样的程序,仅是首页的出现的问题一个是dbmaster另一个是dbslave,使用第三台机器访问“http://192.168.150.253:端口/项目名时可以发现首页的文字是dbmaster,当停掉master服务器的heartbeat时,再刷新页面会发现已经是slave字样。

    2、如果启动heartbeat过程中出现 Resource is stopped 可以忽略。

  • 相关阅读:
    Windows7平台下gitblit服务器安装
    使用JDK的zip编写打包工具类
    MongoDB和Java(7):MongoDB用户管理
    MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
    MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
    MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
    MongoDB和Java(3):Java操作MongoB
    MongoDB和Java(2):普通用户启动mongod进程
    Spring MVC 执行原理
    选择性配置-ConditionalOnProperty
  • 原文地址:https://www.cnblogs.com/fan-yuan/p/7717630.html
Copyright © 2011-2022 走看看