12 keepalived脑裂问题

1.什么是脑裂

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

2.脑裂的故障

1.网线松动,网络故障 2.服务器硬件故障 3.服务器之间开启了防火墙

3.如何解决脑裂之nginx宕机

nginx默认监听在所有的IP地址上,VIP会飘到一台节点上,相当于那台nginx多了VIP这么一个网卡,所以可以访问到nginx所在机器

但是.....如果nginx宕机,会导致用户请求失败,但是keepalived没有挂掉

[root@web02 ~]# while true;do curl -H"Host:game.test.com" 192.168.15.200;done

 

 

 解决方案

     1.判断端口

     2.判断进程的方式

 

通过进程的方式解决

1、lb01和lb02编写脚本

cd etc/keepalived

vim /etc/keepalived/check.sh

 

 

#!/bin/bash
# 1、判断端口
# 2、通过进程的方式

ps -aux | grep [n]ginx

if [ $? -ne 0 ];then
    systemctl restart nginx
    
    sleep 3;
    
    ps -aux | grep [n]ginx
    
    if [ $? -ne 0 ];then
        systemctl stop keepalived 
    fi
    
fi

2.脚本增加可执行权限

    cd /etc/keepalived/

chmod +x check.sh

 

3、修改keepalived配置文件(lb01,lb02都修改)

vim /etc/keepalived/keepalived.conf

#全局配置
global_defs {
    #身份识别(全局唯一)
    router_id lb01
}

#每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
vrrp_script check_web {
    # 指定脚本路径
    script "/etc/keepalived/check.sh"
    # 5秒钟执行一次
    interval 5
            }

# 配置VRRP协议
vrrp_instance VI_1 {
    # 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
    state BACKUP
    #开启非抢占式
    nopreempt
    # 绑定网卡
    interface eth0
    # 虚拟路由标示,可以理解为分组
    virtual_router_id 50
    # 优先级(数字越大,权重越大)
    priority 100
    # 监测心跳间隔时间
    advert_int 1
    # 配置认证
    authentication {
    # 认证类型
    auth_type PASS
    # 认证的密码
    auth_pass 1111
    }
    # 设置VIP
    virtual_ipaddress {
    # 虚拟的VIP地址
    192.168.15.200
}
#调用计划的脚本
track_script {
    check_web
            }
}

 

 4.测试

  重启或启动nginx和keepalived

  

 systemctl start nginx

 systemctl start keepalived

 

 

 

 

 

posted @ 2021-11-02 19:53  甜甜de微笑  阅读(223)  评论(0编辑  收藏  举报