keepalived实现nginx反向代理的高可用

核能气质少年 提交于 2020-02-14 01:48:37

文章目录

在这里插入图片描述
httpd1、httpd2 准备网站数据

httpd1

yum install httpd -y
echo 192.168.43.27 > /var/www/html/index.html
systemctl start httpd

httpd2

yum install httpd -y
echo 192.168.43.37 > /var/www/html/index.html
systemctl start httpd

keepalived的配置

keepalived1、keepalived2

yum install keepalived -y
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keepalived1    // keepalived2
}
vrrp_script check_ngx {
    script "/etc/keepalived/check_ngx.sh"
    interval 1
    weight -30
}
vrrp_instance VI_1 {
    state MASTER    // BACKUP
    interface ens33
    virtual_router_id 66
    priority 100   // 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
      }
    virtual_ipaddress {
        192.168.43.100/24 dev ens33 label ens33:1
    }
    track_script {
        check_ngx
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

写一个脚本 check_ngx.sh实现监控nginx的服务,只要服务程序没有启动就返回 1,触发 keepalived的优先级由原来的值减去30,每1秒钟执行一次

vim /etc/keepalived/check_ngx.sh
#!/bin/bash
#
killall -0 nginx &> /dev/null || exit 1

通知脚本 notify.sh
只要角色改变就发邮件,角色变为了 backup,就重新启动 nignx

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

nginx proxy 反向代理的配置

keepalived1、keepalived2

// 放在 http 语句块中
upstream websrvs {
	server 192.168.43.27:80;
	server 192.168.43.37:80;
}
location / {
	proxy_pass http://websrvs;
}

客户端测试

client

while :;do curl 192.168.43.100;sleep 1;done
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!