美文网首页转载部分
Nginx+keepalived实现高可用

Nginx+keepalived实现高可用

作者: xiaolyuh | 来源:发表于2020-05-15 17:03 被阅读0次

    Nginx一般用来做服务网关,虽然Nginx的性能非常高,但是还是有宕机的风险,所以Nginx的高可用也是我们需要考虑的。常见的Nginx的高可用方案是使用keepalived浮动IP技术来实现。

    通过keepalived虚拟一个vip出来作为虚拟网关,所有请求都先通过虚拟网关找到真正网关,再往下走。当主宕机了后,从会接过主的责任对外提供服务,当主复活后从又会将权限还给主,如图:

    image.png

    keepalived主要功能

    • 管理LVS负载均衡软件
    • 实现LVS集群节点的健康检查
    • 作为系统网络服务的高可用性(failover)

    使用keepalived来监控nginx

    keepalived通过shell脚本的方式来监控nginx的进程数量,从而判断nginx是否死掉,如果死掉就通过命令重启Nginx,脚本文件/usr/local/src/chk_nginx_pid.sh如下:

    #!/bin/bash
    A=`ps -C nginx --no-header |wc -l`     #统计nginx进程数    
    if [ $A -eq 0 ];then                            
          /usr/local/nginx/sbin/nginx                #重启nginx
          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
                  killall keepalived    #杀掉,vip就漫游到另一台机器                
          fi
    fi
    
    1. 统计nginx进程数 ,如果进程数为0则重启nginx。
    2. 重启nginx后重新统计nginx进程数,如果还是0表示nginx重启失败。
    3. nginx重启失败,则杀掉本机keepalived进程,这时虚IP就会浮动到从Nginx服务器上。

    keepalived配置

    keepalived需要和nginx安装在一台机器上,然后打开/etc/keepalived/keepalived.conf配置keepalived。

    keepalived主:

    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_1
    }
    vrrp_script chk_http_port {
        script "/usr/local/src/chk_nginx_pid.sh" #心跳执行的脚本
        interval 2                          #(检测脚本执行的间隔,单位是秒)
        weight 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0   #系统网卡
        virtual_router_id 51 #主备两机器一致
        priority 100   #值大的机器,胜出
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
            chk_http_port            #(调用检测脚本)
        }
        virtual_ipaddress { #可虚拟多个ip
            192.168.244.200
        }
    }
    

    keepalived从:

    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 50 
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.244.200
        }
    }
    

    主从差异配置只有两个,如下:

    • state BACKUP:指定keepalived的角色,MASTER为主,BACKUP为备。
    • priority 50:优先级,数值越大,处理请求的优先级越高,备用数字小些。

    keepalived脑裂

    keepalived的主节点会定期往备节点发送心跳包,当备节点没有接收到心跳包的时候,会认为主节点挂了,那么他就会接过主节点的责任对外提供服务,表现形式就是备节点上出现了虚拟IP。这时有可能发生脑裂情况,所以我们还需要通过shell脚本监控keepalived的脑裂情况,脚本如下:

    #!/bin/bash
    # 检查脑裂的脚本,在备节点上进行部署
    LB01_VIP=10.10.10.229
    LB01_IP=10.10.10.129
    LB02_IP=10.10.10.130
    while true
    do
      ping -c 2 -W 3 $LB01_VIP &>/dev/null
        if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then
            echo "ha is brain."
        else
            echo "ha is ok"
        fi
        sleep 5
    done
    

    相关文章

      网友评论

        本文标题:Nginx+keepalived实现高可用

        本文链接:https://www.haomeiwen.com/subject/lathohtx.html