一、前置基础准备(必做,含 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_id、auth_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 协议、心跳线故障、主备节点时间不一致;
- 预防措施:
- 放行 VRRP 协议:
iptables -A INPUT -p vrrp -j ACCEPT(若开启防火墙); - 配置双心跳线(物理网卡 + 虚拟网卡);
- 同步主备节点时间:
ntpdate ntp.aliyun.com; - 配置仲裁节点(第三方服务器监控主备状态)。
- 放行 VRRP 协议:
六、新增节点扩容(生产常用操作)
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可查 |
总结
- 核心安装:仅需在 LVS 节点安装 Keepalived+ipvsadm,Web 节点无需安装,仅配置 lo 接口 + ARP 抑制;
- lo 接口:Web 节点专属配置,解决 DR 模式 VIP 请求识别和网络冲突,子网掩码必须为 32 位;
- 两种配置方式 :
- 手动 ipvsadm+Keepalived:生产推荐,规则灵活,调整无需重启 Keepalived;
- 纯 Keepalived:测试推荐,简化配置,自动生成 ipvsadm 规则;
- 高可用核心 :主备节点
virtual_router_id/auth_pass一致,开启非抢占模式,避免脑裂; - 扩容:新增 Web 节点仅需配置 lo 接口 + 同步 LVS 规则,新增 LVS 备节点同步配置并调整优先级即可。