前提条件
需要安装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
|
需要提前查看网卡名称
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
|