一、高可用集群基础
核心概念与指标
集群类型:
- LB(负载均衡):如 LVS、HAProxy、Nginx,提升吞吐量;
- HA(高可用):保障核心服务(数据库、Redis)连续性;
- SPoF(单点故障):需通过冗余设计消除的风险点。
可用性指标:
- 计算公式:
A = MTBF / (MTBF + MTTR)
(MTBF 为平均无故障时间,MTTR 为平均修复时间); - 常见标准:99.9%(年停机≤8.76 小时)、99.99%(≤52.56 分钟)、99.999%(≤5.26 分钟)。
- 计算公式:
故障应对思路:
- 缩短 MTTR(故障恢复时间);
- 冗余机制:主备(active/passive)或双主(active/active)模式。
二、VRRP 协议与 Keepalived
VRRP 核心机制
- 作用:将多节点虚拟为单一 "虚拟路由器",解决网关单点故障;
- 关键术语:
- VRID(0-255):虚拟路由器唯一标识;
- VIP(虚拟 IP):对外服务的 IP;
- 角色:master(主节点,提供服务)、backup(备节点,待机接管);
- 优先级:决定主备切换的权重(0-255)。
- 工作方式:主节点广播心跳,备节点监听,故障时自动切换。
Keepalived 功能
- VRRP 协议的软件实现,核心功能包括:
- VIP 地址漂移管理;
- 后端服务器健康检查;
- 自动生成 IPVS 负载均衡规则;
- 支持 Nginx、HAProxy 等高可用切换。
三、实战部署
环境与基础配置
节点信息:
主机名 IP 地址 角色 KA1 172.25.254.50 Keepalived 主节点 KA2 172.25.254.60 Keepalived 备节点 rs11/22 172.25.254.10/20 后端 Web 服务器 部署步骤:
- 后端服务器安装 httpd 并启动;
- KA1/KA2 安装 Keepalived:
dnf install keepalived -y
; - 配置主节点(KA1):设置 MASTER 角色、VRID、优先级及 VIP;
- 配置备节点(KA2):角色设为 BACKUP,优先级低于主节点;
- 启动服务:
systemctl enable --now keepalived
。
四、Keepalived 实战部署:从单主到双主
4.1 环境准备
本次实战涉及 4 台主机,网络配置如下:
主机名 | IP 地址 | 角色 |
---|---|---|
KA1 | 172.25.254.50 | Keepalived 主节点 |
KA2 | 172.25.254.60 | Keepalived 备节点 |
rs11 | 172.25.254.10 | 后端 Web 服务器(httpd) |
rs22 | 172.25.254.20 | 后端 Web 服务器(httpd) |
4.2 基础部署步骤
部署后端服务:在 rs11 和 rs22 安装 httpd 并启动:
bash
dnf install httpd -y systemctl enable --now httpd
安装 Keepalived:在 KA1 和 KA2 执行:
bash
dnf install keepalived -y
配置主节点(KA1):编辑
/etc/keepalived/keepalived.conf
:conf
global_defs {notification_email { 3036573531@qq.com } # 通知邮箱notification_email_from 3036573431@qq.comsmtp_server 127.0.0.1router_id LVS_DEVEL # 节点标识 }# 健康检查脚本(以HAProxy为例) vrrp_script CHECK_HAPROXY {script "/etc/keepalived/scripts/haproxy.sh" # 检查脚本路径interval 1 # 检查间隔(秒)weight -30 # 检查失败时优先级降低值fall 2 # 连续失败次数阈值rise 2 # 恢复成功次数阈值 }vrrp_instance WEB_VIP {state MASTER # 角色:主节点interface eth0 # 绑定网卡virtual_router_id 51 # VRID(需与备节点一致)priority 100 # 优先级(高于备节点)advert_int 1 # 心跳间隔(秒)authentication {auth_type PASS # 认证方式auth_pass 1111 # 认证密码}track_script { CHECK_HAPROXY } # 关联健康检查virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0 # VIP配置} }
配置备节点(KA2):与主节点类似,仅需修改
state BACKUP
和priority 80
。启动服务:
bash
systemctl enable --now keepalived.service
4.3 核心功能配置
日志分离:通过修改启动参数将日志独立存储:
bash
# 在/etc/sysconfig/keepalived中添加 KEEPALIVED_OPTIONS="-D -S 6" # 日志设备号6 # 在/etc/rsyslog.conf中添加 local6.* /var/log/keepalived.log # 日志路径 systemctl restart rsyslog keepalived
非抢占模式:避免主节点恢复后频繁切换,在配置中添加:
conf
vrrp_instance WEB_VIP {...nopreempt # 开启非抢占 }
单播模式:适用于跨网段部署,指定通信节点:
conf
vrrp_instance WEB_VIP {...unicast_src_ip 172.25.254.50 # 本地IPunicast_peer { 172.25.254.60 } # 对端IP }
邮件通知:故障时发送告警,配置脚本与触发机制:
bash
# 编辑通知脚本/etc/keepalived/mail.sh #!/bin/bash mail_dest='3036573431@qq.com' mail_subj="$HOSTNAME 状态切换为 $1" echo "时间: $(date) 节点 $HOSTNAME 状态变为 $1" | mail -s "$mail_subj" $mail_dest# 在vrrp_instance中关联脚本 notify_master "/etc/keepalived/mail.sh master" notify_backup "/etc/keepalived/mail.sh backup"
4.4 双主架构实现
单主架构中备节点长期闲置,双主架构通过两个 VRID 实现资源利用率最大化:
KA1 配置:
conf
# 虚拟路由器1(主节点) vrrp_instance WEB_VIP {state MASTERvirtual_router_id 51priority 100virtual_ipaddress { 172.25.254.100/24 } }# 虚拟路由器2(备节点) vrrp_instance DB_VIP {state BACKUPvirtual_router_id 52priority 80virtual_ipaddress { 172.25.254.200/24 } }
KA2 配置:
conf
# 虚拟路由器1(备节点) vrrp_instance WEB_VIP {state BACKUPvirtual_router_id 51priority 80virtual_ipaddress { 172.25.254.100/24 } }# 虚拟路由器2(主节点) vrrp_instance DB_VIP {state MASTERvirtual_router_id 52priority 100virtual_ipaddress { 172.25.254.200/24 } }
测试验证:
- 正常状态:KA1 持有 172.25.254.100,KA2 持有 172.25.254.200;
- 故障模拟:关闭 KA2 的 keepalived,KA1 会自动接管 172.25.254.200;
- 恢复验证:重启 KA2 的 keepalived,VIP 会自动回切。