nginx负载均衡和反向代理

负载均衡通过DNS、IP和链路层等技术在多台服务器间分发请求,提高服务可用性和性能。常见的负载均衡算法包括轮询、随机、最少连接和Hash等,可以根据服务器状态动态分配。反向代理在动静分离和动态请求场景中起到关键作用,确保高效稳定的系统运行。

负载均衡
负载均衡是有多台服务器以对称的方式组成一个服务器集合,每台服务器都能具有等价的地位,都可以单独对外提供服务而无需其他服务器辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地相应用户的请求。均衡负载能够平均分配呵护请求到服务器阵列,快速获取数据,解决大量并发访问服务问题。
负载均衡分类
1、DNS负载均衡
在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群
这里写图片描述

优点:
1、使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
2、提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能。

缺点
1、可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长,解析过程中,用户访问网站将失败
2、扩展性低:DNS负载均衡的控制权在域名商哪里,无法对其做更多的改善和扩展
3、维护性差:也不能反应服务器的当前运行状态;支持算法少;不能区分服务器的差异,(不能根据系统与服务器的状态来判断负载)

2、IP负载均衡
在网络层通过修改请求目标地址进行负载均衡
用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实的服务器地址,然后将请求的目标地址修改为获得的真实的IP地址。
真实服务器处理完成后,相应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的IP地址,发送给用户浏览器。
这里写图片描述

IP负载均衡,真实物理服务器返回给负载均衡服务器,存在两种方式:
(1)负载均衡服务器在修改目的ip地址的同时修改源地址。将数据包源地址设为自身盘,即源地址转换(snat)。
(2)将负载均衡服务器同时作为真实物理服务器集群的网关服务器。
优点:
(1)在内核进程完成数据分发,比在应用层分发性能更好;
缺点:
(1)所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽;

3、链路层负载均衡
在通信协议的数据链路层修改mac地址,进行负载均衡。
数据分发是,不修改IP地址,指修改目标的mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器IP地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。

实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。如下图:

这里写图片描述

优点:性能好
缺点:配置复杂

4、混合型负载均衡
由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这么多服务器集群间再一次负载均衡或集群起来以一个整体向外界提供服务(把多个服务器集群当做一个新的服务器群),从而到达最佳的性能。

方式1,如下图:
这里写图片描述
以上模式适合有动静分离的场景,反向代理服务器(集群)可以起到缓存和动态请求分发的作用,当时静态资源缓存在代理服务器时,则直接返回到浏览器。如果动态页面则请求后面的应用负载均衡。
方式2,如下图:
这里写图片描述

以上场景适合动态请求场景。

负载均衡算法

常用的负载均衡算法有,轮询,随机,最少链接,源地址散列,加权等方式;

1 轮询

将所有请求,依次分发到每台服务器上,适合服务器硬件同相同的场景。

优点:服务器请求数目相同;

缺点:服务器压力不一样,不适合服务器配置不同的情况;

2 随机

请求随机分配到各个服务器。
优点:使用简单;

缺点:不适合机器配置不同的场景;

3 最少链接

将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。

优点:根据服务器当前的请求处理情况,动态分配;

缺点:算法实现相对复杂,需要监控服务器请求连接数;

4 Hash(源地址散列)

根据IP地址进行Hash计算,得到IP地址。

优点:将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。

缺点:目标服务器宕机后,会话会丢失;

5 加权

在轮询,随机,最少链接,Hash’等算法的基础上,通过加权的方式,进行负载服务器分配。

优点:根据权重,调节转发服务器的请求数目;

缺点:使用相对复杂;

反向代理是指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就是表现为一个服务器。

Nginx中同时配置负载均衡反向代理,可按以下步骤操作。Nginx内置了负载均衡模块,支持轮询、加权轮询、最少连接、IP哈希等多种负载均衡算法,通过配置负载均衡规则,能将请求分发到多个后端服务器,实现负载均衡效果[^1]。 假设已安装并启动Nginx服务,在Nginx配置目录`conf.d`下新建一个`load_balancer.conf`文件,示例配置如下: ```nginx http { # 定义负载均衡的后端服务器组 upstream backend { # 添加后端服务器,这里可以根据需要添加更多服务器 server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { # 监听的端口 listen 80; # 服务器名称 server_name mydomain.com; location / { # 将请求代理到后端服务器组 proxy_pass http://backend; # 设置请求头,传递客户端的主机名 proxy_set_header Host $host; # 设置请求头,传递客户端的真实IP地址 proxy_set_header X-Real-IP $remote_addr; # 设置请求头,传递客户端的完整IP地址链 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置请求头,传递客户端的协议(http或https) proxy_set_header X-Forwarded-Proto $scheme; } } } ``` 在上述配置中,`upstream`块定义了一个名为`backend`的后端服务器组,其中包含多个后端服务器。`server`块定义了一个监听80端口的虚拟主机,`location`块将所有请求通过`proxy_pass`指令代理到`backend`后端服务器组,同时设置了一些请求头,以传递客户端的相关信息。 配置完成后,需要重新加载Nginx配置使新配置生效,可以使用以下命令: ```bash nginx -s reload ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值