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 下载和编译安装
bash
复制代码
# 创建安装目录
mkdir -p /opt/keepalived
cd /opt/keepalived
# 下载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
# 安装依赖 (CentOS/RHEL)
yum install -y gcc make openssl-devel libnl-devel popt-devel ipvsadm
# 安装依赖 (Ubuntu/Debian)
# apt-get install -y gcc make libssl-dev libnl-3-dev libnl-genl-3-dev 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)
bash
复制代码
vim /etc/keepalived/keepalived.conf
conf
复制代码
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
vrrp_garp_master_delay 1
vrrp_garp_master_repeat 1
}
# VRRP实例配置
vrrp_instance VI_1 {
state MASTER
interface eth0 # 修改为实际网卡名称
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # 修改为实际VIP地址
}
}
# HTTP虚拟服务器配置
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr # 轮询算法
lb_kind DR # 直接路由模式
persistence_timeout 50
protocol TCP
# 真实服务器1
real_server 192.168.1.10 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
# 真实服务器2
real_server 192.168.1.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
# 真实服务器3
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# HTTPS虚拟服务器配置 (可选)
virtual_server 192.168.1.100 443 {
delay_loop 6
lb_algo wrr # 加权轮询算法
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 443 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.11 443 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.12 443 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
1.3 备节点配置 (服务器2 - Backup)
bash
复制代码
vim /etc/keepalived/keepalived.conf
conf
复制代码
! Configuration File for keepalived
global_defs {
router_id LVS_BACKUP
vrrp_garp_master_delay 1
vrrp_garp_master_repeat 1
}
# VRRP实例配置
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 修改为实际网卡名称
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # 修改为实际VIP地址
}
}
# 虚拟服务器配置(与Master相同)
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# HTTPS虚拟服务器配置(与Master相同)
virtual_server 192.168.1.100 443 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 443 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.11 443 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.12 443 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2. 真实服务器配置 (服务器3、4、5)
2.1 安装Web服务
bash
复制代码
# CentOS/RHEL
yum install -y nginx
# Ubuntu/Debian
# apt-get install nginx
# 启动Web服务
systemctl start nginx
systemctl enable nginx
2.2 配置ARP参数
bash
复制代码
# 配置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接口
bash
复制代码
# 添加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 创建测试页面
bash
复制代码
# 创建测试页面
echo "Server: $(hostname) - $(date)" > /usr/share/nginx/html/index.html
启动和管理
1. 创建systemd服务
bash
复制代码
# 在负载均衡器上创建服务文件
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. 启动服务
bash
复制代码
# 重新加载systemd
systemctl daemon-reload
# 启动Keepalived
systemctl start keepalived
# 设置开机自启
systemctl enable keepalived
# 查看状态
systemctl status keepalived
验证和测试
1. 检查VIP绑定
bash
复制代码
# 在负载均衡器上检查VIP
ip addr show | grep 192.168.1.100
# 在真实服务器上检查VIP
ip addr show lo | grep 192.168.1.100
2. 检查负载均衡
bash
复制代码
# 查看IPVS规则
ipvsadm -ln
# 查看IPVS统计
ipvsadm -l --stats
# 测试访问
curl -I http://192.168.1.100
# 多次访问查看负载均衡效果
for i in {1..10}; do
echo "请求 $i: $(curl -s http://192.168.1.100)"
done
3. 故障转移测试
3.1 测试主备切换
bash
复制代码
# 在主负载均衡器上停止Keepalived
systemctl stop keepalived
# 检查备负载均衡器是否接管VIP
ip addr show | grep 192.168.1.100
# 恢复主负载均衡器
systemctl start keepalived
3.2 测试真实服务器故障
bash
复制代码
# 停止某个真实服务器的Web服务
systemctl stop nginx
# 检查IPVS是否自动剔除该服务器
ipvsadm -ln
# 恢复Web服务
systemctl start nginx
故障排查
1. 查看日志
bash
复制代码
# 查看Keepalived日志
tail -f /var/log/keepalived/keepalived.log
# 查看systemd日志
journalctl -u keepalived -f
2. 检查配置
bash
复制代码
# 检查配置文件语法
/usr/local/keepalived/sbin/keepalived -t
# 查看VRRP状态
ip vrrp show
3. 网络连通性测试
bash
复制代码
# 测试真实服务器连通性
telnet 192.168.1.10 80
telnet 192.168.1.11 80
telnet 192.168.1.12 80
# 测试VRRP协议
tcpdump -i eth0 vrrp
常用命令
Keepalived管理
bash
复制代码
# 启动服务
systemctl start keepalived
# 停止服务
systemctl stop keepalived
# 重启服务
systemctl restart keepalived
# 查看状态
systemctl status keepalived
# 查看配置
keepalived -t
# 手动启动(调试模式)
/usr/local/keepalived/sbin/keepalived -D -d
IPVS管理
bash
复制代码
# 查看IPVS规则
ipvsadm -ln
# 查看IPVS统计
ipvsadm -l --stats
# 查看IPVS连接
ipvsadm -l --connection
# 清空IPVS规则
ipvsadm -C
网络管理
bash
复制代码
# 查看VIP绑定
ip addr show | grep 192.168.1.100
# 查看路由表
ip route show
# 查看ARP表
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认证
日志监控 : 定期检查日志文件
备份配置 : 定期备份配置文件
这个配置提供了完整的高可用负载均衡解决方案,确保服务的高可用性和可扩展性,适用于生产环境部署。