实现单主模式的 Nginx 反向代理的高可用

# 在两个keepalived节点都配置nginx反向代理
[root@ka1 ~]# vim /etc/nginx/nginx.conf
http {
    upstream webservers {
        server 192.168.1.51:80 weight=1;
        server 192.168.1.52:80 weight=1;
    }

    server {
        listen       80;
        location / {
            proxy_pass http://webservers/;
        }
    }
}
# 在两个keepalived节点都配置实现nginx反向代理高可用
[root@ka1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from kaadmin@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id ka1
    vrrp_mcast_group4 224.0.100.100
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 1
    weight -30
    fall 3
    rise 5
    timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.55/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    track_script {
        check_nginx
    }
}


[root@ka2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from kaadmin@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id ka2
    vrrp_mcast_group4 224.0.100.100
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 1
    weight -30
    fall 3
    rise 5
    timeout 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 80
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.55/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    track_script {
        check_nginx
    }
}

[root@ka1 ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
/usr/bin/killall -0 nginx || systemctl restart nginx

[root@ka1 ~]# chmod a+x /etc/keepalived/check_nginx.sh
# 两个节点都要配置,利用通知脚本,实现切换时,自动重启服务

[root@ka1 ~]# vim /etc/mail.rc
set from=252409868@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=252409868@qq.com
set smtp-auth-password=zkgjekodlklfbhdf
set smtp-auth=login
set ssl-verify=ignore

[root@ka1 ~]# vim /etc/keepalived/notify.sh
#!/bin/bash
contact='****@189.cn'
notify() {
    mailsubject="$(hostname) to be  $1:vip floating"
    mailbody="$(date +'%F %T'):vrrp transition,$(hostname) change to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}
case $1 in
master)
    notify master
    systemctl start nginx
    ;;
backup)
    notify backup
    systemctl restart nginx
    ;;
fault)
    notify fault
    ;;
*)
    echo "Usage: $(basename $0) {master|backup|fault}"
esac

[root@ka1 ~]# chmod a+x /etc/keepalived/notify.sh

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享