Nginx 实现负载均衡

目录

一:负载均衡介绍

二、负载均衡具备的功能

1.提高服务器性能

2.提高系统可用性

3.提高系统的可伸缩性

4.实现流量均衡

三、示例配置,如何使用nginx实现负载均衡

四、负载均衡策略配置

1.基于轮询的负载均衡(默认)

2.基于权重(weight)的负载均衡

[3.基于IP HASH的负载均衡](#3.基于IP HASH的负载均衡)

4.实现主备服务

五、后端配合

一:负载均衡介绍

nginx 是一个高性能的 Web 服务器和反向代理服务器,可以用来实现负载均衡。nginx 的负载均衡功能是通过配置upstream块来实现的。在upstream块中,可以配置多个后端服务器,并且可以通过各种算法来选择其中一个服务器来处理请求。

二、负载均衡具备的功能

1.提高服务器性能

负载均衡可以将请求分配到多个服务器上,从而提高服务器的处理能力和响应速度。

2.提高系统可用性

当一台服务器出现故障时,负载均衡可以将请求自动转移到其他正常的服务器上,从而避免系统停机。

3. 提高系统的可伸缩性

当系统负载增加时,可以通过添加更多的服务器来扩展系统的处理能力。

4. 实现流量均衡

负载均衡服务器通过某种调度算法将流量分配到不同的应用程序服务器,以确保每个服务器都能得到合理的工作量,避免过载。

三、 示例配置 如何 使用nginx实现负载均衡

XML 复制代码
​
http {

upstream backend {

server 192.168.116.12:8081;

server 192.168.116.12:8082;

 }

server {

listen 80;

 location / {

 proxy_pass http://backend;

 }

 }

​

在上面的配置中,我们定义了一个名为backendupstream 块,其中列出了三个后端服务器:backend1.example.combackend2.example.com和backend3.example.com。然后,在server块中,我们将请求代理到backend,这样nginx就会从这三个后端服务器中选择一个来处理请求。

nginx提供了多种负载均衡算法,例如:权重(weight)、轮询(round-robin)、IP哈希(ip-hash)。可以通过在upstream块中使用相应的配置指令来实现不同的算法。

四、负载均衡策略配置

1. 基于轮询的负载均衡(默认)

每个请求,按时间顺序逐一分配到不同的后端应用服务器节点,如果后端服务出现故障,nginx能够自动剔除该节点,具体配置方式如上述demo示例配置;

2.基于权重( weight)的负载均衡

权重(weight )默认值为1,权重越高,被分配的请求数量越多。

例如:A节点权重=2,B节点权重=1,则请求会按照A:B=2:1的方式轮询。

配置参考如下:

3.基于 IP HASH的负载均衡

每个请求,按照访问IP的hash结果分配,由于hash值为不重复的唯一值,因此每个请求能够固定访问同一个后端服务器,这样可以做到会话保持,解决session同步问题。

配置参考如下:

XML 复制代码
​
http {

ip_hash;

upstream backend {

server 192.168.116.12:8080;

server 192.168.116.12:8081;

 }

server {

listen 80;

 location / {

 proxy_pass http://backend;

 }

 }

​

4.实现主备服务

通过 Nginx 实现在 192.168.116.12:8080 服务器挂掉的情况下自动切换到 192.168.12:8081 服务器,可以使用 Nginx 的代理模块和负载均衡功能。

XML 复制代码
​
http {

upstream backend {

server 192.168.116.12:8080 fail_timeout=10s;

server 192.168.116.12:8081 backup;

 }

server {

listen 80;

 location / {

 proxy_pass http://backend;
 proxy_set_header Host $host;

 }

 }

在上述示例中:

upstream 块定义了服务器组 backend,其中 192.168.116.12:8080 被指定为主服务器,并设置了 fail_timeout=10s,表示当服务器不可用时,Nginx 会在 10 秒后重新尝试连接。

192.168.116.12:8081 被指定为备用服务器,使用 backup 参数标记,表示只有在主服务器不可用时才会被使用。

location 块中的 proxy_pass 指令将请求转发到服务器组 backend,而 proxy_set_header Host $host; 则会将原始请求的 Host 头部信息传递给后端服务器。

当 192.168.116.12:8080 服务器不可用时,Nginx 会自动将请求转发到备用服务器 192.168.116.12:8081这样,用户在不知情的情况下可以继续访问可用的服务器。

请确保在每个服务器上的 Nginx 配置文件中进行正确的配置,并根据您的实际情况进行调整。

五、后端配合

对于后端来说,配合相对简单,只需要启动多个后端服务即可;

注意:后端启动的端口号要和上方配置nginx的端口保持一致。

相关推荐
孤廖3 分钟前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
我命由我123455 分钟前
Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Full Stack Developme15 分钟前
java.net 包详解
java·python·.net
一叶飘零_sweeeet34 分钟前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式
凤山老林38 分钟前
排序算法:详解插入排序
java·开发语言·后端·算法·排序算法
洛克大航海40 分钟前
3-SpringCloud-LoadBalancer-OpenFeign服务调用与负载均衡
spring·spring cloud·负载均衡·openfeign·loadbalancer
彦楠42 分钟前
IDEA实用快捷键
java·ide·intellij-idea
insight^tkk1 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
豆沙沙包?1 小时前
2025年--Lc197-077. 排序链表(链表,尾插法)--Java版
java·数据结构·链表
m0_651593911 小时前
深入理解软件设计中的协议与规范:从理论到Java实践
java·软件工程·代码规范·设计规范