详解如何通过nginx进行服务的负载均衡
作者:upton-nan
简单介绍
随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障的出现。应用集群是将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据。负载均衡器可以将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理。
负载均衡器
我们可以通过nginx作为负载均衡器,实现负载均衡的功能
1.首先我们需要准备Linux系统,并启动nginx服务,并在服务器上启动两个java web的spring boot项目,其中一个web服务的端口是8080,另一个web服务的端口是8081,并将服务正常启动
2.在nginx中配置负载均衡器
打开nginx的配置文件nginx.conf并增加如下配置信息
# upstream指令可以定义一组服务器 upstream study-balance-server { server 192.168.xxx.xxx:8080; server 192.168.xxx.xxx:8081; } server { location /study-balance/ { # 反向代理配置,将请求转发到指定的服务 proxy_pass http://study-balance-server; } }
3.重新加载nginx配置文件
sudo ./nginx -t sudo ./nginx -s reload
4.浏览器测试访问
访问查看web项目的日志信息或者其他标记可以区分当前项目访问的是那台端口的服务:http://服务器ip地址/study-balance/
本示例中通过访问时日志的打印时间顺序可以知道负载均衡已经正常启动
负载均衡的策略
1.nginx默认策略是轮询,详细信息如下
名称 | 说明 | 特点 |
---|---|---|
轮询 | 默认方式 | |
weight | 权重方式 | 根据权重分发请求,权重大的分配到请求的概率大 |
ip_hash | 依据ip分配方式 | 根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上 |
least_conn | 依据最少连接方式 | 哪个服务器当前处理的连接少, 请求优先转发到这台服务器 |
url_hash | 依据url分配方式 | 根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上 |
fair | 依据响应时间方式 | 优先把请求分发给处理请求时间短的服务器 |
2.示例权重配置
# upstream指令可以定义一组服务器 upstream study-balance-server { server 192.168.xxx.xxx:8080 weight=10; server 192.168.xxx.xxx:8081 weight=5; }
配置的weight权重是相对的,在上述的配置中,效果就是在大数据量的请求下,最终8080接收的请求数是8081的两倍
3.示例依据ip分配方式
# upstream指令可以定义一组服务器 upstream study-balance-server { ip_hash; server 192.168.xxx.xxx:8080; server 192.168.xxx.xxx:8081; }
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题
以上就是详解如何通过nginx进行服务的负载均衡的详细内容,更多关于nginx负载均衡的资料请关注脚本之家其它相关文章!