三、Nginx 负载均衡


一、Nginx 负载均衡


1. 负载均衡配置

  • 通过 proxy_pass 属性,可以把 请求 代理至 后端服务
  • 但是为了实现更高的 负载及性能, 我们的后端服务通常是多个
  • 这个是时候可以通过 upstream 模块,实现 负载均衡

upstream backend {     
	server 127.0.0.1:8010 weight=1;
   	server 127.0.0.1:8080 weight=2;
  	server 127.0.0.1:8030 weight=1 backup;
}

location / {
    proxy_pass http://backend;
}

2. upstream 相关参数

属性描述
server代理服务地址:加端口
weight权重
max_fails失败多少次,认为主机已挂掉则,然后踢出
fail_timeout踢出后,重新探测时间
backup备用服务
max_conns允许最大连接数
slow_start当节点恢复,不立即加入,而是等待 slow_start 后再加入服务队列

# 反向代理服务
server '服务地址':'端口'	
# 权重
weight='数字'
# 失败多少次,认为主机已挂掉则,然后踢出
max_fails
# 踢出后,重新探测时间
fail_timeout
# 备用服务
backup
# 允许最大连接数
max_conns
# 当节点恢复,不立即加入,而是等待`slow_start`后再加入服务队列
slow_start

3. upstream 负载均衡算法

  • weight:权重(默认:轮询加权重)。
  • ip_hash:基于 IP 的 哈希值计算。
  1. 应用场景:保持 Session 一至性。
  • url_hash:基于 URL 的 哈希值计算(需第三方模块)。
  1. 应用场景:静态资源缓存,节约存储,加快速度。
  • least_conn:最少连接(需第三方模块)。
  • least_time:最快响应时间(需第三方模块)。
  1. 计算节点 平均响应时间,然后取响应最快的那个,分配更高 权重。

二、负载均衡算法


1. weight 轮询【默认】

  • 接收到的请求,按照顺序逐一分配 到 不同的后端服务器
  • 即使在使用过程中,某一台 后端服务器宕机,nginx 会自动将该服务器 剔除出队列,请求受理情况不会受到任何影响
  • 这种方式下,可以给不同的 后端服务器 设置一个 权重值(weight),用于调整 不同的服务器上请求的分配率
  • 权重数据越大,被分配到请求的几率越大
  • 该权重值,主要是针对实际工作环境中,不同的 后端服务器 硬件配置进行调整的

# 1. `weight` 轮询【默认】
upstream www.weight.com {
	# weight 表示权重配置,权重越高,分配到的概率越高
	server 172.17.0.2:8080 weight=5;
  	server 172.17.0.3:9090 weight=10;
}

2. ip_hash IP 哈希值

  • 每个请求按照发起 客户端 IP 的 Hash 值 进行匹配
  • 这样的算法下,一个 固定 IP 地址的客户端,总会访问到 同一个后端服务器
  • 这也在一定程度上,解决了集群部署环境下 Session 共享 的问题

# 2. `ip_hash` IP哈希值
upstream www.ip_hash.com {
	# ip_hash 表示使用`ip方式`分配跳转的服务器,同一ip请求每次都会访问同一台后端服务器
	ip_hash;
	server 172.17.0.2:8080 weight=5;
  	server 172.17.0.3:9090 weight=10;
}

3. url_hash URL 哈希值【第三方插件】

  • 按照访问的 URL 的 Hash 值 分配请求
  • 每个请求的 URL 会指向 后端固定的某个服务器
  • 可以在 nginx 作为 静态服务器 的情况下,提高缓存效率
  • nginx 默认不支持 url_hash 算法
  • 使用这种调度算法,需安装 Nginx 的 hash 软件包

4. fair 智能调整调度算法【第三方插件】

  • 这个比上面两个 更加智能的负载均衡算法
  • 动态的根据 后端服务器 的 请求处理到响应的时间,进行 均衡分配
  1. 响应时间短 处理效率高 的服务器,分配到请求的 概率高
  2. 响应时间长 处理效率低 的服务器,分配到的 请求少
  3. 它是结合了前两者的优点 的一种调度算法
  • nginx 默认不支持 fair 算法
  • 使用这种调度算法,需安装 upstream_fair 第三方模块

5. least_conn 最少连接

  • Web 请求会被分发到 连接数最少的服务器上

# 3. `least_conn` 最少连接
upstream www.least_conn.com {
	least_conn;
	server 172.17.0.2:8080;
	server 172.17.0.3:9090;
}

三、负载均衡配置

  • 负载均衡
  1. 在接收到某个请求后,分配到 后端 的多台服务器上,需要配置 upstream 模块
  2. 是命名一个 后端服务器组,组名必须为 后端服务器站点域名
  3. 内部可以配置多台服务器 ip:port,还可以设置 跳转规则及权重 等等
  4. 是配置 Nginx 与 后端服务器 负载均衡,非常重要的一个模块
  5. 并且它还能对 后端的服务器 的 健康状态 进行检查,若 后端服务器 中的一台发生故障,则 前端的请求 不会转发到该 故障的机器

# 负载均衡服务器的配置 注释如下
#events {
#	use epoll;
#	worker_connections 65535;
#}
# 1. upstream 模块负载均衡(四种调度算法)
upstream qs-server {
	ip_hash;    
	# 代表后端`tomcat`服务器地址
	server 10.10.10.111:8080;	
	# 权重		
	server 10.10.10.112:8080 weight=2;	
	server 10.10.10.113:8080;
}

# 1. `server_name`和`upstream`的组名可以不一致
# 2. `server_name`是外网访问接收请求的域名
# 3. `upstream`的组名是跳转后端服务器时站点访问的域名

# 2. `server`模块是接收外部请求的部分
server {
	# 监听`80`端口 
	listen 80;
	# 配置服务名,代表外网访问的域名
	server_name www.qs.com;    
	
	# 同样代表过滤器,用于制定不同请求的不同操作
	location / {
		# 代表后端服务器组名,此组名必须为后端服务器站点域名
	    proxy_pass http://qs-server;	
        proxy_set_header X-real-ip  $remote_addr;
    }
}
# 虚拟主机的配置(采用调度算法2:ip_hash)
server {
	listen 80;
	server_name mongo.demo.com;
	
	# 对 "/" 启用反向代理
	location / {
		proxy_pass http://webhost;
		proxy_redirect off;
		proxy_set_header X-Real-IP $remote_addr;
		# 后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		# 以下是一些反向代理的配置(可选)
		proxy_set_header Host $host;
		# 允许客户端请求的最大单文件字节数
		client_max_body_size 10m;
		# 缓冲区代理缓冲用户端请求的最大字节数
		client_body_buffer_size 128k;
		# nginx 跟后端服务器连接超时时间(代理连接超时)
		proxy_connect_timeout 90;
		# 后端服务器数据回传时间(代理发送超时)
		proxy_send_timeout 90;
		# 连接成功后,后端服务器响应时间(代理接收超时)
		proxy_read_timeout 90;
		# 设置代理服务器(nginx)保存用户头信息的缓冲区大小
		proxy_buffer_size 4k;
		# proxy_buffers 缓冲区,网页平均在 32k 以下的设置
		proxy_buffers 4 32k;
		# 高负荷下缓冲大小(proxy_buffers * 2)
		proxy_busy_buffers_size 64k; 
		proxy_temp_file_write_size 64k;
		# 设定缓存文件夹大小,大于这个值,将从 upstream 服务器传
	}
}

四、负载均衡备份

# 备份`backup`配置
upstream www.backup.com {
	server 172.17.0.2:8080;
	# 其他非`backup`机器都挂掉后,才会请求`backup`机器
	server 172.17.0.3:9090 backup;
}

# 宕机`down`配置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑士梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值