一、负载均衡基本概念
负载均衡(Load Balancing)是指将网络流量或计算任务分配到多个服务器上,以避免单个服务器过载,提高整体系统的可用性和响应速度。
主要作用:
-
提高性能:分散请求压力
-
增强可靠性:某台服务器故障时自动剔除
-
实现扩展性:方便横向扩展服务器数量
-
维护便利:可以单独下线服务器进行维护
具体来说,负载均衡主要解决以下问题:
-
单点故障风险
单个服务器承担所有流量时,一旦发生故障(如硬件损坏、软件崩溃),整个系统会直接瘫痪。负载均衡通过将流量分配到多个服务器(形成 “集群”),即使某台服务器故障,其他服务器仍能继续处理请求,避免系统整体不可用。 -
服务器资源过载
单个服务器的 CPU、内存、带宽等资源是有限的,当流量超过其承载能力(如电商促销、突发访问),会导致响应变慢、甚至拒绝服务(“宕机”)。负载均衡会将流量分散到多台服务器,避免某台服务器因资源耗尽而崩溃,确保每台服务器的负载处于合理范围。 -
资源利用率不均衡
多台服务器独立工作时,可能出现 “部分服务器满载、部分服务器空闲” 的情况(如流量集中在某台服务器),导致资源浪费。负载均衡通过算法(如轮询、权重分配)动态调整流量,让所有服务器的负载更均衡,提升整体资源利用率。 -
地域或网络延迟问题
当用户分布在不同地区(如国内和海外),访问单机房服务器可能因跨地域网络链路长而产生高延迟。负载均衡(尤其是 “全局负载均衡”)可根据用户位置,将请求分配到最近的机房或服务器,减少网络延迟,提升用户体验。 -
系统扩展性限制
单服务器的性能提升存在瓶颈(如升级硬件成本高、效果有限),而负载均衡支持 “横向扩展”—— 通过增加服务器数量扩展系统承载能力(无需修改核心架构),轻松应对流量增长(如从 10 台服务器扩展到 100 台)。
二、Nginx负载均衡配置
基本配置结构
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
upstream模块参数
-
server:定义后端服务器地址
server 192.168.1.100:8080; -
权重(weight):分配请求的比例
server 192.168.1.100 weight=3;#这台服务器分到的流量是101服务器三倍 server 192.168.1.101 weight=1; -
max_fails:允许失败次数
server 192.168.1.100 max_fails=3; -
fail_timeout:失败超时时间
server 192.168.1.100 fail_timeout=30s; -
backup:备用服务器
server 192.168.1.100 backup; -
down:标记服务器不可用
server 192.168.1.100 down;
三、负载均衡算法
1. 轮询(Round Robin, 默认)
upstream backend {
server 192.168.1.100;
server 192.168.1.101;
}
2. 加权轮询(Weighted Round Robin)
upstream backend {
server 192.168.1.100 weight=3;
server 192.168.1.101 weight=1;
}
3. IP哈希(IP Hash)
upstream backend {
ip_hash;
server 192.168.1.100;
server 192.168.1.101;
}
4. 最少连接(Least Connections)
upstream backend {
least_conn;
server 192.168.1.100;
server 192.168.1.101;
}
四、实战环境准备
1. 服务器架构
现有三台服务器, 两台后端应用服务器(提供相同服务),一台做负载均衡,架构如下:
- 负载均衡服务器:IP
192.168.1.100,负责接收客户端请求并分发。 - 后端服务器 1:IP
192.168.1.101,端口8080(部署后端Jar包服务并启动)。 - 后端服务器 2:IP
192.168.1.102,端口8080(与后端 1 提供相同服务,方便测试)。
五、Nginx 负载均衡核心配置
1. 安装 Nginx
在负载均衡器(192.168.1.100)上安装 Nginx(以 CentOS 7 为例):
# 安装 EPEL 源(Nginx 在 EPEL 仓库中)
yum install -y epel-release
# 安装 Nginx
yum install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
2. 配置负载均衡
步骤 1:编辑 Nginx 配置文件
vim /etc/nginx/conf.d/load_balance.conf # 新建自定义配置文件,避免修改默认配置
步骤 2:基础配置(轮询策略)
# 定义后端服务器组,名称为 "backend_servers"(可自定义)
upstream backend_servers {
server 192.168.1.101:8080; # 后端服务器 1
server 192.168.1.102:8080; # 后端服务器 2
}
# 配置前端监听端口(如 80),接收客户端请求
server {
listen 80;
server_name localhost; # 可替换为实际域名
location / {
# 将请求转发到定义的后端服务器组
proxy_pass http://backend_servers;
# 可选:设置代理请求头,后端可获取客户端真实 IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. 检查配置并重启 Nginx
nginx -t # 检查配置是否有误,输出 "successful" 表示正确
systemctl restart nginx # 重启 Nginx 使配置生效
1012

被折叠的 条评论
为什么被折叠?



