Nginx负载均衡部署
# Nginx负载均衡部署
多个BI服务部署在不同服务器,在其中任意服务器或单独一台服务器做部署Nginx服务做复杂均衡,请求转发
# 部署BI服务
部署两份服务,服务地址分别为
- http://192.168.0.100:8080/cboard
- http://192.168.0.101:8080/cboard
# 部署nginx服务
在 Nginx 中配置负载均衡可以通过 upstream 配置块实现。
# 定义负载均衡的后端服务器组
upstream cboard_backend {
# 添加两台服务的地址
server 192.168.0.100:8080;
server 192.168.0.101:8080;
# 可选:设置负载均衡策略(默认是轮询)
# Least connections (最少连接)
# least_conn;
# IP 哈希(客户端IP固定分配到某一台后端服务器)
# ip_hash;
}
server {
# 监听的端口,可以是 80(HTTP)或 443(HTTPS)
listen 80;
# 配置访问域名或 IP(如果不需要域名可以直接用默认配置)
server_name cboard.example.com;
# 定义上下文路径
location /cboard {
# 将请求转发到后端的 upstream 组
proxy_pass http://cboard_backend;
# 设置头信息,确保后端服务获取客户端真实 IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 可选:设置超时时间
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
# 可选:处理错误页面
error_page 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 步骤说明
- 定义后端服务器组(upstream) • server 192.168.0.100:8080; 和 server 192.168.0.101:8080; 分别指向两个 SpringMVC 服务实例。 • 默认负载均衡策略是 轮询,你也可以选择其他策略,例如 least_conn(最少连接)或 ip_hash(基于客户端 IP)。
- 设置转发路径(location /cboard) • proxy_pass http://cboard_backend; 将请求转发给后端服务器组。 • 如果上下文路径 /cboard 在 Nginx 和后端服务中一致,无需额外配置。如果 Nginx 和后端服务路径不同,需要调整 proxy_pass 的 URL(例如 proxy_pass http://cboard_backend/cboard;)。
- 添加请求头信息 • proxy_set_header 确保后端服务能够获取客户端的真实 IP 和 Host 信息。
- 超时时间 • 设置合适的连接、读写超时时间(默认 60 秒)。 •如果请求是长连接的 WebSocket 应用,请注意适配。
# 2 缓存数据库独立部署
默认的缓存数据库为H2嵌入式内存数据库,有必要可以改为外置的mysql数据库 准备MySQL数据库,在mysql中新建数据库如:cboard_aggregator
配置方式, 修改application.properties
中下面内容中的连接信息,并重启
aggregator.type=mysql
aggregator.mysql.name=mysql-aggregator
aggregator.mysql.driver-class-name=com.mysql.jdbc.Driver
aggregator.mysql.url=jdbc:mysql://localhost:3306/cboard_aggregator?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
aggregator.mysql.username=cboard_agg
aggregator.mysql.password=cboard_agg
2
3
4
5
6
# 3 分布式资源管理Minio配置
Minio为分布式文件管理系统,当用户需要使用系统重资源上传功能时,需要把原本上传在本地的文件转移到上传Mino
# 准备Minio组件
通过docker-compose.xml启动
version: '3'
services:
minio:
image: minio/minio:latest
container_name: minio # 容器名为'minio'
restart: always # 指定容器退出后的重启策略为始终重启
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./data:/data"
- "./config:/root/.minio"
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
MINIO_PROMETHEUS_AUTH_TYPE: "public"
MINIO_ACCESS_KEY: "root" # 登录账号
MINIO_SECRET_KEY: "passw0rd" # 登录密码
# MINIO_SERVER_URL: 'http://mac-minio.ngrok.auiucloud.com'
# MINIO_BROWSER_REDIRECT_URL: 'http://mac-minio-console.ngrok.auiucloud.com'
# MINIO_DOMAIN: 'mac-minio.ngrok.auiucloud.com'
command: server --console-address ':9001' /data
logging:
driver: "json-file"
options:
max-size: "100m"
ports: # 映射端口
- "9000:9000"
- "9001:9001"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 修改BI配置
配置方式, 修改application.properties
中下面内容中的连接信息,开启resource.type配置
resource.type=minio
resource.minio.endpoint=http://127.0.0.1:9000
resource.minio.port=9000
resource.minio.accessKey=root
resource.minio.secretKey=passw0rd
resource.minio.secure=false
resource.minio.bucketName=public
resource.minio.dataBucket=data
resource.minio.imageSize=10485760
resource.minio.fileSize=1073741824
2
3
4
5
6
7
8
9
10
# 4 定时任务Quartz配置数据库运行
# 准备quartz数据库
下面对应数据库的Quartz脚本 https://hcc2.ibidemo.cn/releases/quartz/ 建议使用mysql
在mysql中新建数据库quartz,并运行quartz脚本
# 修改BI配置
修改config/quartz.propertes
org.quartz.threadPool.threadCount=5
# 取消下面三行注释切换Quartz元数据存储为MySQL
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource=jobQuartzDS
#============================================================================
# Configure Datasources,修改数据库url
#============================================================================
org.quartz.dataSource.jobQuartzDS.driver = com.mysql.cj.jdbc.Driver
org.quartz.dataSource.jobQuartzDS.URL = jdbc:mysql://localhost:3306/quartz?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
org.quartz.dataSource.jobQuartzDS.user = cboard
org.quartz.dataSource.jobQuartzDS.password = cboard
org.quartz.dataSource.jobQuartzDS.maxConnections = 15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17