一个字“绝”丨Nginx负载均衡解决的问题和实现方式都在这里啦!
今天的话题,咱们来聊一聊Nginx负载均衡的话题,聊起这个话题,是因为威哥周末见了一个之前的学员,多年过去了,成了朋友,技术上的“精神伴侣”,吐槽公司最近在招人,面试了好多人,不是技术太菜,就是技术太水(好像是一样的),一顿愁眉苦脸,感叹招人不易。
这不,聊到了Nginx,互联网项目必备的技能点了,我说你是不是要求太高,用自己的技术水平去要求面试者,他说还真没有,就是一般性的问题而已,我说你都问了啥,说来听听,下面是他的问题:
负载均衡是为了解决什么问题?有哪几种实现负载均衡的方式?
还真是不难,很普通的问题而已,小伙伴们面试有遇到这个问题吗,如果是互联网公司面试,解决负载均衡的问题那是必不可少的,不懂的童鞋来恶补一下吧。
首先,负载均衡主要解决当数据量过大,连接数较多情况下,服务器硬件无法满足需要处理的性能消耗,也就是是说服务器成了瓶颈,服务器负载均衡解决服务器瓶颈,使大量的连接平均分发到多台服务器。在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。
负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:
#动态服务器组
upstream dynamic_server {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
#其他页面反向代理到tomcat容器
location ~ .*$ {
index index.jsp index.html;
proxy_pass http://dynamic_server;
}
这是最基本的负载均衡实例,但这不足以满足实际需求;目前Nginx服务器的upstream模块支持6种方式的分配:
轮询 |
默认方式 |
weight |
权重方式 |
ip_hash |
依据ip分配方式 |
least_conn |
最少连接方式 |
fair(第三方) |
响应时间方式 |
url_hash(第三方) |
依据URL分配方式 |
Nginx为我们默认提供了三种负载均衡的策略:
轮询:将客户端发起的请求,平均的分配给每一台服务器。
权重:会将客户端的请求,根据服务器的权重值不同,分配不同的数量。
现在咱们来分别对轮询,权重,ip_pash展开讲解一下。
轮询(默认方式)
想实现Nginx轮询负载均衡机制只需要在配置文件中添加以下内容:
upstream 名字 {
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
weight(权重方式)
实现权重的方式
upstream 名字 {
server ip:port weight=权重比例;
server ip:port weight=权重比例;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
ip_hash(依据ip分配方式)
ip_hash实现
upstream 名字 {
ip_hash;
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
除了以上三种外,通过配置最少连接方式,也是可以更好达到负载均衡效果的方式。
least_conn(最少连接方式)
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
#动态服务器组
upstream dynamic_server {
least_conn; #把请求转发给连接数较少的后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
注意:
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
小结一下
其中除了轮询和轮询权重外,都是Nginx根据不同的算法实现的。在实际运用中,需要根据不同的场景选择性运用,大都是多种策略结合使用以达到实际需求!
兄弟,你鞋废了吗,没鞋会,威哥再推荐一套Nginx的视频给你!
视频传送门:https://www.bilibili.com/video/BV1h54y177JL
今天的内容学会的同学留言:666
精选第一名,领取22年台历一本
点击【阅读原文】,开始学习nginx!