1. 概述
1.1 为什么要Nginx主从
先看下面一张图,这是普通的Nginx负载均衡实现
如图可见,所有的请求都由Nginx进行分发。当Nginx挂掉之后,也就意味着后面所有tomcat服务都无法请求。
如果能搭建一个备用Nginx,在其中1个Nginx挂掉之后,继续接收并分发请求,就能解决我们的问题了。
1.2 Nginx主从架构
1.3 环境准备
- 需要2台Nginx服务器(这边IP分别为192.168.25.131、192.168.25.135)安装说明查看这里:Linux安装Nginx
- 需要keepalived
- 需要虚拟IP
2. 安装与配置Keepalived
以下步骤在2台Linux上都要执行
使用yum直接安装:
yum install keepalived -y
查看是否安装成功:
rpm -q -a keepalived
修改配置文件,路径: /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 主服务器MASTER,从服务器BACKUP
interface ens33 # 网卡名,通过ifconfig命令查看
virtual_router_id 51 # 主、从服务器的virtual_router_id必须相同
priority 90 # 主、从服务器取不同的优先级,主机值较大,从机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.50 # 虚拟IP地址
}
track_script {
chk_http_port
}
}
从服务器要修改2个地方:
state BACKUP
priority 90
在 /usr/local/src/ 目录下创建nginx_check.sh文件,内容如下:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
echo 'nginx server is died'
killall keepalived
fi
记得给shell文件执行权限:
chmod +x nginx_check.sh
脚本内部使用了killall命令,需要安装psmisc:
yum install psmisc
启动 keepalived 服务:
systemctl start keepalived
3. 验证keepalived
- 给2台服务器分别启动Nginx、Keepalived
- 分别打开Nginx日志
cd /usr/local/nginx/logs
tail -f access.log -n 200
-
打开Keepalived配置的虚拟IP地址 http://192.168.25.50/,正常地打开了Nginx首页,证明虚拟IP有效果
-
多刷新几次页面,发现MASTER日志一直新增记录,而BACKUP的日志没有变化,说明会优先访问MASTER主机。
-
验证主服务器Nginx停止服务后,会不会切换到从服务器Nginx:
# 停止主服务器Nginx
nginx -s stop
# 查看nginx进程是否成功关闭
ps -ef | grep nginx
# 正常情况下,keepalived进程此时也是关闭的,因为我们写了nginx_check脚本
ps -ef | grep keepalived
这时候再访问 http://192.168.25.50/ 地址,发现从服务器的Nginx日志出现了访问记录,说明主从模式配置成功。