javaWeb学习nginx…运维…json…mall…springcloud…其他

nginx入门详解(十)- keepalived高可用

2019-08-19  本文已影响0人  运维朱工

在上一章中,我们主要探讨了nginx的负载均衡,它可以实现后端服务器的一个流量分摊问题,实现高并发。但是如果前端nginx宕机了怎么办呢?
所以这个问题,就是我们今天要探讨的内容。

概念图:

image

前端nginx-master(主服务器)挂后,备用服务器nginx-backup可以继续提供服务,如图:

image

实战:

环境:

centos 7.4

前端:
master: 192.168.1.4
backup: 192.168.1.5

后端服务:
A: 192.168.1.6
B: 192.168.1.7

一、master和backup两台服务器均安装上keepalived和nginx服务:

yum install keepalived nginx -y

master端配置keepalived:

cp /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 global_defs {
  notification_email {
      root@localhost
 }
    notification_email_from lutixia@163.com
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
 }
vrrp_script check_nginx {
    script "/data/sh/check_nginx.sh"
    interval 2
    #weight  -20
    #因为脚本中设置为keepalived会随着nginx服务的关闭而关闭,所以权重不设置也可以。
    #如果想让权重生效,脚本中不应该直接杀掉keepalived服务,而是设置退出状态为非0,一旦检测nginx服务退出,则减20
 }

# VIP1
vrrp_instance VI_1 {
     state MASTER
     interface ens32
     virtual_router_id 51
     priority 90
     advert_int 5
     authentication {
         auth_type  PASS
         auth_pass  1111
     }
     virtual_ipaddress {
        192.168.1.200/24  label ens32:0
     }
     track_script {
        check_nginx
    }
}

backup端配置:

cp /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 global_defs {
  notification_email {
      root@localhost
 }
    notification_email_from lutixia@163.com
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
 }
vrrp_script check_nginx {
    script "/data/sh/check_nginx.sh"
    interval 2
    # weight  -20
 }

# VIP1
vrrp_instance VI_1 {
     state BACKUP
     interface ens32
     virtual_router_id 51
     priority 80
     advert_int 5
     authentication {
         auth_type  PASS
         auth_pass  1111
     }
     virtual_ipaddress {
        192.168.1.200/24  label ens32:0
     }
     track_script {
        check_nginx
    }
}

二、master和backup两台服务器均在指定目录配置好检测脚本:

mkdir -p /data/sh
vim /data/sh/check_nginx.sh

#!/bin/bash
#by lutixia
##############

killall -0  nginx

if [ $? -ne 0 ];then
        systemctl stop keepalived
fi

三、master和backup两台服务器均配置好负载均衡:

#在http指令块添加upstream:
upstream web {
        server 192.168.1.6   max_fails=3 fail_timeout=9s;
        server 192.168.1.7   max_fails=3 fail_timeout=9s;
        }
#在server指令块添加proxy相关指令:        
server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://web;
            proxy_next_upstream  error http_404 http_502;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
}

四、master和backup端均启动nginx与keepalived服务,检查vip是否正常:

systemctl start nginx && systemctl start keepalived

在master端看到vip是否正常绑定:

image

现在关掉master端的nginx服务,看vip是否正常漂移:

image

backup端查看vip,可以看到已经绑定成功!:

image

五、vip正常绑定和漂移,现在验证负载均衡能否正常实现:

在master访问1.200的80端口:

image

能正常访问!现在在将master启动,把vip抢回来(默认是抢占模式

image

nginx的高可用就说到这,keepalived配置还有很多地方没有说到,后面慢慢说。

获取文章更新,以及常用软件,可以关注公众号: 笨办法学linux

image
上一篇 下一篇

猜你喜欢

热点阅读