keepalive+nginx

 

没有了 lvs 做ip的负载均衡

master:

global_defs {
    router_id op_esb_61_vip #MASTER和BACKUP不同
    vrrp_mcast_group4 224.0.0.24 #指定vrrp的多播ipv4地址,默认是224.0.0.18
}

vrrp_script chk_nginx {
    script "/opt/shell/check.sh"    ##检查本地nginx是否存活脚本需要自己写,后面会有该脚本内容
    interval 1
    weight -15
}

vrrp_instance nginx_01 {  #  实例,一个vip一个实例
    state MASTER #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
    interface ens192
    virtual_router_id 27  #虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的
    priority 100  #优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高
    advert_int 1  #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒     #健康检测频率

    authentication {
        auth_type PASS
        auth_pass caVrLF8C
    }

    virtual_ipaddress {
        10.32.62.27    ##VIP
    }

    track_script {
        chk_nginx
    }
        
    notify_master "/opt/shell/notify.sh master"
    notify_backup "/opt/shell/notify.sh backup"
    notify_fault "/opt/shell/notify.sh fault"
}

 

slave:

global_defs {
    router_id op_esb_62_vip #MASTER和BACKUP不同
    vrrp_mcast_group4 224.0.0.24 #指定vrrp的多播ipv4地址,默认是224.0.0.18
}

vrrp_script chk_nginx {
    script "/opt/shell/check.sh"
    interval 1
    weight -15
}

vrrp_instance nginx_01 {  #  实例,一个vip一个实例
    state BACUP #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
    interface ens192
    virtual_router_id 27  #虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的
    priority 90  #优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高
    advert_int 1  #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒     #健康检测频率

    authentication {
        auth_type PASS
        auth_pass caVrLF8C
    }

    virtual_ipaddress {
        10.32.62.27     ##VIP
    }

    track_script {
        chk_nginx
    }
        
    notify_master "/opt/shell/notify.sh master"
    notify_backup "/opt/shell/notify.sh backup"
    notify_fault "/opt/shell/notify.sh fault"
}

 

shell脚本:

check.sh

#!/bin/bash
nginxpid=`ps -C nginx --no-header|wc -l`
if [ $nginxpid -eq 0 ];then
   /usr/local/nginx/sbin/nginx -s start
   sleep 2
   nginxpid=`ps -C nginx --no-header|wc -l`
   if [ $nginxpid -eq 0 ];then
       systemctl stop keepalived
       exit 1
   fi
fi

 

notify.sh
#!/bin/bash
# 通知脚本:具体操作
if [ "$1" == "master" ] ; then
echo "`date '+%F %T'`:切换到主机模式" >> /var/log/keepalived/keepalived.log
elif [ "$1" == "backup" ] ; then
/usr/bin/systemctl start nginx
echo "`date '+%F %T'`:切换到备机模式" >> /var/log/keepalived/keepalived.log
else
/usr/bin/systemctl start nginx
echo "`date '+%F %T'`:宕机" >> /var/log/keepalived/keepalived.log
fi

 

posted @ 2020-11-18 17:33  扶我起来写代码  阅读(462)  评论(0)    收藏  举报