美文网首页
keepalive和nginx高可用

keepalive和nginx高可用

作者: 水平号 | 来源:发表于2020-05-25 12:06 被阅读0次

    1,keepalive

    vrrp 虚拟路由器冗余协议,防止单点故障。

    2,配置文件

    cat /etc/keepalived/keepalived.conf

    global_defs {
        router_id lb01            #标识
    }
    vrrp_instance VI_1 {
        state MASTER             #指定角色
        interface eth0            #指定端口
        virtual_router_id 50       #需要在同一个组
        priority 150              #优先级越高越优先当选为主,1-254
        advert_int 1              #心跳检测,1S检测一次
        authentication {          #验证信息
            auth_type PASS
            auth_pass 1111
    }
        virtual_ipaddress {        #对外提供的虚拟IP
            10.0.0.3/24
            10.0.0.4/24             #虚拟IP可以有多个
        }
    }
    

    lb01和lb02 两台配置不同之处
    state
    priority
    router_id

    3,启动keepalive

    systemctl start keepalived

    4,keepalive高可用列脑

    由于某些原因,导致两台keepalive高可用服务器在指定时间内,无法检测
    到对方的心跳信息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。

    服务器网线松动等网络故障
    服务器硬件故障发生损坏现象而崩溃
    主备都开启firewalld防火墙
    nginx服务死掉等

    (1),在备上编写检测脚本,测试如果能ping通主并且备节点还有VIP的话则认为产生了列脑

    1.1,配置检测脚本

    cat check_split_brain.sh
    #!/bin/sh
    lb01_vip=10.0.0.3
    lb01_ip=10.0.0.5
    while true;do
        ping -c 2 -w 3 $lb01_ip &>/dev/null
        if [ $? -eq 0 -a `ip add|grep "$lb01_ip"|wc -l` -eq 1];then
            echo "ha is split brain.warning."
        else
            echo "ha is ok"
        done
    done
    

    1.2,安装screen,在screen内运行脚本
    yum install screen 使用screen工具来启动脚本,ctrl+A+D退出screen
    脚本不能停止

    screen -list 查看

    screen -r 1727 #1727通过screen查看到

    (2),如果Nginx宕机,会导致用户请求失败,但keepalived并不会进行切换,所以需要编写一个脚本检测nginx的存活状态,如果不存活则kill nginx和keepalived,主备都需要

    2.1,配置自检测脚本

    cat check_web.sh
    #!/bin/sh
    while true;do
    nginxpid=$(ps -C nginx --no-header |wc -l)
    
    #1,判断nginx是否存活,如果不存活则尝试启动nginx
    if [ $nginxpid -eq 0 ];then
        systemctl start nginx
        sleep 3
        #2,3秒后再次获取一次nginx状态
        nginxpid=$(ps -C nginx --no-header |wc -l)
        #3,再次进行判断,如nginx还不存活则停止keepalived,让地址进行漂移,并
        退出脚本
        if [ $nginxpid -eq 0 ];then
            systemctl stop keepalived
            exit 1
        fi
    fi
        sleep 5
    done
    

    (3),在keepalived中配置调用脚本

    3.1,配置keepalived调用脚本

    cat check_nginx.sh
    #!/bin/sh
    
    

    3.2, 调用脚本

    global_defs {
        router_id lb01            #标识
    }
    vrrp_script check_nginx_alive {               #定义脚本
        script "/server/scripts/check_nginx.sh"
        interval 2
        weight 50
    }
    vrrp_instance VI_1 {
        state MASTER             #指定角色
        interface eth0            #指定端口
        virtual_router_id 50       #需要在同一个组
        priority 150              #优先级越高越优先当选为主,1-254
        advert_int 1              #心跳检测,1S检测一次
        authentication {          #验证信息
            auth_type PASS
            auth_pass 1111
    }
        virtual_ipaddress {        #对外提供的虚拟IP
            10.0.0.3/24
            10.0.0.4/24             #虚拟IP可以有多个
        }
        track_script {             #调用脚本
            check_nginx_alive
        }
    }
    

    题外话

    1,只有在物理服务器的情况,并且公司的业务不允许DOWN机(24*7),才会使用keepalived
    2,互联网公司
    1,购买SLB-->选择购买的连接数-->升级
    2,自带高可用

    相关文章

      网友评论

          本文标题:keepalive和nginx高可用

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