抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前提条件

需要安装nginx、tomcat等中间服务。本文使用的是docker下安装的nginx,且需要两台服务器的nginx端口需要一致。

安装keepalived

A、B服务器都安装,麒麟服务器 / CentOS:

sudo yum install -y keepalived 
sudo systemctl enable keepalived

添加服务

sudo systemctl enable keepalived

创建 nginx 检查脚本(仅主节点执行)

本文以麒麟服务器为主节点,这个非关键

cd /etc/keepalived
vi check_nginx.sh

因为是docker安装的nginx,需要用docker ps检测nginx服务是不是活着。

#!/bin/bash

# 定义容器名称或匹配关键字(你可以根据实际容器名称修改)
NGINX_CONTAINER_NAME="nginx"

# 日志路径(可选)
LOG_FILE="/etc/keepalived/log/keepalived-nginx-check.log"

# 检查 docker 是否运行
if ! systemctl is-active --quiet docker; then
echo "$(date) - Docker 服务未运行" >> $LOG_FILE
exit 1
fi

# 检查 nginx 容器是否运行中
if ! docker ps --format '{{.Names}}' | grep -q "$NGINX_CONTAINER_NAME"; then
echo "$(date) - nginx 容器未运行" >> $LOG_FILE
exit 1
fi

# 一切正常
exit 0

授权可执行:

chmod +x /etc/keepalived/check_nginx.sh

Keepalived 配置文件

sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

需要提前查看网卡名称

ip addr show # 查看实际网卡名
vi /etc/keepalived/keepalived.conf

主配置文件

vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
fall 2
rise 1
}

vrrp_instance VI_1 {
state MASTER
interface eth33 # 改为你的实际网卡名,如 ens33、ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.137.203 # 替换为你实际要用的 VIP
}
track_script {
chk_nginx
}
}

从配置文件

vrrp_instance VI_1 {
state BACKUP
interface ens33 # 改为你的实际网卡名
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.137.203 # 与主节点保持一致
}
}

启动keepalived

sudo systemctl start keepalived

测试结果

评论