Skip to content

集群

功能全部一模一样的服务器,访问任意一台的结果都是一样的,当其中一台不可用时,可以访问另外一台,用于负载均衡。

轮询式负载均衡

当多个请求到来时,依次向集群中的服务器逐一转发,适用于无状态请求。当访问时发现服务器故 障了,retry 机制会去向下一台服务器请求。唯一的缺点就是无法保持会话(session)。 通过 SpringSession 将 session 都存储在一台 redis 服务器中。

nginx
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # 负载均衡
    upstream httpds {
      server 192.168.44.102:80;
      server 192.168.44.103:80;
    }

    server {
        listen       80;
        server_name  www.rainx.top;

        location / {
            # 负载均衡要配合着反向代理使用
            proxy_pass http://httpds;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

负载均衡策略

nginx
upstream httpds {
    # weight 表示权重,权重越高,被请求的次数就会越多,性能高的服务器可以设置高权重。
    server 192.168.44.102:80 weight=8;
    server 192.168.44.103:80 weight=2;
    # down 表示不参与负载均衡
    server 192.168.44.104:80 weight=1 down;
    # backup 表示备用服务器,正常情况下不会被使用到,当其它服务器都不可以使用时才会
    # 被使用到。
    server 192.168.44.105:80 weight=1 backup;
  }

其它的负载均衡策略

  • ip_hash

    根据客户端的 ip 地址转发同一台服务器,可以实现保持绘画,但由于移动端 ip 经常改变, 已经不太适用了。

  • least_conn

    最少连接访问

  • url_hash

    根据用户访问的 url 定向转发请求,只有在固定资源不在同一台服务器,分布在各个服务器中 时才会用到。

  • fair

    根据后端服务器响应时间转发请求