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
相关推荐
无忧.芙桃2 小时前
线程同步与线程互斥(上)
linux·运维·操作系统·运维开发
xywww1686 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
梦想的颜色9 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
donoot11 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
spider_xcxc12 小时前
告别单点故障:阿里云CLB负载均衡从入门到实战
阿里云·云计算·负载均衡
ITKEY_12 小时前
macOS brew 安装的nginx 文件在哪里?
运维·nginx·macos
Elastic 中国社区官方博客12 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
Tim_Van13 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
孫治AllenSun14 小时前
【Nginx】配置参数和使用案例
运维·nginx
啵啵鱼爱吃小猫咪15 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu