服务器集群教程:从零搭建高可用Web集群实操
服务器集群的核心思路是用多台服务器分担流量和风险,避免单点故障。
对零基础用户来说,最容易落地的起点是用 Nginx 做负载均衡,把请求分发到后端的多个 Web 节点。
下面以两台 Web 服务器和一台 Nginx 调度器为例,说明完整的搭建和验证过程。
准备条件与网络规划
开始之前需要确认几个前提。
所有服务器建议使用同一内网环境,系统以 CentOS 7 或 Ubuntu 20.04 为例,Nginx 版本不低于 1.18。
假设你已有三台机器,IP 规划如下:
- Nginx 调度器:
192.168.1.10 - Web 节点 A:
192.168.1.11 - Web 节点 B:
192.168.1.12
每台机器都需要关闭防火墙或放行 80 端口,并确保时间同步。
如果使用云服务器,安全组中也要放行 80 端口。
检查连通性可以用 ping 或 curl。
在 Web 节点上安装 Nginx 或 Apache 作为后端服务,这里以 Nginx 为例:
# CentOS
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
安装完成后,分别在两个节点上创建不同的测试页面,便于观察负载均衡效果。
例如节点 A 的 /usr/share/nginx/html/index.html 写入 This is node A,节点 B 写入 This is node B。
配置Nginx负载均衡
在调度器 192.168.1.10 上安装 Nginx,然后编辑配置文件。
路径通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf。
在 http 块内添加 upstream 定义,并在 server 块中配置代理转发:
http {
upstream web_cluster {
server 192.168.1.11:80 weight=1;
server 192.168.1.12:80 weight=1;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://web_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
保存后检查语法并重载:
sudo nginx -t
sudo systemctl reload nginx
如果 nginx -t 报错,通常是缺少分号或括号不匹配,根据提示行号修改即可。
验证集群是否生效
在任意一台能访问调度器的机器上,多次执行:
curl http://192.168.1.10
如果返回内容在 This is node A 和 This is node B 之间交替出现,说明负载均衡已经工作。
默认轮询策略下,请求会依次分发。
还可以用 ab 或 curl 循环测试:
for i in {1..10}; do curl -s http://192.168.1.10; done
观察输出是否均匀分布。
如果只返回一个节点的内容,检查另一个节点的 Nginx 是否启动、防火墙是否放行,以及 upstream 中的 IP 和端口是否正确。
常见问题与避坑建议
节点返回 502 Bad Gateway:说明 Nginx 无法连接到后端。
先在调度器上 curl http://192.168.1.11 测试连通性,再检查后端 Nginx 是否监听 80 端口(ss -tlnp | grep 80)。
如果后端服务正常,检查云服务器安全组或本机防火墙。
负载不均衡:默认轮询是均匀的,但如果某个节点响应慢,Nginx 会暂时减少分发。
可以调整 weight 权重,或改用 ip_hash 让同一 IP 固定访问同一节点。
修改配置后不生效:每次修改 upstream 或 server 块后,必须执行 nginx -t 检查语法,然后 systemctl reload nginx。
直接重启会中断现有连接,生产环境优先用 reload。
单点故障:上面的架构中调度器本身还是单点。
如果调度器宕机,整个集群不可用。
要进一步高可用,需要部署两台 Nginx 调度器,配合 Keepalived 做 VIP 漂移。
这属于进阶内容,建议先跑通基础集群再尝试。
下一步可以做什么
基础集群搭建完成后,可以继续扩展:给后端节点加上健康检查(Nginx 开源版支持被动检查,商业版支持主动检查),或者用 Docker 快速复制节点。
如果网站有数据库,还需要考虑数据库的主从复制,避免数据层成为新的单点。
适用条件提醒:本文示例适用于内网环境或云服务器内网互通场景,不涉及公网安全加固。
生产环境还需要配置 HTTPS、访问日志分析和监控告警。
如果只是学习测试,按上述步骤操作即可;
如果用于正式业务,建议先在测试环境完整验证,再迁移到生产。