Keepalived 多节点负载均衡配置

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认证
  • 日志监控: 定期检查日志文件
  • 备份配置: 定期备份配置文件

这个配置提供了完整的高可用负载均衡解决方案,确保服务的高可用性和可扩展性,适用于生产环境部署。

相关推荐
i***48615 小时前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
Fɪʀᴇᴡᴏʀᴋs6 小时前
Oceanbase数据库—基于社区版本的数据库集群管理
运维·数据库·oceanbase
HalvmånEver6 小时前
Linux:基础开发工具(五)
linux·运维·服务器
q***58196 小时前
基础篇:Linux安装redis教程(详细)
linux·运维·redis
小二·6 小时前
Linux 高频面试题(50道 + 详细答案)
linux·运维·服务器
z***39626 小时前
Nginx中如何配置WebSocket代理?
运维·websocket·nginx
忆林5207 小时前
请求服务任何资源(静态/动态)都返回主页数据?多nginx针对单域名的多服务配置
运维·nginx
Splashtop高性能远程控制软件7 小时前
行业观察 | 微软修复63个漏洞,包含零日与CVSS 9.8关键漏洞
运维·安全·microsoft·自动化·远程桌面·splashtop
q***4648 小时前
离线安装 Nginx
运维·数据库·nginx
HalvmånEver8 小时前
Linux:基础开发工具(六)
linux·运维·服务器