1. 高可用集群架构设计解析
这个方案的核心在于构建一个能够承载高并发访问且具备故障自愈能力的Web服务体系。整套系统由四个关键组件构成:LVS实现四层负载均衡、Keepalived保障服务高可用、DNS作为流量调度入口、NFS提供共享存储支持。
在实际生产环境中,我们经常遇到单点故障导致的业务中断问题。去年我们电商大促期间,就曾因某台Web服务器宕机导致部分用户无法结账。这套架构通过多层次的冗余设计,将单点故障率降低了90%以上。
2. 基础环境准备
2.1 服务器规划建议
建议采用至少6台物理服务器:
- 2台做LVS+Keepalived(DR模式)
- 2台做Web应用服务器
- 1台NFS存储服务器
- 1台备用服务器
硬件配置方面,LVS节点需要多网卡设计(建议千兆以上),Web服务器内存建议32G起步,NFS服务器需要配备RAID5阵列。
2.2 系统初始化配置
所有节点需要统一进行以下配置:
bash复制# 关闭SELinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld
# 配置时间同步
yum install -y ntpdate
ntpdate ntp1.aliyun.com
echo "*/30 * * * * /usr/sbin/ntpdate ntp1.aliyun.com" >> /var/spool/cron/root
# 优化内核参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.ip_local_port_range = 1024 65000
EOF
sysctl -p
3. LVS负载均衡部署
3.1 DR模式配置详解
DR(Direct Routing)模式是性能最好的LVS工作模式,其特点是:
- 请求流量经过LVS调度
- 响应流量直接返回客户端
- 需要配置VIP和RIP在不同网段
配置示例:
bash复制# 安装ipvsadm
yum install -y ipvsadm
# 配置VIP(在LVS主备节点)
ifconfig eth0:0 192.168.1.100 netmask 255.255.255.255 up
# 添加路由规则
route add -host 192.168.1.100 dev eth0:0
# 配置ipvs规则
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.101:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.102:80 -g
3.2 健康检查配置
建议使用TCP_CHECK方式进行健康检测:
bash复制ipvsadm -E -t 192.168.1.100:80 -s rr -p 60
ipvsadm -e -t 192.168.1.100:80 -r 192.168.2.101:80 -g -w 3 -x 5 -y 2
4. Keepalived高可用实现
4.1 VRRP协议配置
主节点配置示例:
conf复制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/24 dev eth0 label eth0:0
}
}
4.2 故障切换策略
建议设置以下检测脚本:
bash复制#!/bin/bash
if [ $(ps -ef | grep nginx | grep -v grep | wc -l) -eq 0 ]; then
systemctl stop keepalived
fi
5. DNS智能解析配置
5.1 多线路解析实现
Bind9配置示例:
bind复制$TTL 600
@ IN SOA ns1.example.com. admin.example.com. (
2023081501 ; serial
3600 ; refresh
900 ; retry
604800 ; expire
86400 ; minimum
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
www IN A 192.168.1.100
IN A 192.168.1.101
6. NFS共享存储部署
6.1 服务端配置
bash复制# 安装服务
yum install -y nfs-utils rpcbind
# 创建共享目录
mkdir -p /data/webroot
chown -R nfsnobody:nfsnobody /data/webroot
# 配置exports
cat >> /etc/exports <<EOF
/data/webroot 192.168.2.0/24(rw,sync,no_root_squash)
EOF
# 启动服务
systemctl enable --now rpcbind nfs-server
6.2 客户端挂载
bash复制yum install -y nfs-utils
mount -t nfs 192.168.2.200:/data/webroot /var/www/html
echo "192.168.2.200:/data/webroot /var/www/html nfs defaults 0 0" >> /etc/fstab
7. 系统联调测试
7.1 故障转移测试
- 模拟LVS主节点宕机:
bash复制systemctl stop keepalived
- 观察VIP漂移时间(应<3秒)
- 检查业务连续性
7.2 性能压测建议
使用wrk进行压力测试:
bash复制wrk -t4 -c1000 -d60s http://www.example.com/
8. 运维监控方案
8.1 关键监控指标
建议监控以下指标:
- LVS:连接数、每秒请求数
- Keepalived:VRRP状态
- NFS:IO延迟、吞吐量
- Web:响应时间、错误率
8.2 告警规则示例
Prometheus告警规则:
yaml复制groups:
- name: LVS-Alert
rules:
- alert: LVSHighDropRate
expr: rate(ip_vs_conn{proto="TCP"}[1m]) > 1000
for: 5m
labels:
severity: critical
annotations:
summary: "LVS连接数异常升高"
9. 常见问题排查
9.1 VIP无法访问
排查步骤:
- 检查ipvsadm -Ln输出
- 验证后端服务器arp_ignore设置
- 测试直接访问后端服务器
9.2 NFS挂载失败
典型错误处理:
bash复制# 查看挂载日志
dmesg | grep nfs
# 检查服务端口
rpcinfo -p 192.168.2.200
# 临时解决方案
umount -lf /var/www/html
10. 架构优化建议
- LVS层面:
- 开启SYN Cookie防护
- 调整TCP超时参数
- Web层面:
- 增加本地缓存
- 启用HTTP/2
- 存储层面:
- 考虑Ceph替代NFS
- 增加SSD缓存层
这套架构在我们生产环境已经稳定运行3年,最高承载过百万级并发请求。关键是要做好容量规划和定期演练,真正遇到故障时才能从容应对。