需求
nginx 作为负载均衡服务器,用户请求先到达 nginx,再由 nginx 根据负载配置将请求分发至 tomcat 服务器
- tomcat 服务器一:192.168.127.130:8080
- tomcat 服务器二:192.168.127.130:8081
- tomcat 服务器三:192.168.127.130:8082
- nginx 代理服务器:192.168.127.130
什么是反向代理
反向代理可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器
负载均衡
负载均衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。可以将 nginx 用作非常有效的 HTTP 负载平衡器,以将流量分配到多个应用程序服务器,并使用 nginx 改善 Web 应用程序的性能,可伸缩性和可靠性。
部署 Tomcat 集群
创建 docker-compose.yml
,定义 tomcat
服务集群,分别对外映射端口 8080,8081 和 8082
version: '3'
services:
tomcat1:
image: tomcat
container_name: tomcat1
ports:
- 8080:8080
tomcat2:
image: tomcat
container_name: tomcat2
ports:
- 8081:8080
tomcat3:
image: tomcat
container_name: tomcat3
ports:
- 8082:8080
启动容器
$ docker-compose up -d
Nginx 自带支持的负载均衡机制
默认(轮询):对应用程序服务器的请求以轮询方式分发:
upstream tomcatServers {
server 192.168.127.130:8080;
server 192.168.127.130:8081;
server 192.168.127.130:8082;
}
minimum_conn(最少连接):将下一个请求分配给活动连接数量最少的服务器:
upstream tomcatServers {
minimum_conn;
server 192.168.127.130:8080;
server 192.168.127.130:8081;
server 192.168.127.130:8082;
}
ip-hash(会话持久性):—哈希函数用于确定应为下一个固定请求选择哪个服务器(基于客户端的IP地址),解决 session
的问题
upstream tomcatServers {
ip_hash;
server 192.168.127.130:8080;
server 192.168.127.130:8081;
server 192.168.127.130:8082;
}
负载均衡设备的相关配置说明
- weight:默认值为 1,值越大,负载的权重就越大
- down:表示当前的 server 暂时不参与负载
- max_fails:允许请求失败的次数默认为 1 当超过最大次数时,返回
proxy_next_upstream
模块定义的错误 - fail_timeout:触发
max_fails
后暂停的时间,过了这段时间,重新探测故障服务器是否可用 - backup:其它所有的非
backup
机器down
或者忙的时候,请求backup
机器。所以这台机器压力会最轻
配置 Nginx
创建 docker-compose.yml
,挂载 nginx.conf
文件,并对外映射端口 80
version: '3.1'
services:
nginx:
restart: always
image: nginx
container_name: nginx
ports:
- 80:81
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
在 docker-compose.yml
同目录下创建 nginx.conf
文件,配置反向代理及负载均衡
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 服务器集群,weight是权重的意思,权重越大,分配的概率越大
upstream tomcatServers {
minimum_conn;
server 192.168.127.130:8080 weight = 10;
server 192.168.127.130:8081 weight = 10;
server 192.168.127.130:8082 weight = 10;
}
server {
listen 81;
location / {
# 配置反向代理地址
proxy_pass http://tomcatServers;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
启动容器
$ docker-compose up -d
- 文章作者:彭超
- 本文首发于个人博客:https://antoniopeng.com/2019/09/30/nginx/Nginx%E5%AE%9E%E7%8E%B0%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%8F%8A%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 彭超 | Blog!