1、负载均衡介绍

负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理; 在这个过程中,调度者如何合理分配任务,保证所有服务器将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡的问题了。

2、负载均衡方式

轮询

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。

  1. upstream nginx-demo-server {
  2. server localhost:10001;
  3. server localhost:10002;
  4. }

权重

指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

  1. upstream nginx-demo-server {
  2. server localhost:10001 weight=1;
  3. server localhost:10002 weight=2;
  4. }

iphash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

  1. upstream nginx-demo-server {
  2. ip_hash;
  3. server localhost:10001 weight=1;
  4. server localhost:10002 weight=2;
  5. }

最少连接

将请求分配到连接数最少的服务上。

  1. upstream nginx-demo-server {
  2. least_conn;
  3. server localhost:10001 weight=1;
  4. server localhost:10002 weight=2;
  5. }

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。 需要插件来帮我们实现

  1. upstream nginx-demo-server {
  2. server
  3. localhost:10001 weight=1;
  4. server localhost:10002 weight=2;
  5. fair;
  6. }

3、负载均衡示例

起两个springboot工程,端口分别为9091,9092,nginx做如下配置,负载均衡默认为轮询。

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. upstream nginx-demo-server {
  7. server 127.0.0.1:9091;
  8. server 127.0.0.1:9092;
  9. }
  10. server {
  11. listen 10000;
  12. server_name localhost;
  13. location / {
  14. proxy_pass http://nginx-demo-server;
  15. proxy_redirect default;
  16. }
  17. }
  18. }

多次访问:http://47.104.146.31/sayHello,会发现轮询调用9091,9092两个工程。
image.pngimage.png