LVS DR模式+Keepalived 2.2.8 高可用集群:4节点CentOS 7实战配置与脑裂规避
LVS DR模式Keepalived 2.2.8高可用集群4节点CentOS 7生产级配置与脑裂深度防护1. 架构设计核心思路在Web服务高可用架构中LVS DR模式与Keepalived的组合堪称经典。这种架构的精妙之处在于直接路由效率DR模式通过MAC地址改写实现数据转发响应数据由Real Server直接返回客户端避免调度器成为带宽瓶颈资源利用率最大化相比NAT模式DR模式可支持单集群数百台Real Server吞吐量可达10Gbps级别毫秒级故障切换Keepalived基于VRRP协议实现VIP漂移配合恰当的检测机制可实现200ms内完成故障转移我们采用的4节点拓扑包含2台LVS调度器主备各一2台Web服务器Nginx/Apache1个虚拟IPVIP作为服务入口2. 基础环境准备2.1 系统配置规范所有节点需统一环境# 关闭SELinux所有节点 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config setenforce 0 # 时间同步配置关键 yum install -y chrony systemctl enable chronyd --now chronyc sources -v2.2 内核参数调优LVS节点需配置# 开启IP转发 echo net.ipv4.ip_forward 1 /etc/sysctl.conf # 关闭ARP相关参数 echo net.ipv4.conf.all.arp_ignore 1 /etc/sysctl.conf echo net.ipv4.conf.all.arp_announce 2 /etc/sysctl.conf sysctl -pWeb节点额外配置# 抑制ARP响应 echo net.ipv4.conf.lo.arp_ignore 1 /etc/sysctl.conf echo net.ipv4.conf.lo.arp_announce 2 /etc/sysctl.conf3. Keepalived高级配置3.1 主节点配置/etc/keepalived/keepalived.conf! Configuration File for keepalived global_defs { router_id LVS_MASTER # 标识唯一性 vrrp_skip_check_adv_addr enable_script_security } vrrp_script chk_lvs { script /etc/keepalived/check_lvs.sh interval 2 weight -20 # 检测失败时降低优先级 } vrrp_instance VI_1 { state MASTER interface ens192 # 根据实际网卡调整 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 5tgbNHY^ # 建议使用复杂密码 } virtual_ipaddress { 192.168.10.100/24 dev ens192 label ens192:0 } track_script { chk_lvs } notify_master /etc/keepalived/notify.sh master notify_backup /etc/keepalived/notify.sh backup } virtual_server 192.168.10.100 80 { delay_loop 6 lb_algo wlc # 加权最小连接 lb_kind DR persistence_timeout 120 # 会话保持 protocol TCP real_server 192.168.10.21 80 { weight 10 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 192.168.10.22 80 { weight 10 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } }3.2 备用节点差异配置-global_defs { - router_id LVS_MASTER global_defs { router_id LVS_BACKUP vrrp_instance VI_1 { - state MASTER - priority 100 state BACKUP priority 904. 脑裂防护体系4.1 多维度检测脚本创建/etc/keepalived/check_lvs.sh#!/bin/bash # 检测本地LVS服务状态 if ! systemctl is-active ipvsadm /dev/null; then exit 1 fi # 检测对端节点存活状态通过独立心跳线 ping -c 3 -I eth1 192.168.100.2 /dev/null if [ $? -eq 0 ]; then # 检测VIP是否异常出现在多节点 vip_count$(ip a show | grep -c 192.168.10.100) if [ $vip_count -gt 1 ]; then logger LVS split-brain detected! exit 1 fi fi exit 04.2 仲裁服务器方案当双节点无法直接通信时引入第三方仲裁vrrp_instance VI_1 { ... unicast_peer { 192.168.100.2 # 对端IP 192.168.100.3 # 仲裁服务器IP } track_script { chk_lvs } }5. 生产验证方案5.1 故障转移测试# 在主节点模拟故障 systemctl stop keepalived # 验证VIP漂移应在2秒内完成 watch -n 0.5 ip a show ens192 # 查看切换日志 tail -f /var/log/messages | grep Keepalived5.2 性能压测指标使用wrk进行基准测试wrk -t12 -c400 -d30s http://192.168.10.100典型性能指标单节点吞吐量≥ 50,000 RPS故障转移时间≤ 200ms最大连接数≥ 50万6. 关键问题排查指南6.1 VIP不漂移排查步骤graph TD A[VIP未切换] -- B{查看Keepalived状态} B --|Active| C[检查优先级配置] B --|Inactive| D[检查服务日志] C -- E[验证vrrp_instance配置] D -- F[分析/var/log/messages] E -- G[检查virtual_router_id] F -- H[检查认证配置]6.2 常见错误处理问题1ARP缓存导致访问异常# 客户端清除ARP缓存 arp -d 192.168.10.100问题2Real Server健康检测失败# 在LVS节点手动检测 curl -I http://192.168.10.21 ipvsadm -ln7. 进阶优化策略7.1 动态权重调整根据服务器负载自动调整权重real_server 192.168.10.21 80 { weight 10 inhibit_on_failure HTTP_GET { url { path /loadstatus status_code 200 digest 动态生成的校验值 } connect_timeout 3 nb_get_retry 3 } }7.2 安全加固措施# 限制VRRP组播源IP iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -p vrrp -s 非集群节点IP -j DROP # 启用Keepalived日志审计 local0.* /var/log/keepalived.log这套架构经过多个金融级项目验证在持续优化中总结出三个黄金法则任何单点检测都必须有冗余验证机制变更操作前务必保存当前IPVS规则ipvsadm -Sn ipvs.bak监控必须覆盖VRRP状态、连接数、每秒新建连接数三个维度