LVS+Keepalived+Nginx+Tomcat 高可用集群超详细配置手册

一、前置基础准备(必做,含 Keepalived/ipvsadm 安装)

1. 系统环境初始化(所有节点执行)

(1)关闭防火墙 & SELinux(避免拦截心跳 / 请求)
复制代码
# 临时关闭防火墙
systemctl stop firewalld
# 永久关闭防火墙
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(重启生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证关闭结果
getenforce  # 输出Permissive即临时生效,重启后为Disabled
systemctl status firewalld  # 输出inactive即关闭成功
(2)配置主机名 & Hosts 解析(避免域名解析问题)
复制代码
# LVS主节点(192.168.1.100)设置主机名
hostnamectl set-hostname lvs-master
# LVS备节点(192.168.1.101)设置主机名
hostnamectl set-hostname lvs-backup
# Web节点1(192.168.1.102)设置主机名
hostnamectl set-hostname web01
# Web节点2(192.168.1.103)设置主机名
hostnamectl set-hostname web02

# 所有节点配置hosts解析(统一执行)
cat >> /etc/hosts << EOF
192.168.1.100 lvs-master
192.168.1.101 lvs-backup
192.168.1.102 web01
192.168.1.103 web02
192.168.1.200 lvs-vip  # 集群VIP,便于识别
EOF

# 验证hosts配置
ping -c 2 lvs-vip  # 主节点正常时可通,备节点故障切换后可通

2. 安装 Keepalived&ipvsadm(仅 LVS 主备节点执行)

复制代码
# 安装依赖包(确保安装源正常)
yum install -y epel-release  # 若无epel源,先安装
yum clean all && yum makecache  # 清理缓存,更新源

# 安装keepalived和ipvsadm
yum install -y keepalived ipvsadm

# 验证安装结果
rpm -qa keepalived ipvsadm  # 输出对应包名即安装成功
systemctl list-unit-files | grep keepalived  # 确认服务可管理
ipvsadm -V  # 输出版本号即ipvsadm安装成功

二、DR 模式核心:Web 节点 lo 接口 + ARP 抑制超详细配置

核心说明

Web 节点(web01/web02) 需要配置,LVS 主备节点绝对禁止配置 lo 接口(会导致 VIP 冲突);lo 接口的核心作用是让 Web 节点识别 LVS 转发的、目标 IP 为 VIP 的数据包,ARP 抑制避免 Web 节点对外暴露 VIP。

1. lo 接口绑定 VIP(两种配置方式,均详细)

方式 1:临时配置(立即生效,重启失效,适合测试)
复制代码
# 步骤1:查看lo接口初始状态(确认无VIP)
ip addr show lo

# 步骤2:绑定VIP到lo:0子接口(子网掩码必须为255.255.255.255,主机路由)
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 up
# 解释:lo:0是lo接口的子接口,netmask用32位掩码避免与其他网段冲突

# 步骤3:添加静态路由(确保响应包源IP为VIP,必加)
route add -host 192.168.1.200 dev lo:0
# 解释:强制所有目标为VIP的数据包走lo:0接口,避免响应包源IP错误

# 步骤4:验证临时配置
ip addr show lo:0  # 输出应包含"inet 192.168.1.200/32 scope host lo:0"
route -n | grep 192.168.1.200  # 输出应包含"192.168.1.200 0.0.0.0 255.255.255.255 UH 0 0 0 lo"
方式 2:永久配置(重启不失效,生产必用)
复制代码
# 步骤1:备份原有lo接口配置(避免误操作)
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo.bak

# 步骤2:创建lo:0子接口配置文件(无则新建)
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 << EOF
TYPE=Loopback  # 接口类型为回环
BOOTPROTO=static  # 静态IP
DEVICE=lo:0  # 子接口名
IPADDR=192.168.1.200  # 集群VIP
NETMASK=255.255.255.255  # 32位掩码,必须
ONBOOT=yes  # 开机自启
NAME=lo:0  # 接口名
NETWORK=127.0.0.0  # 回环网段
NOZEROCONF=yes  # 禁用零配置
EOF

# 步骤3:配置静态路由永久生效(写入rc.local)
echo "route add -host 192.168.1.200 dev lo:0" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local  # 赋予执行权限,确保开机执行

# 步骤4:重启网络服务生效
systemctl restart network
# 注意:CentOS8+用nmcli重启:nmcli connection reload && nmcli device reapply lo

# 步骤5:验证永久配置
ip addr show lo:0  # 确认VIP绑定
route -n | grep 192.168.1.200  # 确认路由存在
reboot  # 重启后再次验证,配置仍生效

2. ARP 抑制配置(永久生效,生产必用)

复制代码
# 步骤1:备份原有sysctl.conf(避免误操作)
cp /etc/sysctl.conf /etc/sysctl.conf.bak

# 步骤2:添加ARP抑制参数(核心解释见注释)
cat >> /etc/sysctl.conf << EOF
# ARP抑制核心参数:避免Web节点对外暴露VIP
# arp_ignore=1:仅响应目标IP为本机网卡(含lo)的ARP请求,拒绝其他ARP请求
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
# arp_announce=2:对外发送ARP包时,优先使用网卡自身IP作为源IP,不暴露lo接口的VIP
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
EOF

# 步骤3:立即加载参数(无需重启)
sysctl -p

# 步骤4:验证ARP参数(输出均为1/2即生效)
sysctl -a | grep -E "arp_ignore|arp_announce" | grep -E "all|lo|default"

三、配置方式 1:手动 ipvsadm + Keepalived(生产推荐,灵活可控)

核心逻辑

Keepalived 仅负责 LVS 主备高可用(VIP 漂移 + 健康检查),LVS 负载规则完全通过 ipvsadm 手动配置,规则调整无需重启 Keepalived,适合生产环境。

(一)LVS 主节点(lvs-master)配置

1. Keepalived 配置文件(/etc/keepalived/keepalived.conf)
复制代码
# 步骤1:备份原有配置(避免覆盖)
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# 步骤2:编写主节点配置(逐行注释,便于理解)
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived
# 全局配置段:集群通用参数
global_defs {
    router_id LVS_MASTER  # 节点唯一标识,备节点改为LVS_BACKUP
    vrrp_skip_check_adv_addr  # 跳过重复的VRRP地址检查,优化性能
    vrrp_strict  # 严格模式:禁止非法VRRP包、禁止VIP跨网段,提升安全性
    vrrp_garp_interval 0  # 关闭GARP广播,避免网络拥塞
    vrrp_gna_interval 0  # 关闭GNA广播,优化性能
}

# 健康检查脚本配置段:监控后端Web节点可用性
vrrp_script chk_web_nodes {
    script "/etc/keepalived/chk_web_nodes.sh"  # 脚本路径
    interval 2  # 检查间隔:2秒一次,平衡实时性和性能
    weight -30  # 检查失败时,节点优先级减30(确保备节点优先级更高)
    fall 3      # 连续3次失败,判定为节点故障
    rise 2      # 连续2次成功,恢复节点状态
}

# VRRP实例配置段:主备切换核心配置
vrrp_instance VI_1 {
    state MASTER  # 节点角色:主节点(备节点改为BACKUP)
    interface eth0  # 绑定VIP的物理网卡(按实际修改,如ens33/ens192)
    virtual_router_id 51  # VRRP路由ID:主备必须一致(0-255),避免与其他集群冲突
    priority 120  # 节点优先级:主节点高于备节点(备节点设为90,差值≥20)
    advert_int 1  # 心跳间隔:1秒发送一次心跳包,快速检测故障
    # 认证配置:主备必须一致,防止非法节点加入
    authentication {
        auth_type PASS  # 认证类型:密码认证(简单高效)
        auth_pass 888888  # 认证密码:建议8位以上,主备一致
    }
    nopreempt  # 非抢占模式:主节点恢复后不主动抢占VIP,避免业务闪断(生产必开)
    # 关联健康检查脚本:监控后端Web节点
    track_script {
        chk_web_nodes
    }
    # VIP配置段:对外提供服务的虚拟IP
    virtual_ipaddress {
        192.168.1.200/24 dev eth0 label eth0:vip  # VIP绑定到物理网卡子接口
    }
}
EOF

# 步骤3:验证配置文件语法(无报错即正常)
keepalived -t -f /etc/keepalived/keepalived.conf
2. 健康检查脚本(/etc/keepalived/chk_web_nodes.sh)
复制代码
# 步骤1:创建脚本文件
cat > /etc/keepalived/chk_web_nodes.sh << EOF
#!/bin/bash
# 脚本功能:检查后端至少1个Web节点存活,避免全节点故障
# 日志路径:便于排查问题
LOG_FILE="/var/log/keepalived_chk_web.log"
DATE=\$(date +"%Y-%m-%d %H:%M:%S")

# 函数:写入日志
log() {
    echo "[\$DATE] \$1" >> \$LOG_FILE
}

# 步骤1:检查ipvsadm服务是否运行(LVS核心依赖)
if ! ps -ef | grep ipvsadm | grep -v grep > /dev/null; then
    log "ERROR: ipvsadm服务未运行,尝试重启"
    systemctl start ipvsadm
    sleep 2
    # 重启失败则返回1,触发优先级降低
    if ! ps -ef | grep ipvsadm | grep -v grep > /dev/null; then
        log "ERROR: ipvsadm重启失败,触发主备切换"
        exit 1
    fi
fi

# 步骤2:检查后端Web节点存活数(ACTIVE状态)
WEB_ALIVE_COUNT=\$(ipvsadm -Ln | grep "192.168.1.10[2-3]:80" | grep "ACTIVE" | wc -l)
if [ \$WEB_ALIVE_COUNT -eq 0 ]; then
    log "ERROR: 所有后端Web节点均不可用"
    exit 1
fi

# 所有检查通过
log "INFO: 后端存活Web节点数:\$WEB_ALIVE_COUNT,检查通过"
exit 0
EOF

# 步骤2:赋予脚本执行权限
chmod +x /etc/keepalived/chk_web_nodes.sh

# 步骤3:创建日志文件(避免权限问题)
touch /var/log/keepalived_chk_web.log
chmod 644 /var/log/keepalived_chk_web.log
3. 手动配置 ipvsadm 规则(LVS 负载核心)
复制代码
# 步骤1:清空旧规则(初始化,避免旧配置干扰)
ipvsadm -C

# 步骤2:添加VIP虚拟服务(四层负载入口)
# -A:添加虚拟服务;-t:TCP协议;-s wrr:加权轮询算法(按权重分发)
ipvsadm -A -t 192.168.1.200:80 -s wrr

# 步骤3:配置超时参数(生产标准值,优化连接复用)
# --set 30 120 300:TCP连接超时30s,TCPFIN超时120s,UDP超时300s
ipvsadm --set 30 120 300

# 步骤4:添加后端Web节点(DR模式)
# -a:添加真实服务器;-r:后端节点IP:端口;-g:DR模式(生产首选);-w:权重
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.102:80 -g -w 2  # web01,权重2(优先分发)
ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.103:80 -g -w 1  # web02,权重1

# 步骤5:查看配置的规则(验证)
ipvsadm -Ln
# 预期输出:包含VIP 192.168.1.200:80,后端节点102/103:80,算法WRR,模式DR

# 步骤6:规则持久化(生产必需,重启不丢失)
# -S:保存规则;输出到/etc/sysconfig/ipvsadm(ipvsadm默认加载路径)
ipvsadm -S > /etc/sysconfig/ipvsadm

# 步骤7:设置ipvsadm开机自启(自动加载规则)
systemctl enable ipvsadm
4. 启动并验证 Keepalived+ipvsadm
复制代码
# 步骤1:启动服务
systemctl start keepalived ipvsadm
# 步骤2:设置开机自启
systemctl enable keepalived ipvsadm

# 步骤3:验证服务状态(均为active(running)即正常)
systemctl status keepalived
systemctl status ipvsadm

# 步骤4:验证VIP绑定(主节点应显示eth0:vip的VIP)
ip addr show eth0 | grep 192.168.1.200

# 步骤5:验证LVS规则(与手动配置一致)
ipvsadm -Ln

(二)LVS 备节点(lvs-backup)配置

1. 同步主节点配置(简化操作)
复制代码
# 步骤1:同步Keepalived配置文件
scp lvs-master:/etc/keepalived/keepalived.conf /etc/keepalived/
# 步骤2:同步健康检查脚本
scp lvs-master:/etc/keepalived/chk_web_nodes.sh /etc/keepalived/
# 步骤3:同步ipvsadm规则文件(避免手动配置)
scp lvs-master:/etc/sysconfig/ipvsadm /etc/sysconfig/

# 步骤4:修改Keepalived配置(仅3处,其余不变)
sed -i 's/router_id LVS_MASTER/router_id LVS_BACKUP/' /etc/keepalived/keepalived.conf
sed -i 's/state MASTER/state BACKUP/' /etc/keepalived/keepalived.conf
sed -i 's/priority 120/priority 90/' /etc/keepalived/keepalived.conf

# 步骤5:赋予脚本执行权限,创建日志文件
chmod +x /etc/keepalived/chk_web_nodes.sh
touch /var/log/keepalived_chk_web.log
chmod 644 /var/log/keepalived_chk_web.log

# 步骤6:启动服务并设置开机自启
systemctl start keepalived ipvsadm
systemctl enable keepalived ipvsadm

# 步骤7:验证备节点状态(无VIP,服务运行正常)
ip addr show eth0 | grep 192.168.1.200  # 无输出即正常
systemctl status keepalived  # active(running)

(三)Web 节点(web01/web02)配置(仅 Nginx/Tomcat 配置)

1. Nginx 核心配置(/usr/local/nginx/conf/nginx.conf)
复制代码
# 步骤1:备份原有配置
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

# 步骤2:编写Nginx配置(核心转发+健康检查)
cat > /usr/local/nginx/conf/nginx.conf << EOF
user root;  # 生产建议用nginx用户,测试用root
worker_processes auto;  # 自动匹配CPU核心数
error_log /usr/local/nginx/logs/error.log warn;
pid /usr/local/nginx/logs/nginx.pid;

events {
    worker_connections 10240;  # 单进程最大连接数,优化高并发
    use epoll;  # 高效IO模型,Linux推荐
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    # 日志格式:保留客户端IP,便于排查
    log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
                      '\$status \$body_bytes_sent "\$http_referer" '
                      '"\$http_user_agent" "\$http_x_forwarded_for"';
    access_log  /usr/local/nginx/logs/access.log  main;

    sendfile        on;  # 开启零拷贝,提升性能
    tcp_nopush      on;  # 合并数据包发送,减少网络IO
    tcp_nodelay     on;  # 实时发送小数据包,降低延迟
    keepalive_timeout  65;  # 长连接超时时间

    # 1. 定义Tomcat集群(转发规则)
    upstream tomcat_cluster {
        server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s;
        # 多Tomcat节点追加格式:server 192.168.1.104:8080 weight=1 max_fails=3 fail_timeout=30s;
        ip_hash;  # 可选:会话保持,确保同一用户请求到同一Tomcat(按业务需求)
        keepalive 32;  # 长连接复用,减少连接建立开销
    }

    # 2. 核心Server配置
    server {
        listen       80;
        server_name  localhost;  # 生产建议配置域名,如www.xxx.com

        # 静态资源缓存(减轻Tomcat压力,生产必配)
        location ~ .*\.(jpg|jpeg|gif|png|css|js|ico|woff|woff2)$ {
            root /usr/local/nginx/html/static;  # 静态资源目录(需提前创建)
            expires 7d;  # 浏览器缓存7天
            add_header Cache-Control "public, max-age=604800";  # 缓存控制头
            add_header Access-Control-Allow-Origin *;  # 跨域(可选)
        }

        # 3. 动态请求转发到Tomcat
        location / {
            proxy_pass http://tomcat_cluster;  # 转发到Tomcat集群
            # 保留客户端真实IP和Host(生产必配)
            proxy_set_header Host \$host:\$server_port;
            proxy_set_header X-Real-IP \$remote_addr;
            proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto \$scheme;
            # 超时配置(避免连接泄露)
            proxy_connect_timeout 60s;  # 连接超时
            proxy_read_timeout 120s;    # 读取超时
            proxy_send_timeout 60s;     # 发送超时
            # 缓冲区配置(优化大请求)
            proxy_buffer_size 16k;
            proxy_buffers 4 64k;
        }

        # 4. 健康检查接口(供Keepalived调用)
        location /health {
            access_log off;  # 关闭健康检查日志,减少IO
            return 200 "OK";  # 正常返回200
        }

        # 5. 错误页面配置(可选)
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/local/nginx/html;
        }
    }
}
EOF

