反向代理 and 负载均衡
nginx 负载均衡的平衡机制
- 轮询,向应用服务器的请求以循环方式分发。
- 最少连接,下一个请求被分配给具有最少数量活动连接的服务器(最清闲的服务器)。
- ip-hash,哈希函数用于确定下一个请求(基于客户端的IP地址)应选择哪个服务器(相同IP 的发送到同一个服务器,解决 session 问题)。
轮训方式负载均衡
// 代理服务器的配置文件 http { // 针对 http://test.com 域名的访问,将会按照默认 轮训的方式分配给列表中的服务器 upstream http://test.com { server srv1.example.com; // 服务器 A server srv2.example.com; // 服务器 B server srv3.example.com; // 服务器 C } } // 具体负载均衡的服务器 A 配置文件 http { server { listen 80; location / { proxy_pass http://test.com; } } } // 具体负载均衡的服务器 B 配置文件 http { server { listen 80; location / { proxy_pass http://test.com; } } } ....同上
最少连接数方式负载均衡
// 代理服务器的配置文件 http { // 针对 http://test.com 域名的访问,将根据服务器的负载情况进行分配 upstream http://test.com { least_conn; # 表示采取 最少连接数 的负载均衡机制 server srv1.example.com; // 服务器 A server srv2.example.com; // 服务器 B server srv3.example.com; // 服务器 C } } // 具体负载均衡的服务器 A 配置文件 http { server { listen 80; location / { proxy_pass http://test.com; } } } ....同上
ip-hash 方式负载均衡
解释
请注意,通过循环或最少连接的负载平衡,每个后续客户端的请求可能潜在地分配到不同的服务器。不能保证同一客户端始终被定向到同一个服务器。
使用ip-hash,客户端的IP地址用作哈希键,以确定应为客户端请求选择服务器组中的哪个服务器。该方法确保来自同一客户端的请求将始终被定向到同一台服务器,除非该服务器不可用。
解决 session 问题。
// 代理服务器的配置文件 http { // 针对 http://test.com 域名的访问,将确保同一IP始终访问到同一服务器 upstream http://test.com { ip_hash; # ip_hash 的负载均衡机制 server srv1.example.com; // 服务器 A server srv2.example.com; // 服务器 B server srv3.example.com; // 服务器 C } } // 具体负载均衡的服务器 A 配置文件 http { server { listen 80; location / { proxy_pass http://test.com; } } } ....同上
加权负载均衡
upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }
当 为服务器指定权重参数时,权重将作为负载均衡决策的一部分进行计算。
通过这种配置,每5个新请求将分布在应用程序实例中,如下所示:3个请求将被定向到srv1,一个请求将转到srv2,另一个请求将转到srv3。
服务器健康检查
nginx
中的反向代理实现包括带内(或被动)服务器运行状况检查。如果特定服务器的响应失败并出现错误,nginx会将此服务器标记为失败,并尝试避免为此后续入站请求选择此服务器一段时间。
max_fails
设置失败重试次数。 fail_timeout
设置重试间隔时间。默认情况下, max_fails
设置为 1
。 当设置为 0
时,对该服务器禁用运行状况检查。该 fail_timeout
参数还定义如何,只要服务器失败将被标记。在 服务器故障后的 fail_timeout间隔之后,nginx将开始以实时客户端的请求来优雅地探测服务器。如果探针成功,则将服务器标记为实时的。
相关推荐
tinydu 2020-08-03
畅聊架构 2020-06-28
zllbirdonland 2020-06-16
swtIrene 2020-06-04
畅聊架构 2020-06-01
后厂村老司机 2020-04-19
azhuye 2020-11-12
liupengqwert 2020-10-28
YzhilongY 2020-08-31
crazyjingling 2020-08-16
swtIrene 2020-08-14
slovyz 2020-08-14
tinydu 2020-08-09
Studynutlee 2020-08-03
快乐de馒头 2020-07-29
yungame 2020-07-27
buaichidoufu 2020-07-28
wanjichun 2020-07-26