Keepalived 与 LVS 集成及多实例配置详解

发布于:2025-05-24 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、Keepalived 扩展功能:LVS 集成与多实例管理

1. Keepalived + LVS:四层负载均衡高可用方案
1.1 集成原理与架构
  • 核心逻辑:Keepalived 通过 VRRP 实现 LVS 负载均衡节点的高可用,同时利用 LVS 的 IP 负载均衡技术(NAT/DR/TUN 模式)分发流量到后端服务器。

  • 组件分工

    • Keepalived:管理 VRRP 状态、VIP 漂移和节点健康检查。

    • LVS:基于 IP 层(OSI 第四层)实现流量转发,支持 TCP/UDP 协议(如 HTTP、MySQL、Redis)。

1.2 LVS 负载均衡模式
模式 原理 特点
NAT 负载均衡器作为网关,修改数据包源 / 目的 IP,后端服务器默认网关指向负载均衡器。 配置简单,需负载均衡器处理所有进出流量,适合小规模集群。
DR(直接路由) 负载均衡器仅修改数据包目的 MAC,后端服务器共享 VIP 的 IP 配置。 性能高,后端服务器需配置相同子网 IP,适合高吞吐量场景。
TUN(隧道模式) 负载均衡器与后端服务器通过 IP 隧道通信,支持跨子网部署。 支持地理分散的后端服务器,配置复杂。
1.3 配置示例(LVS DR 模式)
# Keepalived 配置文件(主节点)
global_defs {
  router_id LVS_MASTER
}

vrrp_instance LVS_VIP {
  state MASTER
  interface eth0
  virtual_router_id 60
  priority 100
  virtual_ipaddress {
    192.168.1.254/24 dev eth0  # VIP
  }
}

# LVS 规则配置(通过 keepalived 动态注入)
virtual_server 192.168.1.254 80 {
  delay_loop 6
  lb_algo wlc  # 加权最小连接算法
  lb_kind DR  # DR 模式
  protocol TCP

  real_server 192.168.1.101 80 {
    weight 10
    TCP_CHECK {
      connect_port 80
      connect_timeout 3
      retry 3
    }
  }

  real_server 192.168.1.102 80 {
    weight 8
    TCP_CHECK {
      connect_port 80
      connect_timeout 3
      retry 3
    }
  }
}

关键配置说明

  • virtual_server:定义 VIP 和服务端口(如 80)。

  • lb_algo:负载均衡算法(支持 rr/wlc/lc 等)。

  • real_server:后端服务器 IP 及权重,TCP_CHECK 实现健康检查。

1.4 后端服务器配置(DR 模式)
# 配置 VIP 别名(不启用 ARP 响应)
sudo ip addr add 192.168.1.254/32 dev lo:0
sudo arp -Ds 192.168.1.254 $(ifconfig eth0 | grep ether | awk '{print $2}') pub

原理:后端服务器通过回环接口(lo)绑定 VIP 的 /32 地址,避免响应 ARP 请求干扰负载均衡器。

2. 多实例支持:单机管理多个独立高可用组
2.1 应用场景
  • 多业务隔离:同一物理机上运行多个 Keepalived 实例,分别管理不同业务的 VIP(如 Web 服务 VIP1、数据库 VIP2)。

  • 混合负载均衡:同时部署 LVS 负载均衡实例和纯 VRRP 高可用实例。

2.2 实例隔离机制
  • 配置文件隔离:每个实例使用独立的配置文件(如 /etc/keepalived/instance1.conf/etc/keepalived/instance2.conf)。

  • 端口隔离

    • 主实例使用默认端口(VRRP 通告 UDP 112、管理接口 TCP 1936)。

    • 其他实例通过 vrrp_port 参数指定不同端口(如 113、1937)。

  • 进程隔离:每个实例以独立进程运行,通过不同 PID 文件区分。

2.3 配置示例(双实例)

实例 1:Web 服务高可用(纯 VRRP)

# /etc/keepalived/web.conf
vrrp_instance WEB {
  state MASTER
  interface eth0
  virtual_router_id 70
  priority 100
  virtual_ipaddress {
    192.168.1.254/24
  }
  track_script {
    check_web
  }
}

实例 2:数据库负载均衡(LVS + VRRP)

# /etc/keepalived/db.conf
global_defs {
  router_id LVS_DB
  vrrp_port 113  # 自定义 VRRP 端口
}

vrrp_instance DB {
  state MASTER
  interface eth0
  virtual_router_id 71
  priority 100
  virtual_ipaddress {
    192.168.1.255/24  # 独立 VIP
  }
}

virtual_server 192.168.1.255 3306 {
  lb_kind NAT
  real_server 192.168.1.103 3306 {
    weight 5
    TCP_CHECK { ... }
  }
}

启动命令

# 实例 1
sudo keepalived -f /etc/keepalived/web.conf -D

# 实例 2
sudo keepalived -f /etc/keepalived/db.conf -D -p /var/run/keepalived_db.pid
2.4 管理与监控
  • 状态查看
# 实例 1 状态
sudo keepalived -S info -f /etc/keepalived/web.conf

# 实例 2 状态
sudo keepalived -S info -f /etc/keepalived/db.conf
  • 日志分离:每个实例配置独立日志文件:
global_defs {
  log_file /var/log/keepalived_web.log  # 实例 1 日志
}
3. 扩展功能最佳实践
3.1 LVS 性能优化
  • 算法选择

    • 短连接业务(如 HTTP):使用 rr(轮询)或 wrr(加权轮询)。

    • 长连接业务(如数据库):使用 wlc(加权最小连接)。

  • 连接调度:通过 persistence_timeout 配置会话保持(如电商购物车场景):

virtual_server 192.168.1.254 80 {
  persistence_timeout 300  # 5 分钟内同一客户端 IP 路由到同一后端
}
3.2 多实例资源分配
  • CPU 隔离:为不同实例分配独立 CPU 核心(通过 systemd-cgroups)。

  • 内存限制:使用 MemoryMax 参数限制实例内存占用:

# /etc/systemd/system/keepalived@.service.d/limit.conf
[Service]
MemoryMax=256M
3.3 云原生场景适配
  • 容器化部署:在 Kubernetes 中使用 keepalived + ipvs 实现四层负载均衡,替代传统 NodePort 服务:
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: keepalived-lvs
spec:
  template:
    spec:
      containers:
      - name: keepalived
        image: keepalived:latest
        volumeMounts:
        - mountPath: /etc/keepalived
          name: config

二、总结:扩展功能的价值与适用场景

  • Keepalived + LVS:提供 “高可用 + 负载均衡” 一体化解决方案,适合传统数据中心的四层流量分发场景(如金融交易、实时通信)。

  • 多实例管理:满足复杂业务架构下的资源隔离需求,避免单一实例故障影响全局,同时优化硬件利用率。

在实际应用中,建议根据业务特性选择扩展功能:

  • 无状态服务优先使用 LVS DR 模式,结合 Keepalived 实现高性能高可用。

  • 多业务场景通过多实例隔离,配合云原生技术(如容器、K8s)实现混合架构部署。

通过合理利用 Keepalived 的扩展功能,可在不引入复杂中间件的前提下,构建灵活、高效的基础设施层。


网站公告

今日签到

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