LVS + Keepalived高可用群集

发布于:2025-05-30 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

Keepalived基础概念

‌一、核心原理:VRRP 协议‌

‌二、健康检查机制‌

‌三、Keepalived 架构‌

‌四、工作流程‌

‌五、配置文件解析‌

‌六、高级特性‌

‌七、典型应用场景‌

‌八、日志与调试‌

LVS+Keepalived高可用基础部署 

‌一、LVS + Keepalived 核心原理‌

‌二、部署环境准备‌

‌三、配置 Keepalived(主/备节点)‌

‌四、配置 LVS 直接路由(DR 模式)‌

‌五、验证与故障排查‌

‌六、关键注意事项‌


Keepalived基础概念

    Keepalived 是一个基于 ‌VRRP(Virtual Router Redundancy Protocol)‌ 协议的高可用性解决方案,主要用于实现网络服务的故障转移(Failover)和负载均衡。其核心目标是通过虚拟 IP(VIP)漂移和健康检查机制,确保服务的高可用性。以下是对其原理的详细分步解析:


一、核心原理:VRRP 协议

  1. VRRP 的作用
        解决静态默认路由的单点故障问题。通过将多个物理路由器组合成一个‌虚拟路由器‌(Virtual Router),对外提供统一的虚拟 IP(VIP)。客户端仅需将流量发送到 VIP,实际流量由当前主节点(Master)处理。

  2. 角色与选举机制

    • Master 节点‌:负责转发流量,定期发送 VRRP 通告(Advertisement)以宣告存活。
    • Backup 节点‌:监听 Master 的通告,若超时未收到则发起选举。
    • 选举依据‌:优先级(priority,范围 1-254)。优先级高的节点成为 Master,默认优先级为 100。
  3. 协议细节

    • 通告间隔‌:默认为 1 秒,可通过 advert_int 配置。
    • 故障检测‌:若 Backup 节点在 3 × advert_int + skew_time 内未收到通告,则判定 Master 失效。
    • 状态切换‌:Backup 节点接管 VIP 并成为新的 Master。

二、健康检查机制

Keepalived 通过健康检查(Health Checking)监控后端服务的状态,触发 VIP 转移。

  1. 检查类型

    • TCP 检查‌:检测端口是否可达。
    • HTTP/HTTPS 检查‌:发送请求并验证状态码或响应内容。
    • SSL 检查‌:验证 SSL 证书有效性。
    • 自定义脚本‌:执行脚本,返回值决定服务状态(0 为正常,非 0 为异常)。
  2. 优先级动态调整

    • 若健康检查失败,节点自动降低优先级(如 priority - 20)。
    • 优先级变化触发 VRRP 重新选举,使更健康的节点成为 Master。

三、Keepalived 架构

  1. 核心组件

    • VRRP Stack‌:处理 VRRP 协议的状态机、选举、通告。
    • Health Checker‌:执行健康检查,动态调整节点优先级。
    • SMTP 通知‌:支持发送邮件告警(可选)。
  2. 虚拟服务器(Virtual Server)

    • 结合 LVS(Linux Virtual Server)实现负载均衡。
    • 定义 VIP、端口、负载均衡算法(如轮询、加权最小连接)和后端真实服务器(Real Server)。

四、工作流程

  1. 节点启动

    • 读取配置文件 keepalived.conf,初始化 VRRP 实例和健康检查。
    • 加入 VRRP 组,根据优先级选举初始 Master。
  2. Master 节点行为

    • 绑定 VIP 到网卡。
    • 周期性发送 VRRP 通告。
    • 执行健康检查,若失败则降低自身优先级。
  3. Backup 节点行为

    • 监听 VRRP 通告。
    • 若 Master 失效,发起选举并接管 VIP。
  4. 故障转移过程

    • Backup 节点检测到 Master 失效(超时或优先级降低)。
    • 发送免费 ARP(Gratuitous ARP)更新网络设备的 ARP 缓存,将 VIP 映射到新 Master 的 MAC 地址。

五、配置文件解析

vrrp_instance VI_1 {
     state BACKUP # 初始角色(MASTER/BACKUP)
     interface eth0 # 绑定网卡
     virtual_router_id 51# 虚拟路由器 ID(同一组需相同)
     priority 100 # 初始优先级
     advert_int 1 # 通告间隔(秒)
     authentication { # 认证(明文或加密)
         auth_type PASS
         auth_pass 1234
 }
     virtual_ipaddress { # 虚拟 IP 列表
             192.168.1.100/24
     }
     track_script { # 关联健康检查脚本
             chk_nginx
     }
 }

virtual_server 192.168.1.100 80 { # 定义虚拟服务器(LVS)
     delay_loop 6 # 健康检查间隔
     lb_algo rr # 负载均衡算法(轮询)
     lb_kind NAT # LVS 模式(NAT/DR/TUN)
     protocol TCP # 协议类型
     real_server 192.168.1.10 80 {
         weight 1 # 权重
         TCP_CHECK { # TCP 检查配置
             connect_timeout 3
             retry 3
             delay_before_retry 3
         }
     }
 } 

