nginx入门详解(十)- keepalived高可用
2019-08-19 本文已影响0人
运维朱工
在上一章中,我们主要探讨了nginx的负载均衡,它可以实现后端服务器的一个流量分摊问题,实现高并发。但是如果前端nginx宕机了怎么办呢?
所以这个问题,就是我们今天要探讨的内容。
概念图:
![](https://img.haomeiwen.com/i18782329/85754344536dfac5.jpg)
前端nginx-master(主服务器)挂后,备用服务器nginx-backup可以继续提供服务,如图:
![](https://img.haomeiwen.com/i18782329/2ea62dc402861c19.jpg)
实战:
环境:
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是否正常绑定:
![](https://img.haomeiwen.com/i18782329/38aa4f480ffc38a4.jpg)
现在关掉master端的nginx服务,看vip是否正常漂移:
![](https://img.haomeiwen.com/i18782329/6558cb676d131f05.jpg)
在backup端查看vip,可以看到已经绑定成功!:
![](https://img.haomeiwen.com/i18782329/45043593d177d6b0.jpg)
五、vip正常绑定和漂移,现在验证负载均衡能否正常实现:
在master访问1.200的80端口:
![](https://img.haomeiwen.com/i18782329/e1068cad920c20f8.jpg)
能正常访问!现在在将master启动,把vip抢回来(默认是抢占模式)
![](https://img.haomeiwen.com/i18782329/ea58f964bd1edfca.jpg)
nginx的高可用就说到这,keepalived配置还有很多地方没有说到,后面慢慢说。
获取文章更新,以及常用软件,可以关注公众号: 笨办法学linux
![](https://img.haomeiwen.com/i18782329/bfb6bca6c456b3f6.jpg)