一文读懂Nginx应用之 HTTP负载均衡(七层负载均衡)
目录
一、HTTP负载均衡简介
(一)、概述
(二)、upstream模块核心参数
1、server指令参数
2、负载均衡策略指令参数
(1)、轮询(Rond Robin)
(2)、最少连接(least_conn)
(3)、一致性哈希(Consistent Hash)
(4)、IP哈希(IP Hash)
3、长连接指令参数
二、环境规划
三、Nginx服务、Tomcat服务安装部署
(一)、Nginx服务安装部署
(二)、Tomcat服务安装部署
1、Tomcat01应用服务器部署应用程序
(1)、tomcat_8081服务
(2)、tomcat_8082服务
2、Tomcat02应用服务器部署应用程序
(1)、tomcat_8081服务
(2)、tomcat_8082服务
(三)、Tomcat服务验证
四、HTTP反向代理负载均衡配置
(一)、反向代理负载均衡配置
(二)、启动Nginx服务
(三)、客户端访问反向代理服务
1、客户端访问Nginx服务
2、观察服务日志
五、双虚拟主机反向代理负载均衡配置
(一)、反向代理负载均衡配置
(二)、启动Nginx服务
(三)、客户端访问反向代理服务
1、客户端访问虚拟主机8081
(1)、客户端访问Nginx服务
(2)、观察服务日志
2、客户端访问虚拟主机8082
(1)、客户端访问Nginx服务
(2)、观察服务日志
更多精彩原创博文详见: 《运维那些事儿》专栏总目录(持续更新)
一、HTTP负载均衡简介
(一)、概述
Nginx负载均衡是由ngx_http_proxy_module模块(即代理模块)和ngx_http_upstream模块(即上游服务器组模块)共同实现的,Nginx通过代理模块的反向代理功能将客户端请求转发到上游服务器组,上游服务器组模块通过指定的负载均衡策略及相关的参数配置,将客户端请求转发到后端目标服务器上。
HTTP负载均衡是基于HTTP协议的负载均衡应用,由于HTTP协议工作在OSI七层模型的应用层,因此也被称为“七层负载均衡”。
Nginx的 HTTP负载均衡功能是由ngx_http_proxy_module模块和ngx_http_upstream模块共同实现的,这两个模块会被默认编译,无须特殊配置编译参数。
(二)、upstream模块核心参数
1、server指令参数
参数 | 参数名称 | 默认值 | 参数说明 |
weight | 权重 | 1 | 设置服务器的权重 |
max_fails | 最大失败次数 | 1 | 被代理的后端服务器在fail_timeout规定时间内的最大请求失败次数,超过设定值后,被代理的后端服务器将被认为不可用。0表示关闭被代理的后端服务器的失败检测功能。 |
fail_timeout | 请求失败超时时间 | 10s | 被代理的后端服务器被置为不可用的最长时间以及被代理的后端服务器被连续失败检测的最长时间。 |
max_conns | 最大连接数 | 0 | 与被代理的后端服务器建立活动连接的最大数量,默认值0表示没有限制。 |
down | 无效服务器 | 无 | 用于将被代理的后端服务器标记为不可用状态。 |
backup | 备份服务器 | 无 | 用于将被代理的后端服务器标记为备份状态。当其他非备份状态的后端服务器均不可用时,才会把请求转发给备份状态的后端服务器。 |
配置示例:
- 标记后端服务器不可用
server 192.168.110.166:8081 down;
- 标记后端服务器为备份状态
server 192.168.110.166:8081 backup;
- 设置权重为1、不限制最大连接数、最大失败数为1、超时时间为10s
server 192.168.110.166:8081 weight=1 max_conns=0 max_fails=2 fail_timeout=10s;
2、负载均衡策略指令参数
Nginx支持多种负载均衡策略,默认的负载均衡策略为轮询(Rond Robin)策略。负载均衡策略的配置指令参数需要配置在upstream模块的首行位置。使用默认负载均衡策略时,则不需要显式配置。
(1)、轮询(Rond Robin)
轮询策略是Nginx默认的负载均衡策略,该策略将客户端的请求依次分配给后端服务器节点轮流响应。轮询策略实现简单、请求分配均衡,但也会因为后端服务器处理能力的不同而影响整个集群的处理性能。为了解决这个问题,在轮询策略的基础上,增加了权重参数,即可以根据后端服务器的性能差异,将客户端请求按照权重比例分配给不同的后端服务器进行响应。
使用默认负载均衡策略时,upstream模块中不需要显式配置负载均衡策略。
配置示例:
upstream test {
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}
(2)、最少连接(least_conn)
最少连接策略会在后端服务器组中个服务器权重的前提下,将客户端请求分配给活跃连接数最少得后端服务器。
配置示例:
upstream test {
least_conn; # 启用最少连接负载均衡策略
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}
(3)、一致性哈希(Consistent Hash)
一致性哈希策略可以针对客户端访问的URL计算哈希值,针对相同的URL请求,Nginx可以因相同的哈希值而将其分配到同一个后端服务器。当后端服务器为缓存服务器时,将极大提高命中率,从而提升访问速度。
配置示例:
upstream test {
hash $request_uri; # 以客户端请求URI为计算哈希值的key
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}upstream test {
hash $request_uri consistent; # 以客户端请求URI为计算哈希值的key# consistent表示启用一致性哈希算法
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}
(4)、IP哈希(IP Hash)
IP哈希策略根据客户端IP计算出哈希值,然后把客户端请求分配给该数值对应的后端服务器。在哈希值不变且后端服务器可用的情况下,同一个客户端的请求始终会被分配到同一台后端服务器上。IP哈希策略通常被应用在会话(Session)保持的场景。
配置示例:
upstream test {
ip_hash; # 启用IP哈希负载均衡策略
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}
3、长连接指令参数
指令 | 默认值 | 指令说明 |
keepalive | 无 | 当Nginx与后端服务器建立长连接时,设定每个工作进程可以缓存的与当前后端服务器保持长连接的数量。当超过设定值时,将根据最近最少使用算法(LRU)关闭连接。 |
keepalive_requests | 100 | 设置每个与后端服务器建立的长连接中传输请求的最大数量,超过这个值后该连接将被关闭。 |
配置示例:
upstream test {
keepalive 100; # 设置长连接缓存池为100keepalive_requests 2000; # 设置长连接复用请求的最大数量为2000
server 192.168.110.166:8081 weight=3;
server 192.168.110.167:8081 weight=2;
server 192.168.110.168:8081 weight=1;
}
二、环境规划
- 服务器规划
主机名称 IP地址 角色 应用程序 端口 Nginx01 192.168.110.161 反向代理服务器 Nginx 8081、8082 Tomcat01 192.168.110.166 后端应用服务器 Tomcat 8081、8082 Tomcat02 192.168.110.167 后端应用服务器 Tomcat 8081、8082