共计 2200 个字符,预计需要花费 6 分钟才能阅读完成。
首先准备两台虚拟机
构架方式为
其中没有后端使用两台虚拟机安装 nginx 和 keepalived
master {nginx + keepalived 192.168.110.171} – [vrrp192.168.1.138] – backup{{nginx + keepalived 192.168.110.172}
需要关闭防火墙 selinux
两台服务器安装
yum install -y nginx
yum install -y keepalived
keeplves_master 服务器上的 keepalived.conf 配置
global_defs {
router_id keeplves_master #hostname
}
vrrp_script chk_nginx {
script “/etc/keepalived/check.sh” #检测 nginx 的脚本
interval 5 #每 2 秒检测一次
weight -20 #如果某一个 nginx 宕机 则权重减 20
}
vrrp_instance VI_1 {
state MASTER #状态 MASTER BACKUP
interface ens33 #绑定的网卡
virtual_router_id 51 #虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.110.171 #本机的 IP
priority 90
advert_int 1
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟 IP,两个节点设置必须一样。
virtual_ipaddress {
192.168.1.138
}
# nginx 存活状态检测脚本
track_script {
chk_nginx
}
}
keeplves_backup 服务器上的 keepalived.conf 配置
global_defs {
router_id keeplves_backup #hostname
}
vrrp_script chk_nginx {
script “/etc/keepalived/check.sh” #检测 nginx 的脚本
interval 2 #每 2 秒检测一次
weight -20 #如果某一个 nginx 宕机 则权重减 20
}
vrrp_instance VI_1 {
state BACKUP #状态 MASTER BACKUP
interface ens33 #绑定的网卡
virtual_router_id 51
mcast_src_ip 192.168.1.172
priority 40
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.138
}
track_script {
chk_nginx
}
}
nginx 状态检测脚本简单写法
#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [$A -eq 0];then
systemctl stop nginx #尝试重新启动 nginx
sleep 2 #睡眠 2 秒
if [`ps -C nginx –no-header | wc -l` -eq 0];then
systemctl stop keepalived
#killall keepalived #启动失败,将 keepalived 服务杀死。将 vip 漂移到其它备份节点
fi
fi
遇到的问题
报错信息
May 22 14:43:49 keeplves_master Keepalived_vrrp[42456]: Sending gratuitous ARP on ens33 for 192.168.1.138
May 22 14:43:49 keeplves_master Keepalived_vrrp[42456]: Sending gratuitous ARP on ens33 for 192.168.1.138
May 22 14:43:49 keeplves_master Keepalived_vrrp[42456]: Sending gratuitous ARP on ens33 for 192.168.1.138
☉interval4:每 4s 检测一次,这里要大于监控脚本执行的时间,监控脚本会执行超时,☉keepalived 会发送 SIGTERM 信号结束监控脚本的执行。
启动 nginx keepalived
查看虚拟 IP 是否绑定 192.168.1.138 如果有这个 IP 则绑定成功
2: ens33:
link/ether 00:0c:29:cc:7a:77 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.171/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33
valid_lft 84406sec preferred_lft 84406sec
inet 192.168.1.138/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::279c:6292:4838:c6f6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
停掉 nginx 测试
看是否会把虚拟 IP 主动切换到 backup 上
如果切换到了证明成功
实验结束
不适用于生产环境