keepalived高可用与负载均衡

Keepalived 是 Linux 下一款同时实现 高可用 (HA)负载均衡 (LB) 的核心软件,通常用于构建高可靠的服务集群(如 Nginx、MySQL、LVS 等)。


一、核心两大功能

1. 高可用 (High Availability, HA)

核心原理:基于 VRRP 协议实现 IP 漂移

  • VRRP (虚拟路由冗余协议) :将多台物理机组成一个虚拟路由器 ,共享一个 VIP (虚拟 IP)
  • 角色
    • Master (主节点) :绑定 VIP,对外提供服务,每秒发送 VRRP 心跳包(组播地址 224.0.0.18)。
    • Backup (备节点):监听心跳,不绑定 VIP,处于待命状态。
  • 故障切换
    1. 备节点 3 秒 未收到心跳,判定主节点故障。
    2. 优先级最高的备节点升级为 Master,绑定 VIP。
    3. 发送 免费 ARP 广播,刷新全网 ARP 表,流量立即导向新主节点。
    4. 切换时间通常 < 5 秒,对用户完全透明。
2. 负载均衡 (Load Balancing, LB)

核心原理:集成 Linux 内核 IPVS (LVS) 模块,实现四层负载均衡

  • IPVS (IP Virtual Server) :工作在 传输层 (L4),基于内核态转发,性能极高。
  • 工作模式
    • NAT (网络地址转换):请求与响应都经过负载均衡器。
    • DR (直接路由) :仅请求经负载均衡器,响应由后端服务器直接返回客户端(生产最常用)。
    • TUN (IP 隧道):跨网段部署。
  • 常用调度算法
    • rr (轮询):平均分配。
    • wrr (加权轮询):按服务器性能权重分配。
    • lc (最少连接):分给连接数最少的服务器。
    • sh (源地址哈希):同一 IP 固定分配到同一服务器(会话保持)。

二、典型架构:Keepalived + Nginx / LVS

架构图示意:

plaintext

复制代码
用户 → [VIP (192.168.1.100)]
          ↓
[LB节点1 (Master)] ↔ [LB节点2 (Backup)] (Keepalived 主备)
          ↓ (负载分发)
[Web Server 1] [Web Server 2] [Web Server 3] (后端真实服务器)

作用

  1. 高可用:任意一台 LB 节点宕机,VIP 自动漂移,服务不中断。
  2. 负载均衡:LB 节点将请求均匀分发到后端 Web 服务器。
  3. 健康检查:自动剔除宕机的后端服务器,恢复后自动加回。

三、核心配置文件 (keepalived.conf)

1. 高可用 (VRRP) 配置(主节点)

conf

复制代码
global_defs {
    router_id LVS_DEVEL  # 集群内唯一ID
}

vrrp_instance VI_1 {
    state MASTER         # 角色:主节点
    interface eth0       # 绑定网卡
    virtual_router_id 51 # 集群ID,主备必须一致
    priority 150         # 优先级(主>备)
    advert_int 1         # 心跳间隔1秒

    # 虚拟IP
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }

    # 健康检查脚本(如检查Nginx是否存活)
    track_script {
        chk_nginx
    }
}

# 自定义检查脚本
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2  # 每2秒检查一次
    weight -20  # 失败则优先级-20,触发切换
}
2. 负载均衡 (IPVS) 配置

conf

复制代码
# 定义虚拟服务(VIP:端口)
virtual_server 192.168.1.100 80 {
    delay_loop 6          # 健康检查间隔
    lb_algo rr            # 调度算法:轮询
    lb_kind DR            # 模式:直接路由
    persistence_timeout 0 # 会话保持时间

    # 后端真实服务器
    real_server 192.168.1.11 80 {
        weight 1          # 权重
        TCP_CHECK {       # 健康检查:TCP端口
            connect_timeout 3
        }
    }
    real_server 192.168.1.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
}

四、关键特性总结

  • 双功能合一 :一套软件同时解决单点故障流量分发
  • 服务级高可用:通过脚本检查服务进程(如 Nginx),而非仅检查主机存活。
  • 无缝切换:基于 ARP 广播,客户端无感知。
  • 高性能:四层负载均衡(IPVS)性能远超七层(Nginx)。

五、常用命令

bash

运行

复制代码
# 安装
yum install keepalived -y

# 启动/停止/状态
systemctl start/stop/status keepalived

# 查看VIP
ip addr show eth0

# 查看IPVS规则
ipvsadm -Ln
相关推荐
枳实-叶2 小时前
音视频 Linux 指令速查
linux·运维·音视频
SilentSamsara2 小时前
Linux 管道与重定向:命令行精髓的结构性解析
linux·运维·服务器·c++·云原生
the sun342 小时前
NFS 配置全指南 —— 从踩坑到手动挂载的完整落地
linux·运维·服务器·ubuntu
SilentSamsara2 小时前
Shell 脚本进阶:从能跑到写得优雅
linux·运维·服务器·自动化·ssh·bash
xiaoshuaishuai82 小时前
C# 实现“superpowers进化
运维·服务器·windows·c#
孙同学_3 小时前
【项目篇】高并发服务器 - 从 Buffer 到 TcpServer 构建高并发服务器引擎
运维·服务器
SilentSamsara3 小时前
Linux磁盘与存储管理:分区、LVM 与 IO 性能全栈分析
linux·运维·服务器·ssh·shell
IMPYLH10 小时前
Linux 的 pinky 命令
linux·运维·服务器·bash