一. 负载均衡
1. 用法
通过proxy_pass 可以把请求代理至后端服务,但是为了实现更高的负载及性能, 我们的后端服务通常是多个, 这个是时候可以通过upstream 模块实现负载均衡。
负载均衡的算法有:
ip_hash : 基于Hash 计算,用于保持session 一至性 该算法下权重失效
url_hash: 静态资源缓存,节约存储,加快速度(第三方) 该算法下权重配置失效
least_conn :最少链接(第三方)
least_time
2. 参数
upstream 相关参数如下:
server 反向服务地址加端口
weight 权重,默认是1,越大权重就越大
max_fails 失败多少次认为主机已挂掉则,踢出 (默认配置10s,即服务器宕掉,会自动剔除)
fail_timeout 踢出后重新探测时间
backup 备用服务,当其他非backup的机器全部宕机或者繁忙的时候,才会启动这台机器。
max_conns 允许最大连接数
slow_start 当节点恢复,不立即加入,而是等待 slow_start
3. 案例
事先准备:
有三个同样的api服务,分别部署在9001、9002、9003端口下,比如:访问 http://localhost:9001/Home/GetMsg,会返回 【 获取成功,当前端口为:9001】,其它端口类似。
要求:
Nginx监听8080端口,接收到8080端口的请求,按照响应的算法进行转发到9001-9003端口。
(1). 轮询
访问地址:http://localhost:8080/Home/GetMsg ,会依次转发到9001、9002、9003端口上。
配置如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream myApiTest { server localhost:9001; server localhost:9002; server localhost:9003; } server { listen 8080; server_name xxx; #随意配置一个即可,优先走代理地址 location / { proxy_pass http://myApiTest; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
补充其他参数说明:
下面配置,当请求 http://localhost:8080/Home/GetMsg 时候,只会被转发到9003端口上,此时把9003端口的服务关掉,再次请求,则会被转发到9001端口上,其中9002端口,全程不参与负载。
upstream myApiTest { server localhost:9001 backup; server localhost:9002 down; server localhost:9003; }
(2).轮询+权重
下面配置,被转发到9001 9002端口的概率要大于9003端口。
配置如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream myApiTest { server localhost:9001 weight=10; server localhost:9002 weight=5; server localhost:9003; } server { listen 8080; server_name xxx; #随意配置一个即可,优先走代理地址 location / { proxy_pass http://myApiTest; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
(3). ip_hash
主要用来解决Session不一致的问题,但是该策略下,weight权重无效,所以该方案会导致某个Server压力可能过大,请求分配不均匀问题。
(4). url_hash
二. 缓存配置
三. 性能调优
!
原文:https://www.cnblogs.com/yaopengfei/p/14158212.html