Nginx负载均衡部署

2025-1-9 Guide
  • 管理员
  • 运维
About 11 min

# 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;
    }
}
1
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

# 步骤说明

  1. 定义后端服务器组(upstream) • server 192.168.0.100:8080; 和 server 192.168.0.101:8080; 分别指向两个 SpringMVC 服务实例。 • 默认负载均衡策略是 轮询,你也可以选择其他策略,例如 least_conn(最少连接)或 ip_hash(基于客户端 IP)。
  2. 设置转发路径(location /cboard) • proxy_pass http://cboard_backend; 将请求转发给后端服务器组。 • 如果上下文路径 /cboard 在 Nginx 和后端服务中一致,无需额外配置。如果 Nginx 和后端服务路径不同,需要调整 proxy_pass 的 URL(例如 proxy_pass http://cboard_backend/cboard;)。
  3. 添加请求头信息 • proxy_set_header 确保后端服务能够获取客户端的真实 IP 和 Host 信息。
  4. 超时时间 • 设置合适的连接、读写超时时间(默认 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
1
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"
1
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
1
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Last update: January 9, 2025 16:43