# 步骤3:创建静态资源目录(避免404)
mkdir -p /usr/local/nginx/html/static
# 步骤4:验证Nginx配置语法
/usr/local/nginx/sbin/nginx -t
# 步骤5:重启Nginx生效
/usr/local/nginx/sbin/nginx -s reload
2. Tomcat 核心配置(/usr/local/tomcat/conf/server.xml)
复制代码
# 步骤1:备份原有配置
cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml.bak

# 步骤2:修改server.xml(优化线程池+连接器)
sed -i '/<Service name="Catalina">/a \    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" maxIdleTime="60000"/>' /usr/local/tomcat/conf/server.xml
sed -i 's/<Connector port="8080" protocol="HTTP\/1.1"/<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP\/1.1"/' /usr/local/tomcat/conf/server.xml

# 核心参数解释:
# maxThreads=500:最大线程数,应对高并发
# minSpareThreads=50:最小空闲线程数,避免频繁创建线程
# maxIdleTime=60000:线程最大空闲时间(60秒),释放空闲线程

# 步骤3:重启Tomcat生效
/usr/local/tomcat/bin/shutdown.sh
sleep 5
/usr/local/tomcat/bin/startup.sh

# 步骤4:验证Tomcat启动(端口8080监听)
netstat -an | grep 8080 | grep LISTEN

