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 备节点同步配置并调整优先级即可。
相关推荐
闲云一鹤8 小时前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
何中应4 天前
Nginx转发请求错误
前端·后端·nginx
大大水瓶4 天前
Tomcat
java·tomcat
芝士雪豹只抽瑞克五4 天前
Nginx 高性能Web服务器笔记
服务器·nginx
失重外太空啦4 天前
Tomcat
java·服务器·tomcat
屎到临头想搅便4 天前
TOMCAT
java·tomcat
Ap04154 天前
LVS介绍以及模式实现
lvs
失重外太空啦4 天前
nginx
运维·nginx
微风起皱4 天前
企业级WEB应用服务器TOMCAT
java·前端·tomcat