实验采用两台centos9 nginx+keepalived 一共两台,进行主备切换
主服务器 192.168.100.105 备用 192.168.100.106 虚拟ip 192.168.100.200
安装
dnf install vim wget curl vim net-tools nginx keepalived
Undefined
nginx 配置需要更改为虚拟ip
server {
listen 80;
listen [::]:80;
server_name 192.168.100.200;
CSS
两台机器均已经配置好监听同ip
keepalived
master配置
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx01 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state MASTER # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface eth0 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 100 # 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.100.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
}
GraphQL
备用服务器配置
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id nginx02 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和主机区分开,不能使用同一个标识
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state BACKUP # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface eth0 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 99 # 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.100.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
}
GraphQL
直接访问192.168.100.200
这里主服务掉线vip后会自动切换到备用服务器上去了
keep宕机后 会自动切换但是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
Bash
keep 里面要加入
vrrp_script chk_nginx { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_nginx.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}