1. 高可用负载均衡架构概述
在企业级Web服务部署中,高可用性和负载均衡是两个核心需求。通过将Keepalived、Nginx/Haproxy与后端Web服务器结合,可以构建一个既能够应对高并发访问,又具备故障自动恢复能力的生产级架构。
这套架构的核心价值在于:
- 业务连续性:通过Keepalived实现的VIP漂移机制,确保单节点故障时服务不中断
- 资源利用率:负载均衡器将请求合理分配到多个后端节点,避免单点过载
- 横向扩展:后端Web节点可以随时增减,适应业务规模变化
- 统一入口:对外暴露单一VIP地址,简化客户端配置和DNS管理
2. 基础环境准备
2.1 网络拓扑规划
我们采用经典的双层架构设计:
code复制客户端 → [Keepalived VIP] → [Nginx/Haproxy负载均衡层] → [Web应用层] → [NFS共享存储]
具体节点规划如下:
| 节点类型 | 主机名 | IP地址 | 角色说明 |
|---|---|---|---|
| LB | ha1 | 10.1.8.11 | 主负载均衡节点 |
| LB | ha2 | 10.1.8.12 | 备负载均衡节点 |
| Web | web1 | 10.1.8.21 | 应用服务器节点1 |
| Web | web2 | 10.1.8.22 | 应用服务器节点2 |
| Web | web3 | 10.1.8.23 | 应用服务器节点3 |
| Storage | nfs | 10.1.8.31 | 共享存储节点 |
| VIP | www | 10.1.8.100 | 虚拟IP(浮动地址) |
2.2 系统基础配置
主机名与DNS解析配置:
bash复制# 所有节点统一配置/etc/hosts
cat >> /etc/hosts <<EOF
10.1.8.11 ha1.cui.cloud ha1
10.1.8.12 ha2.cui.cloud ha2
10.1.8.21 web1.cui.cloud web1
10.1.8.22 web2.cui.cloud web2
10.1.8.23 web3.cui.cloud web3
10.1.8.31 nfs.cui.cloud nfs
10.1.8.100 www.cui.cloud www
EOF
网络配置自动化脚本:
bash复制#!/bin/bash
# sethost脚本:根据IP尾数自动配置主机名和网络
DOMAIN=cui.cloud
CON_NAME=ens32
ADDRESS=10.1.8.$1
GATEWAY=10.1.8.2
DNS=223.5.5.5
case $1 in
10) HOSTNAME=client.$DOMAIN ;;
1[12]) HOSTNAME=ha$[$1-10].$DOMAIN ;;
2[123]) HOSTNAME=web$[$1-20].$DOMAIN ;;
31) HOSTNAME=nfs.$DOMAIN ;;
esac
hostnamectl set-hostname $HOSTNAME
nmcli connection modify ${CON_NAME} \
ipv4.addresses $ADDRESS/24 \
ipv4.gateway $GATEWAY \
ipv4.dns $DNS
nmcli connection up ${CON_NAME}
提示:生产环境中建议使用内部DNS服务器而非hosts文件,便于后期维护。此处的配置方式适用于实验环境快速搭建。
3. 后端Web服务部署
3.1 Nginx基础安装
在所有Web节点执行:
bash复制yum install -y nginx
echo "Hello World From $(hostname)" > /usr/share/nginx/html/index.html
systemctl enable --now nginx
验证各节点服务:
bash复制# 测试命令示例
curl http://10.1.8.21
curl http://10.1.8.22
curl http://10.1.8.23
3.2 共享存储配置
NFS服务器配置:
bash复制yum install -y nfs-utils
# 创建专用用户和目录
groupadd -g 996 nginx
useradd -u 998 -s /sbin/nologin -g nginx nginx
mkdir -p /shares/web
chown nginx:nginx /shares/web/
echo "Hello World From NFS" > /shares/web/index.html
# 配置导出目录
echo '/shares/web 10.1.8.0/24(rw)' >> /etc/exports
systemctl enable --now nfs-server
Web节点挂载配置:
bash复制yum install -y nfs-utils
showmount -e nfs # 验证NFS可访问
# 配置自动挂载
echo 'nfs:/shares/web /usr/share/nginx/html/ nfs defaults 0 0' >> /etc/fstab
mount -a
# 验证挂载
df -h /usr/share/nginx/html/
注意事项:生产环境中应考虑NFS的性能瓶颈问题,高并发场景建议使用分布式文件系统如GlusterFS或CephFS替代NFS。
4. 负载均衡层实现
4.1 Nginx负载均衡配置
基础负载均衡配置:
nginx复制upstream www {
server web1.cui.cloud:80;
server web2.cui.cloud:80;
server web3.cui.cloud:80;
}
server {
listen 80;
server_name www.cui.cloud;
location / {
proxy_pass http://www;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡算法选择:
- 轮询(默认):均匀分配请求
- 加权轮询:根据服务器性能分配不同权重
- IP哈希:保持会话一致性
- 最少连接:动态分配请求到最空闲节点
配置验证:
bash复制for i in {1..30}; do curl -s http://10.1.8.11; done | sort | uniq -c
4.2 Haproxy替代方案
基础配置:
haproxy复制frontend web_frontend
bind *:80
default_backend web_backend
backend web_backend
balance roundrobin
server web1 web1.cui.cloud:80 check
server web2 web2.cui.cloud:80 check
server web3 web3.cui.cloud:80 check
高级流量分割:
haproxy复制frontend web_frontend
bind *:80
acl txt path_end -i .txt
use_backend txt_backend if txt
default_backend web_backend
backend txt_backend
server web1 web1.cui.cloud:80 check
server web2 web2.cui.cloud:80 check
TCP层负载均衡示例(SSH服务):
haproxy复制listen ssh
mode tcp
bind *:1022
balance roundrobin
server web1 web1.cui.cloud:22 check
server web2 web2.cui.cloud:22 check
server web3 web3.cui.cloud:22 check
5. 高可用实现
5.1 Keepalived配置
主节点配置(ha1):
nginx复制! Configuration File for keepalived
global_defs {
router_id ha1
}
vrrp_instance web {
state MASTER
interface ens32
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.8.100/24
}
}
备节点配置(ha2):
nginx复制! Configuration File for keepalived
global_defs {
router_id ha2
}
vrrp_instance web {
state BACKUP
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.8.100/24
}
}
服务管理:
bash复制systemctl enable --now keepalived
ip addr show ens32 # 查看VIP绑定情况
5.2 故障转移测试
- 在主节点停止keepalived服务
- 观察VIP是否自动迁移到备节点
- 检查服务是否仍然可用
- 恢复主节点,观察VIP是否回切
实操心得:生产环境中建议配置邮件报警通知,及时获知主备切换事件。同时需要监控备节点的资源使用情况,避免主备切换后性能不足。
6. LVS负载均衡方案
6.1 环境准备
后端节点ARP配置:
bash复制# 在每个Web节点执行
nmcli connection add type dummy ifname dummy con-name dummy \
ipv4.method manual ipv4.addresses 10.1.8.100/32
nmcli connection up dummy
cat >> /etc/sysctl.conf <<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.dummy.arp_ignore = 1
net.ipv4.conf.dummy.arp_announce = 2
EOF
sysctl -p
6.2 LVS配置
安装与基础配置:
bash复制yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm
创建负载均衡规则:
bash复制ipvsadm -A -t 10.1.8.100:80 -s rr
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.21:80
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.22:80
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.23:80
ipvsadm-save -n > /etc/sysconfig/ipvsadm
验证配置:
bash复制ipvsadm -Ln
7. 架构优化建议
7.1 性能调优
-
Nginx调优参数:
nginx复制worker_processes auto; worker_connections 10240; keepalive_timeout 65; -
Haproxy监控界面:
haproxy复制listen stats bind *:1936 stats enable stats uri / stats auth admin:securepassword
7.2 安全加固
-
防火墙规则:
bash复制
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload -
VIP访问控制:
nginx复制location /admin { allow 10.1.8.0/24; deny all; }
7.3 监控方案
-
基础监控项:
- 各节点系统资源(CPU、内存、磁盘)
- 服务进程状态
- VIP漂移记录
- 后端节点健康状态
-
业务监控项:
- 请求响应时间
- 错误率统计
- 流量波动监控
8. 常见问题排查
8.1 VIP无法访问
- 检查keepalived进程状态
- 验证防火墙规则
- 查看系统日志/var/log/messages
- 测试直接访问后端节点是否正常
8.2 负载不均衡
- 检查负载均衡算法配置
- 验证后端节点健康检查
- 查看各节点系统负载
- 检查是否有会话保持配置
8.3 NFS性能问题
- 检查网络延迟
- 调整NFS挂载参数(noatime,nodiratime)
- 考虑使用性能更好的存储方案
- 监控NFS服务器资源使用情况
在实际生产环境中,这套架构已经稳定支撑了日均百万级的PV访问量。关键是要做好容量规划,确保在业务增长时能够及时扩展后端节点。同时建议实施完整的监控告警系统,确保能够及时发现并处理潜在问题。