六、高级特性

  1. 脑裂(Split-Brain)处理

    • 通过多播/单播冗余、多检测脚本(如 ping 网关)避免网络分区问题。
    • 配置 nopreempt(非抢占模式)防止优先级恢复后反复切换。
  2. 单播模式

    • 在不支持多播的网络中,配置单播通信:
      unicast_src_ip <LOCAL_IP> unicast_peer { <PEER_IP> } 
  3. 安全性

    • VRRP 支持明文或加密认证,防止非法节点加入:
      authentication { auth_type AH # 使用 IPSec 加密 auth_pass <KEY> } 

七、典型应用场景

  1. Web 服务高可用
    • 双机热备:主节点故障时 VIP 漂移到备节点。
  2. 数据库主从切换
    • 结合健康检查(如 MySQL 探活),触发主从角色切换。
  3. 负载均衡器容灾
    • 结合 LVS 实现负载均衡集群的高可用。

八、日志与调试

  • 日志路径:/var/log/messages 或 journalctl -u keepalived
  • 调试模式:启动时添加 -D 参数显示详细日志。

LVS+Keepalived高可用基础部署 

一、LVS + Keepalived 核心原理

  1. LVS(Linux Virtual Server)

    • 基于内核的负载均衡技术,支持 ‌NAT/DR/TUN‌ 三种模式。
    • 分发流量到后端 Real Server,实现高并发处理。
  2. Keepalived

    • 基于 ‌VRRP 协议‌ 实现主备切换,通过健康检查监控 LVS 和后端服务。
    • 主节点故障时,VIP 自动漂移到备节点,保障服务连续性。
  3. 协作流程

    • LVS 负责流量分发,Keepalived 负责故障检测和 VIP 管理。
    • 健康检查失败时,Keepalived 降低节点优先级,触发主备切换。

二、部署环境准备

  • 节点角色

    • 主节点(Master):192.168.1.10
    • 备节点(Backup):192.168.1.11
    • 虚拟 IP(VIP):192.168.1.100
    • 后端 Real Server:192.168.1.20192.168.1.21
  • 软件安装

    # 所有节点安装 LVS 和 Keepalived 
    yum install -y ipvsadm keepalived # CentOS 
    apt install -y ipvsadm keepalived # Ubuntu 

三、配置 Keepalived(主/备节点)

  1. 主节点配置‌ (/etc/keepalived/keepalived.conf)

    global_defs {
         router_id LVS_MASTER
     } 
    
    vrrp_instance VI_1 {
         state MASTER
         interface eth0
         virtual_router_id 51
         priority 100
         advert_int 1 
         authentication {
             auth_type PASS 
             auth_pass 1234
     } 
         virtual_ipaddress {
             192.168.1.100/24
         }
     } 
    
    virtual_server 192.168.1.100 80 {
         delay_loop 6
         lb_algo rr 
         lb_kind DR # 直接路由模式 
         protocol TCP
         real_server 192.168.1.20 80 {
             weight 1
             TCP_CHECK {
                 connect_timeout 3
                 retry 3
                 delay_before_retry 3
              }
         }
     } 
  2. 备节点配置
    仅需修改 state 和 priority

    state BACKUP 
    priority 90 

四、配置 LVS 直接路由(DR 模式)

  1. Real Server 配置‌(每台后端服务器)

    # 配置 VIP 本地回环(防止 VIP 冲突) 
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
    echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/default/arp_announce
    
    # 添加 VIP 到 lo 网卡 
    ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up 
  2. 启动服务

    systemctl start keepalived 
    systemctl enable keepalived 
    ipvsadm -Ln # 查看 LVS 规则 

五、验证与故障排查

  1. VIP 漂移测试

    • 主节点执行 systemctl stop keepalived,观察备节点是否接管 VIP。
    • 使用 ip addr show eth0 检查 VIP 绑定。
  2. 日志检查

    tail -f /var/log/messages # CentOS 
    journalctl -u keepalived # Ubuntu 
  3. LVS 状态监控

    watch ipvsadm -Ln # 实时查看连接分发状态 

六、关键注意事项

  1. ARP 抑制
    DR 模式需关闭 Real Server 的 VIP 响应,避免 ARP 冲突。

  2. 脑裂问题
    通过多检测脚本(如 ping 网关)或启用单播模式避免网络分区。

  3. 性能调优

    • 调整 net.ipv4.vs.conntrack 参数提升 LVS 连接追踪能力。
    • 使用 wr(加权轮询)或 wlc(加权最小连接)算法优化负载均衡。

 


网站公告

今日签到

点亮在社区的每一天
去签到