Keepalived 多节点负载均衡配置指南
架构说明
网络架构图
Internet|| (访问 192.168.1.100)|
┌─────────────────┐ ┌─────────────────┐
│ 负载均衡器1 │ │ 负载均衡器2 │
│ (Master) │ │ (Backup) │
│ 192.168.1.1 │ │ 192.168.1.2 │
│ VIP: 192.168.1.100 │ │ VIP: 192.168.1.100 │
└─────────────────┘ └─────────────────┘│ │└───────────┬───────────┘│┌────────────────┼────────────────┐│ │ │
┌─────────┐ ┌─────────┐ ┌─────────┐
│真实服务器1│ │真实服务器2│ │真实服务器3│
│192.168.1.10│ │192.168.1.11│ │192.168.1.12│
│ (Web服务) │ │ (Web服务) │ │ (Web服务) │
└─────────┘ └─────────┘ └─────────┘
工作原理
- VIP (192.168.1.100): 虚拟IP地址,在负载均衡器之间浮动
- VRRP: 虚拟路由冗余协议,实现主备切换
- LVS: Linux虚拟服务器,实现负载均衡
- DR模式: 直接路由模式,真实服务器直接响应客户端
服务器角色分配
负载均衡器 (2台)
| 服务器 | IP地址 | 角色 | 优先级 | 说明 |
|---|
| 服务器1 | 192.168.1.1 | Master | 100 | 主负载均衡器 |
| 服务器2 | 192.168.1.2 | Backup | 90 | 备负载均衡器 |
| VIP | 192.168.1.100 | 浮动IP | - | 对外服务地址 |
真实服务器 (3台)
| 服务器 | IP地址 | 服务 | 权重 | 说明 |
|---|
| 服务器3 | 192.168.1.10 | Web服务 | 1 | 真实服务器1 |
| 服务器4 | 192.168.1.11 | Web服务 | 1 | 真实服务器2 |
| 服务器5 | 192.168.1.12 | Web服务 | 1 | 真实服务器3 |
安装配置方案
负载均衡器安装要求
- 软件: Keepalived + ipvsadm
- 功能: VRRP高可用 + LVS负载均衡 + 健康检查
- 配置: 主备节点配置基本相同,优先级不同
真实服务器安装要求
- 软件: 只需要Web服务 (Nginx/Apache等)
- 功能: 配置VIP到lo接口 + ARP参数
- 注意: 不需要安装Keepalived
详细配置步骤
1. 负载均衡器安装 (服务器1和服务器2)
1.1 下载和编译安装
mkdir -p /opt/keepalived
cd /opt/keepalived
wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz
tar -zxvf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8
yum install -y gcc make openssl-devel libnl-devel popt-devel ipvsadm
./configure --prefix=/usr/local/keepalived
make && make install
mkdir -p /etc/keepalived /var/log/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
1.2 主节点配置 (服务器1 - Master)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_MASTERvrrp_garp_master_delay 1vrrp_garp_master_repeat 1
}# VRRP实例配置
vrrp_instance VI_1 {state MASTERinterface eth0 # 修改为实际网卡名称virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100 # 修改为实际VIP地址}
}# HTTP虚拟服务器配置
virtual_server 192.168.1.100 80 {delay_loop 6lb_algo rr # 轮询算法lb_kind DR # 直接路由模式persistence_timeout 50protocol TCP# 真实服务器1real_server 192.168.1.10 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}# 真实服务器2real_server 192.168.1.11 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}# 真实服务器3real_server 192.168.1.12 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}# HTTPS虚拟服务器配置 (可选)
virtual_server 192.168.1.100 443 {delay_loop 6lb_algo wrr # 加权轮询算法lb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.1.10 443 {weight 2TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.11 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.12 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
1.3 备节点配置 (服务器2 - Backup)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_BACKUPvrrp_garp_master_delay 1vrrp_garp_master_repeat 1
}# VRRP实例配置
vrrp_instance VI_1 {state BACKUPinterface eth0 # 修改为实际网卡名称virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100 # 修改为实际VIP地址}
}# 虚拟服务器配置(与Master相同)
virtual_server 192.168.1.100 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.1.10 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.11 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.12 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}# HTTPS虚拟服务器配置(与Master相同)
virtual_server 192.168.1.100 443 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.1.10 443 {weight 2TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.11 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.12 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
2. 真实服务器配置 (服务器3、4、5)
2.1 安装Web服务
yum install -y nginx
systemctl start nginx
systemctl enable nginx
2.2 配置ARP参数
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
EOF
sysctl -p
2.3 配置VIP到lo接口
ip addr add 192.168.1.100/32 dev lo
cat > /etc/rc.local << 'EOF'
#!/bin/bash
# 添加VIP到lo接口
ip addr add 192.168.1.100/32 dev lo
EOF
chmod +x /etc/rc.local
2.4 创建测试页面
echo "Server: $(hostname) - $(date)" > /usr/share/nginx/html/index.html
启动和管理
1. 创建systemd服务
cat > /etc/systemd/system/keepalived.service << 'EOF'
[Unit]
Description=Keepalived
After=network.target[Service]
Type=forking
KillMode=process
PIDFile=/var/run/keepalived.pid
ExecStart=/usr/local/keepalived/sbin/keepalived -D
ExecReload=/bin/kill -HUP $MAINPID
Restart=always[Install]
WantedBy=multi-user.target
EOF
2. 启动服务
systemctl daemon-reload
systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived
验证和测试
1. 检查VIP绑定
ip addr show | grep 192.168.1.100
ip addr show lo | grep 192.168.1.100
2. 检查负载均衡
ipvsadm -ln
ipvsadm -l --stats
curl -I http://192.168.1.100
for i in {1..10}; doecho "请求 $i: $(curl -s http://192.168.1.100)"
done
3. 故障转移测试
3.1 测试主备切换
systemctl stop keepalived
ip addr show | grep 192.168.1.100
systemctl start keepalived
3.2 测试真实服务器故障
systemctl stop nginx
ipvsadm -ln
systemctl start nginx
故障排查
1. 查看日志
tail -f /var/log/keepalived/keepalived.log
journalctl -u keepalived -f
2. 检查配置
/usr/local/keepalived/sbin/keepalived -t
ip vrrp show
3. 网络连通性测试
telnet 192.168.1.10 80
telnet 192.168.1.11 80
telnet 192.168.1.12 80
tcpdump -i eth0 vrrp
常用命令
Keepalived管理
systemctl start keepalived
systemctl stop keepalived
systemctl restart keepalived
systemctl status keepalived
keepalived -t
/usr/local/keepalived/sbin/keepalived -D -d
IPVS管理
ipvsadm -ln
ipvsadm -l --stats
ipvsadm -l --connection
ipvsadm -C
网络管理
ip addr show | grep 192.168.1.100
ip route show
arp -n
重要说明
安装总结
| 服务器类型 | 需要安装的软件 | 配置内容 |
|---|
| 负载均衡器 (2台) | Keepalived + ipvsadm | VRRP + LVS + 健康检查 |
| 真实服务器 (3台) | Web服务 (Nginx/Apache) | VIP配置 + ARP参数 |
网络要求
- 网段: 所有服务器必须在同一网段 (192.168.1.0/24)
- 连通性: 负载均衡器与真实服务器之间网络连通
- 防火墙: 允许VRRP协议 (112) 和业务端口 (80/443)
- 带宽: 确保网络带宽满足业务需求
配置要点
- VIP管理: VIP只在负载均衡器之间浮动
- 真实服务器: 需要配置VIP到lo接口以响应请求
- 主备配置: 主备负载均衡器配置基本相同,只是优先级不同
- 健康检查: 自动检测服务器状态,剔除故障节点
负载均衡算法
| 算法 | 说明 | 适用场景 |
|---|
| rr | 轮询 | 服务器性能相近 |
| wrr | 加权轮询 | 服务器性能不同 |
| lc | 最少连接 | 连接数差异大 |
| wlc | 加权最少连接 | 性能不同且连接数差异大 |
| sh | 源地址哈希 | 需要会话保持 |
| dh | 目标地址哈希 | 缓存服务器 |
扩展建议
- 更多真实服务器: 可以添加更多真实服务器提高处理能力
- 多个VIP: 可以配置多个VIP和端口支持不同服务
- 权重调整: 根据服务器性能调整权重值
- 复杂健康检查: 可以添加HTTP、HTTPS等更复杂的健康检查
- 监控告警: 集成监控系统,及时发现问题
安全建议
- 防火墙配置: 只开放必要的端口
- 认证密码: 使用强密码进行VRRP认证
- 日志监控: 定期检查日志文件
- 备份配置: 定期备份配置文件
这个配置提供了完整的高可用负载均衡解决方案,确保服务的高可用性和可扩展性,适用于生产环境部署。