1. 高可用集群架构设计解析
在企业级Web服务部署中,单点故障是必须解决的核心问题。我们设计的这套LVS+Keepalived+DNS+Web+NFS集群架构,通过多层次的冗余设计实现了服务的高可用性。整个架构可以分为四个关键层级:
-
负载均衡层:采用LVS(Linux Virtual Server)实现四层负载均衡,配合Keepalived实现双机热备。这一层使用DR(Direct Routing)模式,特点是性能损耗小,后端真实服务器直接响应客户端,避免了LVS成为网络瓶颈。
-
应用服务层:由三台Nginx Web服务器组成,通过NFS共享存储保证内容一致性。这种设计既实现了横向扩展能力,又解决了多节点间内容同步的问题。特别需要注意的是,我们为每台Web节点配置了ARP抑制参数,这是DR模式正常工作的关键。
-
数据存储层:采用NFS实现集中式存储。虽然NFS本身存在单点问题,但在实际生产环境中,可以通过NFS集群或者分布式文件系统(如GlusterFS)来进一步提升可靠性。本方案中我们通过Keepalived的NFS健康检查机制,在NFS故障时能及时隔离受影响节点。
-
DNS解析层:部署主从DNS服务器,通过视图分离实现内外网解析隔离。DNS服务也通过Keepalived实现了VIP漂移,确保解析服务的高可用。特别优化了DNS的TTL值,设置为1小时(3600秒),既保证了故障切换速度,又避免了过短的TTL导致客户端频繁查询。
关键设计原则:每个服务组件都至少有一个冗余备份,且故障切换过程对终端用户透明。通过VIP(Virtual IP)机制,前端访问入口始终保持不变,后端故障切换由集群自动完成。
2. 环境准备与系统初始化
2.1 主机规划与网络配置
集群共使用8台虚拟机,具体规划如下表所示:
| 节点角色 | 主机名 | IP地址 | 核心配置建议 |
|---|---|---|---|
| Web节点1 | web01 | 192.168.72.201 | 4vCPU/8GB内存 |
| Web节点2 | web02 | 192.168.72.202 | 4vCPU/8GB内存 |
| Web节点3 | web03 | 192.168.72.203 | 4vCPU/8GB内存 |
| DNS主节点 | dns-master | 192.168.72.107 | 2vCPU/4GB内存 |
| DNS从节点 | dns-slave | 192.168.72.108 | 2vCPU/4GB内存 |
| LB主节点 | lb-master | 192.168.72.105 | 4vCPU/8GB内存+多队列网卡 |
| LB备节点 | lb-backup | 192.168.72.106 | 4vCPU/8GB内存+多队列网卡 |
| NFS存储节点 | nfs-server | 192.168.72.210 | 8vCPU/16GB内存+SSD存储 |
网络配置特别注意:
- 所有节点需配置千兆及以上网络环境
- 建议为NFS流量配置单独的网络接口或VLAN
- 确保各节点间时钟同步(chrony或NTP服务)
2.2 系统初始化脚本详解
我们使用统一的初始化脚本确保环境一致性。以下是对脚本关键部分的解析:
bash复制#!/bin/bash
# 初始化脚本核心功能模块
# 1. 基础环境检测
check_root() {
[ $(id -u) -eq 0 ] || { echo "必须使用root执行"; exit 1; }
}
# 2. 主机名设置
set_hostname() {
hostnamectl set-hostname $1
sed -i "/^127.0.1.1/d" /etc/hosts
echo "$(hostname -I | awk '{print $1}') $1" >> /etc/hosts
}
# 3. 安全策略调整
adjust_security() {
# SELinux设置为宽松模式
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
# 防火墙放行必要端口
firewall-cmd --permanent --add-service={http,https,dns,nfs}
firewall-cmd --reload
}
# 4. 静态IP配置
config_network() {
nmcli con mod $CON_NAME \
ipv4.addresses $IP/24 \
ipv4.gateway $GATEWAY \
ipv4.dns "$DNS_SERVERS" \
ipv4.method manual \
connection.autoconnect yes
nmcli con up $CON_NAME
}
# 主执行流程
main() {
check_root
set_hostname $HOSTNAME
adjust_security
config_network
# 其他初始化操作...
}
注意事项:生产环境中不建议完全关闭防火墙,而应该精确放行必要的服务和端口。NFS需要开放2049端口及rpcbind使用的随机端口范围(通过
firewall-cmd --add-service=nfs自动处理)。
3. NFS存储服务部署
3.1 NFS服务端配置
NFS服务端的配置要点在于权限控制和性能优化。以下是详细配置步骤:
- 安装必要软件包:
bash复制dnf install -y nfs-utils rpcbind
- 创建共享目录并设置权限:
bash复制mkdir -p /data/webroot
chown -R nfsnobody:nfsnobody /data/webroot
chmod -R 1777 /data/webroot # 设置粘滞位
- 配置/etc/exports文件:
bash复制cat > /etc/exports <<EOF
/data/webroot 192.168.72.0/24(rw,sync,no_root_squash,no_subtree_check)
EOF
关键参数说明:
rw:读写权限sync:同步写入,保证数据一致性no_root_squash:允许root用户保持权限no_subtree_check:提高性能,禁用子树检查
- 启动服务并验证:
bash复制systemctl enable --now rpcbind nfs-server
exportfs -v # 验证共享
3.2 NFS客户端挂载
Web节点上的挂载配置需要特别注意稳定性参数:
bash复制# 创建挂载点
mkdir -p /usr/share/nginx/html
# 临时挂载测试
mount -t nfs -o vers=4.2 192.168.72.210:/data/webroot /usr/share/nginx/html
# 永久挂载配置(/etc/fstab)
echo "192.168.72.210:/data/webroot /usr/share/nginx/html nfs vers=4.2,rsize=65536,wsize=65536,hard,intr,timeo=600,retrans=2,_netdev 0 0" >> /etc/fstab
关键挂载选项解析:
vers=4.2:使用NFSv4.2协议,性能更好rsize/wsize=65536:读写缓冲区大小设置为64KBhard:在服务器不可用时持续重试_netdev:标识为网络设备,避免启动时挂载失败
4. Web节点配置与优化
4.1 Nginx基础配置
统一的三台Web节点配置如下:
nginx复制server {
listen 80;
server_name www.chengke.com;
root /usr/share/nginx/html;
index index.html;
access_log /var/log/nginx/chengke.access.log main;
error_log /var/log/nginx/chengke.error.log warn;
location / {
try_files $uri $uri/ =404;
add_header X-Backend $hostname; # 用于调试显示实际响应的后端
}
location ~ /\.ht {
deny all;
}
}
4.2 VIP与ARP参数配置
DR模式需要特别配置ARP参数以避免IP冲突:
bash复制#!/bin/bash
VIP=192.168.72.200
# 配置VIP
ip addr add $VIP/32 dev lo label lo:1
# 配置ARP参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
EOF
sysctl -p
参数解释:
arp_ignore=1:只响应目标IP配置在接收网卡上的ARP请求arp_announce=2:总是使用最佳本地地址进行ARP宣告
5. DNS主从服务部署
5.1 主DNS服务器配置
- 安装BIND软件:
bash复制dnf install -y bind bind-utils
- 主配置文件/etc/named.conf:
named复制options {
listen-on port 53 { 127.0.0.1; 192.168.72.107; };
directory "/var/named";
allow-query { localhost; 192.168.72.0/24; };
recursion no; # 关闭递归查询
dnssec-enable no; # 实验环境关闭DNSSEC
// 转发外部查询
forwarders { 8.8.8.8; 223.5.5.5; };
};
zone "chengke.com" IN {
type master;
file "chengke.com.zone";
allow-transfer { 192.168.72.108; }; # 只允许从服务器传输
};
- 区域文件/var/named/chengke.com.zone:
bind复制$TTL 3600
@ IN SOA ns1.chengke.com. admin.chengke.com. (
2023062001 ; serial
3600 ; refresh
900 ; retry
604800 ; expire
3600 ; minimum
)
NS ns1.chengke.com.
NS ns2.chengke.com.
ns1 A 192.168.72.107
ns2 A 192.168.72.108
www A 192.168.72.200
5.2 从DNS服务器配置
从服务器配置与主服务器类似,关键区别在于区域定义:
named复制zone "chengke.com" IN {
type slave;
masters { 192.168.72.107; };
file "slaves/chengke.com.zone";
};
验证数据同步:
bash复制ls -l /var/named/slaves/ # 应看到区域文件
dig @192.168.72.108 www.chengke.com # 应能正确解析
6. LVS+Keepalived负载均衡配置
6.1 LVS核心配置
LVS配置主要通过ipvsadm命令实现:
bash复制# 清空现有规则
ipvsadm -C
# 添加Web服务VIP
ipvsadm -A -t 192.168.72.200:80 -s rr -p 60
# 添加真实服务器
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.201:80 -g
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.202:80 -g
ipvsadm -a -t 192.168.72.200:80 -r 192.168.72.203:80 -g
# 添加DNS服务VIP
ipvsadm -A -u 192.168.72.100:53 -s rr
# 添加DNS真实服务器
ipvsadm -a -u 192.168.72.100:53 -r 192.168.72.107:53 -g
ipvsadm -a -u 192.168.72.100:53 -r 192.168.72.108:53 -g
# 保存配置
ipvsadm-save -n > /etc/sysconfig/ipvsadm
6.2 Keepalived配置详解
主备节点的Keepalived配置主要差异在state和priority参数。以下是主节点配置示例:
keepalived复制global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_WEB {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.72.200/32
}
}
virtual_server 192.168.72.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.72.201 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
# 其他real_server配置...
}
7. 集群测试与验证
7.1 基础功能测试
- Web服务测试:
bash复制for i in {1..10}; do
curl -s http://www.chengke.com | grep "Server IP"
done
应能看到不同Web节点的响应,证明负载均衡生效。
- DNS解析测试:
bash复制dig @192.168.72.100 www.chengke.com +short
应返回VIP地址192.168.72.200。
7.2 故障转移测试
- 模拟LVS主节点故障:
bash复制# 在主节点执行
systemctl stop keepalived
# 在备节点验证VIP接管
ip addr show ens160 | grep 192.168.72.200
- 模拟Web节点故障:
bash复制# 停止一个Web节点的Nginx
systemctl stop nginx
# 验证LVS自动剔除故障节点
ipvsadm -ln | grep 192.168.72.20[1-3]
故障节点的权重应变为0,不再接收新连接。
8. 生产环境优化建议
-
NFS性能优化:
- 使用noatime挂载选项减少元数据操作
- 调整nfsd线程数匹配CPU核心数
- 考虑使用RDMA协议替代传统TCP(需硬件支持)
-
LVS调优:
- 根据业务特点选择合适的调度算法(如wlc加权最小连接)
- 开启内核TCP优化参数:
bash复制echo "net.ipv4.vs.expire_nodest_conn=1" >> /etc/sysctl.conf
-
监控方案:
- 实现四层(LVS)和七层(Nginx)健康检查结合
- 部署Prometheus监控各节点状态
- 配置日志集中收集分析
-
安全加固:
- 为NFS配置Kerberos认证
- 限制LVS管理端口访问
- 定期更新所有节点的安全补丁
这套高可用集群架构经过实际生产环境验证,能够支撑中等规模的Web业务。根据业务增长,未来可以考虑引入容器化部署和自动扩缩容机制,进一步提升系统的弹性和可维护性。