Nginx负载均衡

负载均衡:将客户端的请求通过调度单元分摊到多个操作单元上进行执行,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优。

配置方法:

需要结合proxy_passupstram server

upstream配置

# 只能配置在http层,大括号中有多个参数
upstream name {...}

server参数

  • down:当前的server暂时不参与负载均衡
  • backup:预留的备份服务器
  • max_fails:允许请求失败的次数
  • fail_timeout:经过max_fails失败后,服务暂停的时间,默认10秒
  • max_conns:限制最大的接收的连接数
  • weight:表示权重,默认是1,多个server轮询访问
upstream backend{

		# 对应每一个开启的服务,可以是ip,域名,socket
		# weight 表示权重,默认情况下是1,进行轮询访问
		server backend1.example.com weight=5;
		server backend2.example.com:8080;
		server unix:/tmp/backend3;

		# backup表示是备用节点
		server backup1.example.com:8080 backup;
		server backup2.example.com:8080 backup;
}

Nginx调度算法

  • 轮询:按时间顺序逐一分配到不同的后端服务器
  • 加权轮询:weight值越大,分配到的访问几率越高
  • ip_hash:每个请求按ip的hash结果分配,这样来自同一个IP的固定访问一个后端服务器(这种方法走代理的话会导致都在一台服务器)
  • least_conn:最少连接数,哪个机器连接数少就分发
  • url_hash:按照访问的URL的hash结果分配请求,每个URL定向到同一个后端服务器
  • hash:hash自定义的key

设置调度算法:

upstream name{
		# 设置调度算法,默认是轮询,如果是加权轮询,直接在server后加weight就好
		ip_hash;
		# 如果是hash,可以自定义key,可以根据请求地址等,如:
		hash $request_uri;
		server ...;
}

配置完upstream后,需要利用proxy_pass进行配置

location / {
		# name对应上面的upstream的name
		proxy_pass http://name
        # 出现指定错误时跳过这个服务器使用下一个
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
		# 导入其他proxy的配置
		include proxy_params;
}