CentOS 作为一款稳定可靠的 Linux 发行版,常被用于企业级服务器的搭建,负载均衡作为提升服务可用性和处理能力的关键技术,在 CentOS 系统上的实现有着成熟的方案,本文将详细介绍如何在 CentOS 系统上搭建基于 Nginx 的负载均衡环境,包括环境准备、软件安装、配置优化及测试验证等步骤,帮助读者快速掌握负载均衡的搭建方法。

环境准备与系统初始化
在开始搭建负载均衡之前,需做好充分的环境准备,建议选择 CentOS 7 或更高版本,确保系统内核稳定且支持所需的功能,准备至少三台服务器:一台作为负载均衡器(LB),两台作为后端 Web 服务器(Node1 和 Node2),所有服务器的网络需互通,建议配置在同一内网段,LB 使用 192.168.1.10,Node1 使用 192.168.1.20,Node2 使用 192.168.1.30。
对每台服务器进行基础初始化,关闭防火墙和 SELinux,避免权限问题影响服务运行:
systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
更新系统软件包并安装必要的依赖工具:
yum update -y && yum install -y wget vim gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
确保所有服务器时间同步,可通过 NTP 服务或 ntpdate 命令校准时间,避免因时间差异导致日志或证书问题。
Nginx 的安装与编译
负载均衡器选择 Nginx,因其具有高性能、稳定性和丰富的负载均衡算法,Nginx 官方未提供 CentOS 的直接 RPM 包,需通过编译安装,在负载均衡器服务器上下载 Nginx 源码包:
wget http://nginx.org/download/nginx-1.22.1.tar.gz tar -zxvf nginx-1.22.1.tar.gz && cd nginx-1.22.1
编译安装时,需指定安装路径及常用模块支持:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream make && make install
安装完成后,创建 Nginx 服务脚本并设置为开机自启:
vim /usr/lib/systemd/system/nginx.service
在脚本中配置 Nginx 的启动路径、进程管理等参数,然后执行:
systemctl daemon-reload && systemctl start nginx && systemctl enable nginx
访问负载均衡器的 IP 地址(http://192.168.1.10),若出现 Nginx 欢迎页面,则安装成功。

负载均衡配置详解
Nginx 的负载均衡配置核心在于 upstream 模块和 proxy_pass 指令,编辑 Nginx 主配置文件 /usr/local/nginx/conf/nginx.conf,在 http 块中定义后端服务器池及负载策略:
定义 upstream 服务器池
在 http 块内添加如下配置:
upstream backend_servers {
server 192.168.1.20:80 weight=1; # Node1,权重为1
server 192.168.1.30:80 weight=2; # Node2,权重为2
# 可选参数:max_fails=3 fail_timeout=30s backup(备份服务器)
} weight:权重值越高,分配的请求越多;max_fails:最大失败次数,超过则标记为不可用;backup:标记为备份服务器,仅在其他服务器不可用时启用。
配置虚拟主机与负载策略
在 server 块中配置代理转发,使用 proxy_pass 指向 upstream 池:
server {
listen 80;
server_name 192.168.1.10;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
} proxy_set_header:用于传递客户端真实 IP 和请求头,便于后端服务器识别访问来源。
负载均衡算法选择
Nginx 支持多种负载均衡算法,可通过修改 upstream 配置实现:
- 轮询(默认):按顺序分配请求,适用于服务器性能相近的场景;
- 加权轮询:根据权重分配,如上述配置中 Node2 的请求量是 Node1 的两倍;
- IP 哈希:基于客户端 IP 计算哈希值,确保同一用户请求始终分配到同一服务器,适用于会话保持场景:
upstream backend_servers { ip_hash; server 192.168.1.20:80; server 192.168.1.30:80; } - 最少连接:优先分配给活跃连接数最少的服务器,需添加
least_conn指令:upstream backend_servers { least_conn; server 192.168.1.20:80; server 192.168.1.30:80; }
后端服务器配置与测试
为验证负载均衡效果,需在后端 Web 服务器(Node1 和 Node2)上部署测试页面,在 Node1 上执行:
echo "Node1 Server: 192.168.1.20" > /usr/share/nginx/html/index.html systemctl start nginx && systemctl enable nginx
在 Node2 上执行:
echo "Node2 Server: 192.168.1.30" > /usr/share/nginx/html/index.html systemctl start nginx && systemctl enable nginx
完成后,在负载均衡器上重新加载 Nginx 配置:
/usr/local/nginx/sbin/nginx -s reload
通过浏览器访问 http://192.168.1.10,多次刷新页面,应交替显示 Node1 和 Node2 的内容,若配置了加权轮询,Node2 的出现频率约为 Node1 的两倍,验证负载均衡生效。
可通过 ab 工具进行压力测试,检查服务器响应状态和负载分配情况:

yum install -y httpd-tools ab -n 1000 -c 100 http://192.168.1.10/
观察测试结果中的请求分布情况,确保负载均衡策略按预期执行。
健康检查与高可用扩展
生产环境中,需配置健康检查以自动剔除故障服务器,在 upstream 配置中添加 max_fails 和 fail_timeout 参数:
upstream backend_servers {
server 192.168.1.20:80 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.30:80 weight=2 max_fails=3 fail_timeout=30s;
} 当某台服务器连续 3 次请求失败(30 秒内),Nginx 将暂时停止向其转发请求,直至恢复。
为进一步提升可用性,可结合 Keepalived 实现负载均衡器的高可用,部署两台负载均衡器(主备模式),通过虚拟 IP(VIP)对外提供服务,当主节点故障时,备用节点自动接管,具体步骤包括安装 Keepalived、配置 keepalived.conf 文件,并编写健康检查脚本,确保服务无缝切换。
相关问答 FAQs
Q1:负载均衡配置中,proxy_set_header 的作用是什么?
A1:proxy_set_header 用于将客户端请求的头部信息传递给后端服务器。
Host $host:保留原始请求的主机名,确保后端服务器获取正确的域名信息;X-Real-IP $remote_addr:传递客户端真实 IP,避免后端服务器将负载均衡器 IP 认为是客户端 IP;X-Forwarded-For $proxy_add_x_forwarded_for:记录请求的转发路径,便于追踪请求链路。
若未配置这些参数,后端服务器可能无法获取客户端的真实信息,导致日志记录或业务逻辑异常。
Q2:如何解决负载均衡下的会话丢失问题?
A2:会话丢失通常是由于客户端请求被分配到不同的后端服务器导致的,解决方法包括:
- IP 哈希算法:在
upstream中使用ip_hash,确保同一 IP 的请求始终访问同一服务器; - 会话粘滞:通过
sticky模块(需安装nginx-sticky-module)基于 Cookie 实现会话绑定; - 集中式会话存储:使用 Redis 或 Memcached 存储会话数据,所有后端服务器共享会话,避免依赖单台服务器。
IP 哈希实现简单,但可能负载不均;集中式会话存储扩展性更好,适合大规模集群。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复