docker-compose.yaml文件内容如下
keepalived:
image: openeuler/keepalived:latest
container_name: keepalived
restart: always
network_mode: host
cap_add:
- NET_ADMIN # 需要网络管理权限
- NET_BROADCAST
- NET_RAW
volumes:
- /data/docker/keepalived/conf:/etc/keepalived
command: keepalived -f /etc/keepalived/keepalived.conf --dont-fork --log-console --log-detail
keepalived.conf 配置文件如下
vrrp_script chk_nginx {
script "/etc/keepalived/check.sh" # Nginx检测脚本路径
interval 2 # 检测间隔(秒)
weight -20 # 检测失败时优先级降低20
fall 2 # 连续2次失败才切换状态
rise 1 # 1次成功即恢复状态
}
vrrp_instance VI_1 {
state BACKUP # 初始状态,主节点设为 MASTER,备节点设为BACKUP
interface enp125s0f0 # 网卡名,可通过 ip a 命令查看实际网卡
virtual_router_id 51 # 路由 ID,取值 0 - 255,主备节点需相同
priority 90 # 优先级,主节点数值要高于备节点
advert_int 1 # 心跳间隔,单位为秒
authentication {
auth_type PASS # 认证类型,采用密码认证
auth_pass Maxvision # 主备节点需设置相同密码
}
track_script {
chk_nginx # 关联Nginx检测脚本
}
virtual_ipaddress {
172.16.2.16/24 # VIP(虚拟 IP ),子网掩码与物理 IP 保持一致
}
}
check.sh脚本如下
#!/bin/bash
# Nginx健康检查脚本
# 请求检查
if ! curl -s --head --request GET http://127.0.0.1:8085/ | grep "200 OK" > /dev/null; then
exit 1 # 无法访问,返回失败
fi
exit 0 # 一切正常
评论区