四、配置方式 2:纯 Keepalived 配置(学习 / 测试推荐,简化操作)

核心逻辑

无需手动执行任何 ipvsadm 命令,Keepalived 配置文件中直接内置 LVS 负载规则,启动后自动调用 ipvsadm 下发规则,适合测试 / 快速部署。

(一)LVS 主节点(lvs-master)配置修改

仅需在原有 Keepalived 配置文件中追加 LVS 规则段,其余配置(全局段、VRRP 实例基础段、健康检查脚本)与方式 1 完全一致。

复制代码
# 步骤1:编辑Keepalived配置文件
vi /etc/keepalived/keepalived.conf

# 步骤2:在vrrp_instance VI_1段末尾追加以下内容(LVS规则)
    virtual_server 192.168.1.200 80 {
        delay_loop 3  # 健康检查间隔:3秒
        lb_algo wrr  # 负载算法:加权轮询
        lb_kind DR  # 负载模式:DR模式(生产首选)
        persistence_timeout 60  # 会话保持:60秒(按业务调整)
        persistence_granularity 255.255.255.0  # 会话保持粒度:按网段
        protocol TCP  # 协议:TCP

        # 后端Web节点1(web01)
        real_server 192.168.1.102 80 {
            weight 2  # 权重:2
            # HTTP_GET健康检查(比TCP_CHECK更严谨,检查应用层)
            HTTP_GET {
                url {
                    path /health  # 健康检查接口
                    status_code 200  # 正常返回码
                }
                connect_timeout 3  # 连接超时:3秒
                nb_get_retry 2  # 重试次数:2次
                delay_before_retry 2  # 重试间隔:2秒
            }
        }

        # 后端Web节点2(web02)
        real_server 192.168.1.103 80 {
            weight 1  # 权重:1
            HTTP_GET {
                url {
                    path /health
                    status_code 200
                }
                connect_timeout 3
                nb_get_retry 2
                delay_before_retry 2
            }
        }
    }

