利用upstream配置nginx负载均衡

nginx的负载均衡策略

  • Nginx 提供了多种负载均衡策略,可以根据实际需求进行选择(可以搭配多个策略使用)。
策略名称 策略特点 适用场景
轮询(Round Robin) 请求的时间顺序分配到每个后端节点,节点故障会自动剔除 默认策略,适合多台配置相近的场景,相当于每台权重都为1
加权轮询(Weighted Round Robin) 指定轮询几率,weight和访问比率成正比 适用于多台服务器性能差异较大的场景
IP Hash 每个请求按访问ip的hash值分配到对应且固定的节点 适用于需要客户端始终访问同一台服务器的场景,可保持会话
最小连接数(Least Connections) 将请求发送到当前连接数最少的后端节点 适用于后端服务器性能差异较大,连接数分布不均的场景
随机(Random) 将请求随机发送到一个后端节点 适用于多台服务器性能相近,没有特别要求的场景

注:ip hash解决的问题:在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

实战配置

  • 如下示例共有4个后端节点,由于每台机器的配置不一样,所以采用了 ip_hash + 加权轮询 策略,下面是核心配置:
http {
    #.设定负载均衡的服务器列表.
    upstream myservers {
        ip_hash;                                                            #.负载均衡策略:可选 ip_hash | least_conn | random
        server 192.168.0.21:8001 max_fails=5 fail_timeout=300s weight=1;    #.weigth表示权值,权值越高被分配到的几率越大,默认为1.
        server 192.168.0.22:8001 max_fails=5 fail_timeout=300s weight=5;    #.max_fails表示:在fail_timeout时间内,允许请求失败的次数,默认为1.当超过最大次数时,返回错误.
        server 192.168.0.23:8001 max_fails=5 fail_timeout=300s weight=5;    #.fail_timeout表示:在这个时间内max_fails次失败后,暂停服务的时间,默认为10秒.
        server 192.168.0.24:8001 down;                                      #.down表示当前的server不参与负载.
    }

    server {
        listen 80;
        server_name xxx.abc.com;

        location / {
            #.反向代理的地址
            proxy_pass http://myservers;    

            #.设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

            #.禁用缓存
            proxy_buffering off;
        }
    }
}
Copyright © www.sqlfans.cn 2023 All Right Reserved更新时间: 2023-06-08 15:17:16

results matching ""

    No results matching ""