Keepalived 高可用与负载均衡

一、核心概念

1. 什么是 Keepalived

  • 基于 VRRP 协议 实现的高可用(HA)工具
  • 主要作用:单点故障自动切换 + 配合 LVS/Nginx 做负载均衡健康检查
  • 应用场景:Nginx、MySQL、LVS、业务网关等高可用集群

2. 高可用 vs 负载均衡

  • 高可用(HA):保证服务不挂,一台挂了另一台顶上
  • 负载均衡(LB):流量分摊到多台后端,提升并发
  • Keepalived 本身不做流量转发 ,只做:
    1. 节点健康检查
    2. VIP 漂移
    3. 故障自动切换

二、核心原理:VRRP 协议

1. 角色

  • Master(主):持有 VIP,对外提供服务
  • Backup(备):监听 Master,不绑定 VIP
  • 主挂了 → 备抢占 VIP → 成为新 Master

2. 关键术语

  • VIP(虚拟 IP):对外统一入口,用户只访问这个 IP
  • 漂移:故障时 VIP 从主节点转移到备节点
  • 优先级(priority):值越大越优先成为 Master

三、安装与基础配置

1. 安装(CentOS /openEuler)

bash

运行

复制代码
yum install -y keepalived

2. 配置文件路径

plaintext

复制代码
/etc/keepalived/keepalived.conf

3. 主节点配置(精简版)

conf

复制代码
global_defs {
    router_id LVS_01  # 本节点标识,唯一即可
}

vrrp_instance VI_1 {
    state MASTER       # 主节点
    interface eth0     # 绑定网卡
    virtual_router_id 51
    priority 150       # 优先级,备节点设更低
    advert_int 1       # 心跳间隔1秒

    authentication {
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {
        192.168.1.100/24  # VIP
    }
}

4. 备节点配置

  • state BACKUP
  • priority 100
  • 其余基本一致

四、配合 Nginx 实现高可用(最常用)

目标

Nginx 挂了 → Keepalived 自动切换 VIP

1. 添加 Nginx 健康检查脚本

conf

复制代码
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20  # 失败则优先级-20
}

vrrp_instance VI_1 {
    ...
    track_script {
        chk_nginx
    }
}

2. 检查脚本 check_nginx.sh

bash

运行

复制代码
#!/bin/bash
if ! pgrep nginx &>/dev/null; then
    systemctl stop keepalived
fi

bash

运行

复制代码
chmod +x /etc/keepalived/check_nginx.sh

五、配合 LVS 做负载均衡(四层 LB)

1. LVS + Keepalived 作用

  • LVS:四层负载均衡(转发流量)
  • Keepalived:LVS 高可用 + 自动配置 VS/RS + 健康检查

2. 典型配置片段

conf

复制代码
virtual_server 192.168.1.100 80 {
    delay_loop 3
    lb_algo rr        # 轮询
    lb_kind DR        # Direct Route 模式
    protocol TCP

    real_server 192.168.1.11 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }

    real_server 192.168.1.12 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
        }
    }
}

六、常用命令

bash

运行

复制代码
# 启动/开机自启
systemctl start keepalived
systemctl enable keepalived

# 查看状态
systemctl status keepalived

# 查看VIP
ip addr show eth0

# 查看日志
tail -f /var/log/messages

七、面试高频考点

  1. **Keepalived 用什么协议?**VRRP 协议,实现主备高可用。
  2. **脑裂是什么?怎么解决?**心跳断了 → 主备都抢 VIP → 脑裂。解决:串口心跳、冗余网卡、防火墙放行 VRRP。
  3. **Nginx 高可用怎么做?**Nginx + Keepalived + 脚本检查 Nginx 进程。
  4. **LVS 与 Keepalived 关系?**LVS 做四层负载均衡,Keepalived 做高可用与健康检查。
  5. **VIP 有什么用?**给用户统一入口,故障时漂移,业务无感知。

八、总结

Keepalived = VRRP 高可用 + 服务健康检查 + 配合 LVS/Nginx 实现负载均衡高可用

  • 主备切换靠 VRRP
  • 流量入口靠 VIP
  • 服务存活靠 检查脚本
  • 负载均衡靠 LVS/Nginx
相关推荐
hyf32663341 分钟前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
为自己_带盐1 小时前
安敢越雷池一步?浅尝雷池WAF社区版
运维·web安全
NiceCloud喜云1 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder2 小时前
Linux LVM 知识文档
linux·运维
小小的木头人3 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
布鲁飞丝4 小时前
彩笔运维勇闯机器学习--cpu与qps的线性关系
运维·人工智能·机器学习
kaoa0004 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器
我头发多我先学5 小时前
linux系统编程:初识进程
linux·运维·服务器
云飞云共享云桌面6 小时前
SolidWorks—天津智能装备工厂1台高配主机共享给10个研发用
运维·服务器·自动化·汽车·制造
苍狗T6 小时前
LVS相关知识总结
linux·运维·服务器·lvs