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
相关推荐
Harvy_没救了2 小时前
Ansible 学习指南
linux·运维·服务器·ansible
学Linux的语莫2 小时前
Linux环境中anaconda 的安装与环境配置
linux·运维·服务器
Elastic 中国社区官方博客2 小时前
多大才算太大?Elasticsearch 容量规划最佳实践
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索
中海德--陈顺真2 小时前
西门子直流调速器维修时,需注意点
运维·维修
ITKEY_3 小时前
linux edge 强制使用x11运行
linux·运维·edge
重生的黑客3 小时前
Linux:Makefile 自动化构建与进度条实战
linux·运维·自动化
PH = 73 小时前
Docker将jar包装为Image并运行
运维·docker·容器
坤坤藤椒牛肉面3 小时前
linux中断:顶半部与底半部
linux·运维·服务器
重生的黑客3 小时前
Linux 开发工具:Git 版本控制与 GDB 调试入门
linux·运维·git