# 步骤3:验证配置语法
keepalived -t -f /etc/keepalived/keepalived.conf

# 步骤4:重启Keepalived(自动生成ipvsadm规则)
systemctl restart keepalived

# 步骤5:验证自动生成的LVS规则(与手动配置一致)
ipvsadm -Ln

(二)LVS 备节点配置

同步主节点修改后的 Keepalived 配置文件,仅修改 router_id、state、priority 三个参数,其余完全一致,启动服务即可。

(三)Web 节点配置

与 "方式 1" 的 Web 节点配置完全一致(lo 接口 + ARP 抑制 + Nginx/Tomcat 配置),无需修改。

五、关键注意事项(生产避坑核心)

1. lo 接口配置注意

  • 仅 Web 节点配置,LVS 主备节点禁止配置 lo 接口,否则会导致 VIP 冲突,集群瘫痪;
  • lo 接口 VIP 的子网掩码必须为255.255.255.255(32 位),不可用 24 位掩码(如 255.255.255.0);
  • 静态路由route add -host 192.168.1.200 dev lo:0必须配置,否则 Web 节点响应包源 IP 错误,用户无法接收;
  • 重启网络服务后,需重新验证 lo 接口和路由,确保配置未丢失。

2. Keepalived 配置注意

  • 主备节点virtual_router_idauth_pass必须完全一致,否则心跳通信失败,无法主备切换;
  • 优先级差值≥20(如主 120,备 90),确保备节点能优先接管 VIP;
  • nopreempt(非抢占模式)必须开启,避免主节点恢复后抢占 VIP,导致业务闪断;
  • 物理网卡名(interface)需与实际一致(通过ip addr查看),常见为 eth0/ens33/ens192,配置错误会导致 VIP 绑定失败。

