# JetLinks-Pro集群部署

# 概述

本文档提供jetlinks-pro集群部署的详细步骤。

# 文档推荐

jetlinks-cloud集群部署

# 集群架构图

java image

# 材料准备

  1. 拉取jetlinks-pro源码,具体操作可参考源码获取
  2. 修改配置文件,配置文档参数修改参考常见参数说明
  3. 源码打jar包或docker镜像请移步部署文档指引,选择对应的打包方式并按指引操作。
  4. 上传部署文件(jar、基础服务组件安装包及镜像等)。

提示

如需使用docker方式部署,需自行安装docker环境,安装docker

# 各服务器上传jar、镜像等操作

相关材料上传及部署基础服务(Redis、ES、PG/Mysql)完成后,需在启动前修改部分参数。

重要

部署集群需要修改 jetlinks.server-id或者 jetlinks.cluster.id两者中任一值,该值必须不一致且固定,不可设置动态随机值。

jetlinks.cluster.id一致会导致集群内在某些场景下无法进行数据广播通知其余服务节点。

jetlinks.cluster.id不一致启动时随机会导致在某些场景下后端应用根据此参数从缓存中拿不到历史信息。

参数 说明
jetlinks.server-id 当前后端应用的唯一id,该参数已被注解过时,建议使用jetlinks.cluster.id
jetlinks.cluster.id 引用jetlinks.server-id的值,和jetlinks.server-id二选一即可。
jetlinks.cluster.external-host 集群节点通信对外暴露的host
jetlinks.cluster.external-port 集群节点通信对外暴露的端口
jetlinks.cluster.seeds 集群种子节点,集群时,配置为集群节点的 external-host:external-port
spring.config.location 指定配置文件路径,使用该参数可以指定spring使用外置配置文件,而非jar包内部打包配置文件

# jar启动

在各服务器上执行以下命令,该命令携带了两个动态参数指定了集群相关信息,需在各应用启动时指定不同的cluster.idseeds则需要将所有种子节点的通信地址填入,包括当前节点地址信息。


java -jar jetlinks-standalone.jar --jetlinks.cluster.id=jetlinks:node1 --jetlinks.cluster.seeds=192.168.66.171:18844,192.168.66.177:18844,192.168.66.178:18844

# docker启动

  1. 上传docker-compose容器编排文件至各服务器(该文件以下简称DC文件),文件路径jetlinks-pro\dist\docker-compose.yml

DC文件示例:

version: '2'
services:
  jetlinks:
    image: registry.cn-hangzhou.aliyuncs.com/jetlinks-demo/jetlinks-standalone:2.0.0-SNAPSHOT
    container_name: jetlinks-pro
    ports:
      - 8845:8845 # API端口
      - 1883:1883 # MQTT端口
      - 11883:11883 # 通过openAPI使用mqtt订阅平台消息
      - 8100-8110:8100-8110 # 预留端口
      - 8200-8210:8200-8210/udp # udp端口
    volumes:
      - "./data:/application/data" # 临时保存协议目录
      - "./data/upload:/application/static/upload"  # 持久化上传的文件
    environment:
      ... # 此处省略的参数与jetlinks-pro单机版一致,详情参考单机版DC文件
      - "jetlinks.cluster.id=jetlinks-service:node1" # 后端应用的唯一id,请保持每个节点之间id不同
      - "jetlinks.cluster.external-host=192.168.66.171" # 集群节点通信对外暴露的host
      - "jetlinks.cluster.seeds[0]=192.168.66.171:18844" # 集群种子节点1
      - "jetlinks.cluster.seeds[1]=192.168.66.177:18844" # 集群种子节点2
      - "jetlinks.cluster.seeds[1]=192.168.66.178:18844" # 集群种子节点3
  1. DC文件所在目录执行docker-compose up -d命令创建并启动容器,使用docker ps -a命令并查看STATUSUP则表示启动成功。
$ docker ps -a
CONTAINER ID   IMAGE                                                                                COMMAND                  CREATED          STATUS        
               PORTS                                                                                                                NAMES
f303fc2fbd67   registry.cn-hangzhou.aliyuncs.com/jetlinks-demo/jetlinks-standalone:2.0.0-SNAPSHOT   "./docker-entrypoint…"   23 seconds ago   Up 16 seconds 
               0.0.0.0:1883->1883/tcp, 0.0.0.0:8100-8110->8100-8110/tcp, 0.0.0.0:8845->8845/tcp, 0.0.0.0:8200-8210->8200-8210/udp   jetlinks-pro
4e883fed1d0d   registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.1.0-SNAPSHOT                     
"/docker-entrypoint.…"   4 days ago       Up 7 minutes  
               0.0.0.0:9000->80/tcp                                                                                                 jetlinks-pro-ui
84a9379e3944   kibana:7.17.3                                                                        "/bin/tini -- /usr/l…"   3 weeks ago      Up 8 minutes  
               0.0.0.0:5601->5601/tcp                                                                                               jetlinks-kibana      
6366d9063dd0   elasticsearch:7.17.3                                                                 "/bin/tini -- /usr/l…"   3 weeks ago      Up 7 minutes  
               0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp                                                                       jetlinks-elasticsearch
7bc603f1e897   postgres:11-alpine                                                                   "docker-entrypoint.s…"   6 weeks ago      Up 7 minutes  
               0.0.0.0:5432->5432/tcp                                                                                               jetlinks-postgres       
4bdba77584ce   redis:5.0.4                                                                          "docker-entrypoint.s…"   2 months ago     Up 7 minutes  
               0.0.0.0:6379->6379/tcp                                                                                               jetlinks-redis

# 启动前端

  1. 配置nginx.conf文件,示例如下
events {
  worker_connections  1024;
}

http{

  upstream iotserver {
      server 192.168.66.171:8844 weight=1; #轮询地址,请根据实际部署后端地址进行替换
      server 192.168.66.177:8844 weight=1;
      server 192.168.66.178:8844 weight=1;
  }

   server {
      listen 9000; #监听端口号
      listen [::]:9000;
      gzip on;
      gzip_min_length 1k;
      gzip_comp_level 9;
      gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
      gzip_vary on;
      gzip_disable "MSIE [1-6]\.";
      root /usr/local/nginx/html/dist;  # 替换为dist文件上传路径
      location / {
        index  index.html;
      }

      location ^~/api/ {
         proxy_pass http://iotserver/;
         proxy_set_header X-Forwarded-Proto $scheme;
         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_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_connect_timeout   1;
         proxy_buffering off;
         chunked_transfer_encoding off;
         proxy_cache off;
         proxy_send_timeout      30m;
         proxy_read_timeout      30m;
         client_max_body_size    500m;
      }
   }
}

  1. 启动nginx
# 在nginx可执行程序所在目录下执行下方命令 -c 指定配置文件
./nginx -c /usr/local/nginx/conf/nginx.conf #启动nginx