文章目录
17. Nginx 高可用
17.1 Keeplived+Nginx高可用集群(主从模式)
试验场景说明:
1)在两台服务器上分别安装 nginx 和 keepalived
2)本次主要配置 nginx 高可用(主从模式),只考虑 nginx 存活及访问问题
3)实际访问时使用 keepalived 虚拟 IP进行访问
17.1.1 准备测试机器
主机 | ip | 环境 |
---|---|---|
Nginx01 (maste) | 192.168.169.151 | CentOS Linux release 7.9.2009 (Core) keepalived-1.3.5 nginx/1.8.1 |
Nginx02 (back) | 192.168.169.152 | CentOS Linux release 7.9.2009 (Core) keepalived-1.3.5 nginx/1.8.1 |
web | 192.168.169.150 | tomcat |
17.1.2 安装 keepalived
# 分别在两台 nginx 服务器上安装 keepalived
yum -y install keepalived
17.1.3 修改主机(master)配置文件
- 主机配置文件
# 修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
# 注意:这个是 master(主机) 的配置文件
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx01 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
}
vrrp_script chk_nginx { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_nginx.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state MASTER # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface ens33 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 150 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.169.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_nginx
}
notify_master /etc/keepalived/to_master.sh # 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
}
- 主机切换脚本
# 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
#!/bin/bash
sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.152 "nginx -s stop"
nginx
- Nginx 服务检查脚本
#! /bin/bash
# 当 nginx 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 nginx
nginx_server=`ps -C nginx --no-header | wc -l`
if [ $nginx_server -gt 0 ];then
exit 1
else
nginx
fi
17.1.4 修改备机(backup)配置文件
- 备机配置文件
# 注意:这个是 master(备机) 的配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx02 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和主机区分开,不能使用同一个标识
}
vrrp_script chk_nginx { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_nginx.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state BACKUP # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface ens33 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 149 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.169.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_nginx
}
notify_master /etc/keepalived/to_backup.sh # 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
}
- 备机切换脚本
# 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
#!/bin/bash
sshpass -p 0 ssh -o StrictHostKeyChecking=no root@192.168.169.151 "nginx -s stop"
nginx
- Nginx 服务检查脚本
#! /bin/bash
# 当 zabbix server 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 zabbix server
nginx_server=`ps -C nginx --no-header | wc -l`
if [ $nginx_server -gt 0 ];then
exit 1
else
nginx
fi
17.1.5 启动 keepalived
# 启动 keepalived
systemctl start keepalived.service
systemctl enable keepalived.service
# master 查看虚拟 IP 地址
ip a
# backup 查看虚拟 IP 地址,此时 nginx01 是 master 所以 VIP 在 nginx01上
ip a
17.1.6 修改 nginx 配置文件
- 主备机器都添加如下配置
server {
listen 80;
server_name 192.168.169.200; # 这里是使用虚拟 IP 访问
location / {
proxy_pass http://192.168.169.150:8080;
}
}
17.1.7 测试
浏览器访问:192.168.169.200
此时虚拟 IP 是在 master 192.168.169.151 上
将 192.168.169.151 关机测试虚拟 IP 跳转到 192.168.169.152 继续提供服务
浏览器访问:192.168.169.200
此时虚拟 IP 是在 backup192.168.169.152 上
17.2 Keeplived+Nginx 高可用集群(双主模式)