keepalived+VIP 解决nginx单机故障

  1. 原理

    keepalived 可以给指定网卡设置一个额外的虚拟IP,并且这个VIP,会更具keepalived的存活情况选择合适活跃的keepalived节点。
    比如有两台主机,他们上都装有keepalived,他们可以指定一个集群ID,他们都可以给自己所在的节点的某个网课设置同一个虚拟IP。同一时间这个虚拟IP只会映射到一台主机。如果这个 虚拟IP指向的主机所在节点的keepalived挂了,那么别的keepalived节点中的一个就会把这个虚拟IP指向自己的节点。

  2. nginx 安装

    centos7安装nginx:https://www.cnblogs.com/cxygg/p/16949508.html

  3. keepalived安装

    centos7安装keepalived和双活主机配:https://www.cnblogs.com/cxygg/p/18006980

  4. keepalived的配置

    /ect/keepalived/keepalived.conf文件内容(主节点)

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id vm200
    }
    
    
    
    #检查nginx的脚本,这脚本需要定义在调用之间,否者会找不到
    vrrp_script chk_nginx{
         script "/usr/checknginx.sh"       #监控脚本
         interval 2                        #监控脚本检测周期秒
         weight  10
         rise 2                             #表示需要连续成功2次才能认为是成功的
         fall 2                             #表示需要连续失败2次才能认为是失败的
         timeout 2                          #脚本检测超时时间,超过这个时间则认为检测失败
    }
    
    #定义实例
    vrrp_instance VI_101.250 {
        state BACKUP                   //我们想用非抢占式,所有都设置为BACKUP
        interface ens33
        virtual_router_id 166          //路由ID(路由的集群ID,ID相同是一组),主从要一直
        priority 100				  //优先级,主比从高,非抢占模式下,实际是那个先启动就默认用的那个
        advert_int 1
        nopreempt                     //非抢占式
        authentication {              //主从识别认证,参数一样就能通过
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.100.250           //vip
        }
        #指定追踪脚本
        track_script {
            chk_nginx                //检查nginx的 脚本和周期参数
        }
    
    }
    
    

    /ect/keepalived/keepalived.conf文件内容(从节点)

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id vm200
    }
    
    
    
    #检查nginx的脚本,这脚本需要定义在调用之间,否者会找不到
    vrrp_script chk_nginx{
         script "/usr/checknginx.sh"       #监控脚本
         interval 2                        #监控脚本检测周期秒
         weight  10
         rise 2                             #表示需要连续成功2次才能认为是成功的
         fall 2                             #表示需要连续失败2次才能认为是失败的
         timeout 2                          #脚本检测超时时间,超过这个时间则认为检测失败
    }
    
    #定义实例
    vrrp_instance VI_101.250 {
        state BACKUP            //我们想用非抢占式,所有都设置为BACKUP
        interface ens33
        virtual_router_id 166  //路由ID(路由的集群ID,ID相同是一组)
        priority 80 
        advert_int 1
        nopreempt              //非抢占式
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.100.250      //vip
        }
        #指定追踪脚本
        track_script {
            chk_nginx
        }
    
    }
    
  5. 插件nginx是否活着的脚本
    这个脚本里面检查nginx如果死了,尝试启动nginx,如果起不来,就会把当前节点的keepalived杀了,这样就会触发VIP的飘逸,VIP就会指向活着的节点
    /usr/checknginx.sh

    #!/bin/bash
    #检测nginx是否启动了
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then
        systemctl start nginx
        sleep 1
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            systemctl stop keepalived
        elif [ `ps -C keepalived --no-header |wc -l` -eq 0 ];then
            systemctl restart keepalived
        fi
    fi
    
  6. 需要注意的是,如果nginx启动后需要重启keepalived,才能继续保持高可用。

posted on   zhangyukun  阅读(68)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示