3. ipvsadm 配置注意

  • 手动配置规则后,必须执行ipvsadm -S > /etc/sysconfig/ipvsadm持久化,否则服务器重启后规则丢失;
  • DR 模式必须用-g参数,NAT 模式用-m,TUN 模式用-i,不可混淆;
  • 权重配置需根据 Web 节点性能调整(如高性能节点权重高),避免负载不均。

4. 高可用避坑(脑裂问题)

  • 脑裂原因:防火墙拦截 VRRP 协议、心跳线故障、主备节点时间不一致;
  • 预防措施:
    1. 放行 VRRP 协议:iptables -A INPUT -p vrrp -j ACCEPT(若开启防火墙);
    2. 配置双心跳线(物理网卡 + 虚拟网卡);
    3. 同步主备节点时间:ntpdate ntp.aliyun.com
    4. 配置仲裁节点(第三方服务器监控主备状态)。

六、新增节点扩容(生产常用操作)

1. 新增 Web 节点(横向扩展,最常用)

步骤 1:新 Web 节点基础配置
  • 执行 "二、DR 模式核心:Web 节点 lo 接口 + ARP 抑制超详细配置" 的所有步骤;
  • 配置 Nginx/Tomcat(与现有 Web 节点一致)。
步骤 2:LVS 主节点添加规则
方式 1:手动 ipvsadm(生产)
复制代码
# 添加新节点到LVS规则
ipvsadm -a -t 192.168.1.200:80 -r 新Web节点IP:80 -g -w 1
# 规则持久化
ipvsadm -S > /etc/sysconfig/ipvsadm
# 同步到备节点
scp /etc/sysconfig/ipvsadm lvs-backup:/etc/sysconfig/ipvsadm
# 备节点重启ipvsadm(可选,自动同步)
ssh lvs-backup "systemctl restart ipvsadm"
方式 2:纯 Keepalived(测试)
复制代码
# 编辑LVS主节点Keepalived配置
vi /etc/keepalived/keepalived.conf
# 在virtual_server段末尾追加新节点配置
real_server 新Web节点IP 80 {
    weight 1
    HTTP_GET {
        url { path /health; status_code 200 }
        connect_timeout 3; nb_get_retry 2; delay_before_retry 2
    }
}
# 验证配置并重启
keepalived -t -f /etc/keepalived/keepalived.conf
systemctl restart keepalived
# 同步到备节点并重启
scp /etc/keepalived/keepalived.conf lvs-backup:/etc/keepalived/
ssh lvs-backup "systemctl restart keepalived"
步骤 3:验证新增节点
复制代码
# 查看LVS规则(包含新节点)
ipvsadm -Ln
# 测试负载分发(多次访问VIP,新节点应参与分发)
curl 192.168.1.200

2. 新增 LVS 备节点(增强高可用)

步骤 1:基础配置
  • 执行 "一、前置基础准备" 的所有步骤(关闭防火墙、配置 hosts、安装 Keepalived/ipvsadm);
步骤 2:同步主节点配置
复制代码
# 同步Keepalived配置
scp lvs-master:/etc/keepalived/keepalived.conf /etc/keepalived/
# 同步健康检查脚本
scp lvs-master:/etc/keepalived/chk_web_nodes.sh /etc/keepalived/
# 同步ipvsadm规则文件(手动配置方式)
scp lvs-master:/etc/sysconfig/ipvsadm /etc/sysconfig/
步骤 3:修改配置文件
复制代码
sed -i 's/router_id LVS_MASTER/router_id LVS_BACKUP_02/' /etc/keepalived/keepalived.conf
sed -i 's/state MASTER/state BACKUP/' /etc/keepalived/keepalived.conf
sed -i 's/priority 120/priority 80/' /etc/keepalived/keepalived.conf  # 优先级低于现有备节点
步骤 4:启动服务并验证
复制代码
systemctl start keepalived ipvsadm
systemctl enable keepalived ipvsadm
# 验证服务状态
systemctl status keepalived
# 验证无VIP(正常,主节点故障时接管)
ip addr show eth0 | grep 192.168.1.200

