跨多个应用程序实例的负载平衡是一种经常使用的技术,用于优化资源利用率、最大化吞吐量、减小延迟和确保容错配置。html
可使用nginx做为一个很是有效的HTTP负载均衡器,将流量分配到多个应用服务器,并使用nginx提升web应用程序的性能、可伸缩性和可靠性。nginx
nginx默认支持4种负载均衡机制:web
建立/root/web/app1,/root/web/app2,/root/web/app3目录,分别模拟三个应用程序。在三个目录中分别上传index.html文件,index.html分别输出app一、app二、app3。修改"/usr/local/nginx/conf/nginx.conf"配置文件,在http节点下添加三个server节点:算法
1 # app1 2 server { 3 listen 8080; 4 server_name localhost; 5 location / { 6 root /root/web/app1; 7 } 8 } 9 10 # app2 11 server { 12 listen 8081; 13 server_name localhost; 14 15 location / { 16 root /root/web/app2; 17 } 18 } 19 20 # app3 21 server { 22 listen 8082; 23 server_name localhost; 24 25 location / { 26 root /root/web/app3; 27 } 28 }
在http节点下添加以下配置节点centos
1 upstream app { 2 server localhost:8080; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 } 6 7 server { 8 listen 80; 9 server_name localhost; 10 location / { 11 proxy_pass http://app; //app是upstream节点后的key取值 12 } 13 }
保存nginx.conf配置文件,从新加载配置文件服务器
1 /usr/local/nginx/sbin/nginx -t; 2 /usr/local/nginx/sbin/nginx -s reload;
当访问http://server_name时,请求会大致均衡的分发给:localhost:8080,localhost:8081,localhost:8082。app
nginx中使用最少链接机制须要"least_conn"指令来激活,负载均衡
1 upstream app { 2 least_conn; 3 server localhost:8080; //app1 4 server localhost:8081; //app2 5 server localhost:8082; //app2 6 }
当接收到请求后,请求会被分发给当前负载量最少的服务器性能
循环机制、最少链接机制针对同一个客户端发送的请求可能会被分发给不一样的服务器,可是在一些场景中须要将同一个客户端的请求分发给固定的服务器,那个可使用ip-hash机制来实现此功能。测试
1 upstream app { 2 ip_hash; 3 server localhost:8080; //app1 4 server localhost:8081; //app2 5 server localhost:8082; //app2 6 }
当接收到请求后,请求会被分发给当前负载量最少的服务器
在实际场景中,应用程序所在的服务器集群的配置性能可能差距很大,那么配置好的服务器天然也须要处理较多的请求才能发挥出价值,此时就能够经过“权重机制”来完成
1 upstream app { 2 server localhost:8080 weight=3; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 }
如上配置,若是5个请求,3个请求分发给localhost:8080,另外两个分发给localhost:808一、localhost:8082. 对于"最少链接机制"、"ip-hash机制"的权重机制配置语法如上配置同样。
nginx健康检查主要是经过“max_fails"和“fail_timeout”指令来控制。
1 upstream app { 2 server localhost:8080 weight=3 fail_timeout=10 max_fails=1; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 }
若是fail_timeout的次数超过了max_fails的值,nginx则认为该服务不可达,后续的请求则不会分发给该服务。后面nginx会定时检测不可达的服务是否可达,若是可达,则将其激活,分发请求。 保存nginx.conf配置文件,从新加载配置文件
1 /usr/local/nginx/sbin/nginx -t; 2 /usr/local/nginx/sbin/nginx -s reload;