keepalived高可用与负载均衡笔记

一、Keepalived概述

1.1 什么是Keepalived

Keepalived是一个用C语言编写的开源软件,主要用于实现高可用和负载均衡。它通过VRRP(虚拟路由冗余协议)协议实现服务器故障时的IP地址漂移,从而保证服务的连续性。

1.2 Keepalived的核心功能

功能 说明
高可用(HA) 通过VRRP实现主备切换,保证服务不中断
健康检查 定期检测后端服务器状态,自动剔除故障节点
负载均衡(LVS) 与LVS集成,实现四层负载均衡
故障通知 支持自定义脚本,实现故障告警

1.3 Keepalived vs Nginx负载均衡

特性 Keepalived + LVS Nginx
工作层级 四层(传输层) 七层(应用层)
性能 极高,接近硬件负载均衡 较高,但有七层处理开销
功能 相对简单 功能丰富,支持URL路由、缓存等
配置复杂度 较低 中等
适用场景 高性能TCP/UDP负载均衡 Web应用、API网关

注意:Keepalived通常与Nginx配合使用------Keepalived提供高可用(VIP漂移),Nginx提供七层负载均衡。

二、Keepalived工作原理

2.1 VRRP协议简介

VRRP(Virtual Router Redundancy Protocol)是一种容错协议,将多台路由器虚拟成一个虚拟路由器,通过竞选机制确定主路由器,其他作为备份。

2.2 VRRP工作机制

  1. 优先级竞选:优先级最高的设备成为Master

  2. 心跳检测:Master定期发送VRRP通告报文

  3. 故障切换:Backup在超时后未收到通告,自动接管VIP

  4. 抢占模式:高优先级设备恢复后可自动抢占Master角色

2.3 Keepalived进程架构

text

复制代码
Keepalived
├── Watchdog(看门狗)
│   └── 监控子进程状态
├── Master进程
│   └── 负责VRRP协议处理
└── Healthcheck进程
    └── 负责后端服务健康检查

三、Keepalived安装

3.1 环境准备

bash

复制代码
# 环境规划(示例)
主服务器: 192.168.1.101
备服务器: 192.168.1.102
虚拟IP:   192.168.1.100

# 确保服务器时间同步
ntpdate ntp.aliyun.com

# 关闭防火墙或开放VRRP协议(IP协议号112)
# 方式1:关闭防火墙(仅测试环境)
systemctl stop firewalld
systemctl disable firewalld

# 方式2:开放VRRP(生产环境推荐)
firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept'
firewall-cmd --reload

3.2 安装Keepalived

bash

复制代码
# Ubuntu/Debian
apt-get update
apt-get install -y keepalived

# CentOS/RHEL
yum install -y keepalived

# 验证安装
keepalived -v

# 设置开机自启
systemctl enable keepalived

四、基础高可用配置

4.1 主服务器配置

bash

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

ini

复制代码
! Configuration File for keepalived

global_defs {
    # 路由器标识,同一集群内唯一
    router_id LVS_MASTER
    
    # 启用脚本检查
    enable_script_security
    
    # 脚本执行用户
    script_user root
}

# VRRP实例配置
vrrp_instance VI_1 {
    # 角色:MASTER(主服务器)
    state MASTER
    
    # 网卡接口(根据实际修改)
    interface eth0
    
    # 虚拟路由ID,同一集群内一致(1-255)
    virtual_router_id 51
    
    # 优先级(主服务器设置更高)
    priority 100
    
    # VRRP通告间隔(秒)
    advert_int 1
    
    # 认证配置
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    
    # 虚拟IP地址
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
        192.168.1.101/24 dev eth0  # 可配置多个VIP
    }
    
    # 抢占模式(默认开启)
    preempt
    
    # 延迟抢占时间(秒)
    preempt_delay 5
    
    # 通知脚本
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

4.2 备服务器配置

ini

复制代码
! Configuration File for keepalived

global_defs {
    router_id LVS_BACKUP
    enable_script_security
    script_user root
}

vrrp_instance VI_1 {
    # 角色:BACKUP(备服务器)
    state BACKUP
    
    interface eth0
    virtual_router_id 51
    priority 90          # 优先级低于主服务器
    advert_int 1
    
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }
    
    # 抢占模式(备服务器通常开启,但可关闭)
    preempt
    
    # 通知脚本
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

4.3 通知脚本

bash

复制代码
# /etc/keepalived/notify.sh
#!/bin/bash

# 状态变化通知脚本
# 参数: $1 - 状态 (master/backup/fault)

case "$1" in
    master)
        echo "$(date): 成为MASTER节点" >> /var/log/keepalived.log
        # 可在此添加业务操作,如启动服务、发送告警等
        ;;
    backup)
        echo "$(date): 成为BACKUP节点" >> /var/log/keepalived.log
        ;;
    fault)
        echo "$(date): 节点故障" >> /var/log/keepalived.log
        ;;
    *)
        echo "$(date): 未知状态" >> /var/log/keepalived.log
        ;;
esac

# 发送告警(可选)
# curl -X POST https://your-alert-api/alert -d "status=$1"

bash

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

4.4 启动与验证

bash

复制代码
# 启动Keepalived
systemctl start keepalived

# 查看状态
systemctl status keepalived

# 查看VIP
ip addr show eth0
# 应看到192.168.1.100/24

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

# 测试故障切换
# 在主服务器上停止Keepalived
systemctl stop keepalived

# 在备服务器上查看VIP是否漂移
ip addr show eth0
相关推荐
LinXunFeng8 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
XIAOHEZIcode21 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
闪闪发亮的小星星5 天前
高斯光以及高斯光公式解释
笔记