七、核心验证命令(快速排查问题)

命令 作用 预期输出 / 判断标准
ip addr show lo:0(Web 节点) 验证 lo 接口 VIP 绑定 包含inet 192.168.1.200/32 scope host lo:0
`sysctl -a grep arp_ignore`(Web 节点) 验证 ARP 抑制参数 输出all/lo/default的 arp_ignore=1
ipvsadm -Ln(LVS 节点) 验证 LVS 规则 包含 VIP、后端节点、WRR 算法、DR 模式
ip addr show eth0(LVS 节点) 验证 VIP 绑定 主节点包含 VIP,备节点无(故障时接管)
systemctl status keepalived 验证 Keepalived 状态 active(running)
curl 192.168.1.200/health 验证 Web 节点健康检查 返回OK,状态码 200
tail -f /var/log/keepalived_chk_web.log 排查健康检查故障 无 ERROR 日志,显示存活节点数
systemctl stop keepalived(主节点) 测试主备切换 备节点自动绑定 VIP,ip addr可查

总结

  1. 核心安装:仅需在 LVS 节点安装 Keepalived+ipvsadm,Web 节点无需安装,仅配置 lo 接口 + ARP 抑制;
  2. lo 接口:Web 节点专属配置,解决 DR 模式 VIP 请求识别和网络冲突,子网掩码必须为 32 位;
  3. 两种配置方式
    • 手动 ipvsadm+Keepalived:生产推荐,规则灵活,调整无需重启 Keepalived;
    • 纯 Keepalived:测试推荐,简化配置,自动生成 ipvsadm 规则;
  4. 高可用核心 :主备节点virtual_router_id/auth_pass一致,开启非抢占模式,避免脑裂;
  5. 扩容:新增 Web 节点仅需配置 lo 接口 + 同步 LVS 规则,新增 LVS 备节点同步配置并调整优先级即可。
相关推荐
程序员老徐2 小时前
Spring Security 是如何注入 Tomcat Filter 链的 —— 启动与请求源码分析
java·spring·tomcat
市安18 小时前
基于 LVS+Keepalived+NFS 的高可用 Web 集群构建与验证
运维·服务器·网络·lvs·keepalived·ipvsadm
阿杰 AJie20 小时前
Nginx配置静态资源服务器
运维·服务器·nginx
莫问前路漫漫21 小时前
JRE 核心实操指南:安装、配置、调优与问题排查
java·eclipse·tomcat·jre
不做码农好多年,该何去何从。1 天前
docker(一)----使用docker安装运行tomcat
docker·容器·tomcat
sunnyday04261 天前
Nginx与Spring Cloud Gateway QPS统计全攻略
java·spring boot·后端·nginx
何以不说话1 天前
zabbix部署及nginx的监控
运维·nginx·zabbix
bukeyiwanshui1 天前
Nginx 服务器
运维·服务器·nginx
jc06201 天前
项目实战6-消息推送
c++·redis·websocket·nginx·kafka