关注△mikechen的架构笔记△,十余年BAT架构经验倾囊相授
大家好,我是mikechen。
Nginx是一款高性能HTTP、和反向代理服务器,是大型架构必备使用的,下面详解4大Nginx负载均衡配置@mikechen
最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。
Nginx负载均衡
Nginx 是一个高性能的 HTTP 、和反向代理服务器,它也可以作为负载均衡器。
如下所示:
可以将流量分配到多个后端服务器,这种方式,可以提高系统的可用性、和扩展性、以及性能。
但是,如果你要负载到别的服务器,就会涉及到负载均衡配置算法、和配置。
比如:常见的有:轮询(round-robin)、最少连接(leas-connections)、IP哈希(IP-hash)、随机(random-ip).......等,下面我分别详解@mikechen
Nginx负载均衡配置
1.轮询
Nginx默认的负载均衡策略是:轮询,每个请求依次分配给不同的后端服务器,这种轮询策略,适用于后端服务器性能相似。
如下图所示:
轮询是一种简单的负载均衡算法,将请求按照固定顺序,依次分发到每个服务器。
每个服务器依次接收请求,直到所有服务器都接收到一个请求,然后循环重新开始。
轮询策略无需额外配置参数,只需定义上游服务器组即可,如下所示:
http {
upstream mikechen{
server backend1.mikechen.cc;
server backend2.mikechen.cc;
server backend3.mikechen.cc;
}
server {
listen 80;
location / {
proxy_pass http://mikechen;
}
}
}
upstream mikechen{...}:定义一个上游服务器组,命名为 mikechen。
server backend1.mikechen.cc;:指定第一个后端服务器;
server backend2.mikechen.cc;:指定第二个后端服务器;
server backend3.mikechen.cc;:指定第三个后端服务器;
server {...}:定义一个虚拟主机,参数如下:
listen 80;:监听端口 80;
location / {...}:处理根路径 / 的请求,proxy_pass http://backend,将请求转发到上游服务器组 mikechen。
2.加权
Nginx 的加权负载均衡(weighted load balancing),允许为不同的后端服务器设置不同的权重,以便将更多的请求分配给性能更高、或资源更多的服务器。
权重越高,服务器被分配到的请求就越多,如下所示:
server backend1.mikechen.cc weight=5;
server backend2.mikechen.cc weight=3;
server backend3.mikechen.cc weight=1;
参数说明:
weight=3:设置 backend1 的权重为 5;
weight=1:设置 backend2 的权重为 3;
weight=2:设置 backend3 的权重为 1;
在上面的示例中,请求将按照如下比例分配:
backend1.mikechen.cc:将处理 5/(5+3+1) ≈ 55.56% 的请求;
backend2.mikechen.cc:将处理 3/(5+3+1) ≈ 33.33% 的请求;
backend3.mikechen.cc:将处理 1/(5+3+1) ≈ 11.11% 的请求;
3.IP 哈希(IP Hash)
IP Hash 是一种负载均衡策略,通过对客户端 IP 地址,进行哈希计算来决定请求应该转发到哪个后端服务器。
如下图所示:
这样,来自同一 IP 地址的请求会被发送到相同的后端服务器,除非后端服务器发生变化。
在 Nginx 中,IP Hash 通过在 upstream 块中,使用 ip_hash 指令来配置。
如下所示:
http {
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
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 X-Forwarded-Proto $scheme;
}
}
}
ip_hash;:启用 IP 哈希负载均衡;
相同的客户端 IP 地址将,总是被分配到相同的服务器,直到服务器列表发生变化。
适用于需要保持用户会话状态的应用,如购物车、用户登录.......等。
4.最少连接
最少连接策略,根据每个后端服务器当前处理的连接数来分配新请求,请求会被分配到连接数最少的服务器上。
如下所示:
配置如下:
http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
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 X-Forwarded-Proto $scheme;
}
}
}
least_conn;:启用最少连接负载均衡;
请求将被分配到当前连接数最少的后端服务器,这种策略可以减少服务器之间的负载不均,特别是在请求处理时间差异较大的情况下。
这种配置,适用于请求处理时间不一致的应用,比如:有些请求处理时间较长的场景。
以及,最少连接策略能够,有效地将请求分配到负载较低的服务器,从而提升整体性能、和响应速度。
以上
最后送大家一个福利:
送大家一份我原创超30万字的阿里架构师进阶专题合集,非常的全面。
以及给大家整理了一份非常全面的Java面试题及答案合集,包含:Java、多线程、JVM、Spring、MySQL、Redis、Dubbo、中间件…等最全大厂必考题及答案详解。
需要以上架构专题&面试答案的同学,加我微信即可领取!
添加时备注:资料