Nginx负载均衡

  • 什么是负载均衡?
  • Nginx负载均衡配置
  • Nginx负载均衡策略
  • 1.轮询
  • 2.加权轮询
  • 3.ip_hash
  • 4.least_conn


什么是负载均衡?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。(来自百度百科)
其实这就跟早上地铁进站,存在多个入口一个道理。

Nginx负载均衡配置

Nginx的负载均衡主要是对 proxy_pass 和upstream 的配置。如下:

http {
    include       mime.types;
    default_type  application/octet-stream;

	sendfile on;

    keepalive_timeout  65;

	upstream tortoise_upstream {
		server	127.0.0.1:8080;
		server	127.0.0.1:8081;
		server	127.0.0.1:8082;
	}

    server {
        listen       8888;
        server_name  localhost;

        location ~ / {
            proxy_pass http:// tortoise_upstream;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        
	}
}

Nginx负载均衡策略

nginx主要有轮询(默认)、加权轮询、ip_hash、least_conn 四种策略。

1.轮询

轮询是nginx默认的负载均衡策略,每个请求会按时间顺序逐一循环分配到不同的服务器。

参数

描述

fail_timeout

与max_fails结合使用

max_fails

设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了

fail_time

服务器会被认为停机的时间长度,默认为10s。

backup

标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。

down

标记服务器永久停机了。

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。
  • 会存在状态服务信息不共享问题,如session。

2.加权轮询

在轮询策略上添加了权重(weight)的概念。权重越高,被访问的几率越高。

upstream tortoise_upstream {
	server 127.0.0.1:8081 weight=2;
	server 127.0.0.1:8082 weight=4;
	server 127.0.0.1:8083;
	server 127.0.0.1:8084 backup;
	server 127.0.0.1:8085 max_fails=5 fail_timeout=30s;
}

注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与 least_conn 和 ip_hash 结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。
  • 会存在状态服务信息不共享问题,如 session。

3.ip_hash

nginx 根据客户端请求 ip 地址进行 hash 换算来分配服务器,可以确保相同客户端请求一直访问同一台服务器。解决了其他负载均衡策略状态服务信息不共享的问题。

upstream tortoise_upstream {
	ip_hash;
	server 127.0.0.1:8081 weight=2;
	server 127.0.0.1:8082 weight=4;
	server 127.0.0.1:8083;
	server 127.0.0.1:8084 max_fails=5 fail_timeout=30s;
}

注意:

  • 在 nginx 版本1.3.1之前,不能在 ip_hash 中使用权重(weight)。
  • ip_hash 不能与 backup 同时使用。
  • 此策略适合有状态服务,比如 session。
  • 当有服务器需要剔除,必须手动 down 掉。

4.least_conn

least_conn 策略把请求转发给连接数较少的服务器。轮询算法是把请求平均分发给各个服务器,是每台服务器负载基本相同;但是,在实际业务中,会存在某些请求时间很长的情况,这样会导致在某个时间,当前服务器负载过大。least_conn 策略就比较适合这种情况。

upstream tortoise_upstream {
	least_conn;
	server 127.0.0.1:8081 weight=2;
	server 127.0.0.1:8082 weight=4;
	server 127.0.0.1:8083;
	server 127.0.0.1:8084 backup;
	server 127.0.0.1:8085 max_fails=5 fail_timeout=30s;
}

注意:

  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
  • 会存在状态服务信息不共享问题,如 session。