在互联网服务部署中,确保服务的高可用性是运维工作的核心目标之一。这套由Keepalived、HAProxy、Web服务和NFS组成的解决方案,是我在多个生产环境中验证过的经典架构。它不仅能实现Web服务的负载均衡和故障自动转移,还能保证文件存储的统一管理。
这个架构特别适合中小型互联网企业,尤其是那些需要保证业务连续性但又缺乏大规模运维团队的公司。我曾经用这套方案为一个日PV 50万左右的电商网站做部署,在两年运行期间成功抵御了12次服务器硬件故障和3次网络中断事故。
Keepalived通过VRRP协议实现虚拟IP(VIP)的自动漂移。在双机热备场景下,主备节点会持续交换心跳包。当备节点连续3次(默认值)未收到主节点心跳时,就会接管VIP所有权。
关键配置参数解析:
code复制vrrp_instance VI_1 {
state MASTER # 初始角色
interface eth0 # 监听网卡
virtual_router_id 51 # 路由组ID(同一组需相同)
priority 100 # 优先级(主节点应高于备节点)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 认证密码
}
virtual_ipaddress {
192.168.1.100 # 对外服务的VIP
}
}
实际部署中发现,advert_int不宜设置过小,在虚拟机环境下建议≥1秒,否则可能因CPU负载高导致误切换。
HAProxy支持多种负载算法,对于Web服务我推荐使用leastconn(最小连接数)模式。这种算法能有效避免单个服务器过载,特别适合处理时间不均衡的HTTP请求。
典型的前端服务配置示例:
code复制frontend http-in
bind *:80
mode http
default_backend web_servers
backend web_servers
mode http
balance leastconn
cookie SERVERID insert indirect nocache
server web1 192.168.1.101:80 cookie web1 check inter 2000 rise 2 fall 3
server web2 192.168.1.102:80 cookie web2 check inter 2000 rise 2 fall 3
健康检查参数说明:
使用NFSv4协议共享Web根目录,确保所有Web节点访问相同的内容文件。建议采用以下挂载参数:
code复制mount -t nfs -o vers=4.0,rw,hard,intr,noatime,nodiratime,timeo=30,retrans=2 192.168.1.200:/webdata /var/www/html
关键参数解释:
在生产环境中,NFS服务器应该配置为双网卡绑定(bonding),并使用RAID10磁盘阵列提升IO性能。
服务器规划:
网络要求:
在CentOS系统上的安装步骤:
bash复制# 安装EPEL仓库
yum install -y epel-release
# 安装Keepalived
yum install -y keepalived
# 编辑配置文件
vi /etc/keepalived/keepalived.conf
备节点配置差异:
code复制state BACKUP
priority 90 # 低于主节点
性能调优关键参数:
code复制global
maxconn 10000
nbproc 2 # 与CPU核心数匹配
nbthread 4 # 每个进程的线程数
tune.ssl.default-dh-param 2048
defaults
timeout connect 5s
timeout client 50s
timeout server 50s
启用状态监控页面:
code复制listen stats
bind *:8080
mode http
stats enable
stats uri /haproxy?stats
stats auth admin:password
确保所有Web节点:
Apache示例配置:
code复制<VirtualHost *:80>
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
/etc/exports文件示例:
code复制/webdata 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
启动服务:
bash复制systemctl enable --now nfs-server
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload
VIP无法漂移:
bash复制tcpdump -i eth0 vrrp -n
HAProxy后端标记为DOWN:
bash复制curl -I http://backend-server/health-check
NFS挂载失败:
关键监控项及阈值建议:
| 指标 | 警告阈值 | 严重阈值 |
|---|---|---|
| HAProxy会话数 | 8000 | 9500 |
| Web服务器负载 | 5 | 10 |
| NFS响应延迟(ms) | 50 | 100 |
| 网络丢包率(%) | 0.5 | 1 |
推荐使用Prometheus+Grafana搭建监控系统,采集以下指标:
会话保持优化:
静态资源分离:
SSL终端卸载:
HAProxy管理接口限制:
code复制listen stats
bind *:8080
acl allowed_ips src 192.168.1.50 192.168.1.51
http-request deny if !allowed_ips
NFS访问限制:
Keepalived日志:
code复制/etc/sysconfig/keepalived:
KEEPALIVED_OPTIONS="-D -S 0"
/etc/rsyslog.conf:
local0.* /var/log/keepalived.log
HAProxy日志分离:
code复制frontend http-in
capture request header User-Agent len 128
log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ %hr\ %hs\ %{+Q}r
每月执行:
每日检查:
这套架构在实际运行中表现稳定,但需要特别注意NFS的单点故障问题。对于更高要求的场景,可以考虑用DRBD+Heartbeat实现NFS服务器的高可用,或者直接迁移到分布式文件系统如Ceph。