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
相关推荐
不会就选b9 小时前
Linux之TCP理论<1>
linux·运维·服务器
倔强的石头10610 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_samples_min调用流程与实战(六十)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
_upupup12 小时前
Linux中的自动化构建——make/Makefile
linux·运维·自动化
还卿一钵无情泪13 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
打工仔折腾 AI14 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
大猫会长14 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
夜之眷属15 小时前
服务器被挖矿病毒入侵的排查与清理实录
运维·服务器
极客先躯15 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
韩振方15 小时前
为什么服务显示占了 8G,实际内存却没那么多?
运维