9.8 KiB
ThingsBoard 部署方案分析
1. 概述
ThingsBoard 支持两种主要的部署模式:单体模式(Monolith)和微服务模式(Microservices)。此外,还支持 Docker 容器化部署和 Kubernetes 部署。
2. 部署模式
2.1 单体模式(Monolith)
适用场景:
- 小型部署
- 开发和测试环境
- 设备数量较少(< 10,000)
特点:
- 所有服务运行在一个进程中
- 配置简单
- 资源占用较少
- 不支持水平扩展
配置:
service:
type: monolith
启动方式:
java -jar thingsboard.jar
2.2 微服务模式(Microservices)
适用场景:
- 生产环境
- 大规模部署
- 高可用性要求
- 需要水平扩展
特点:
- 服务拆分,独立部署
- 支持水平扩展
- 高可用性
- 配置复杂
服务组件:
- tb-core: 核心服务(设备管理、用户管理、API)
- tb-rule-engine: 规则引擎服务
- tb-transport-*: 传输服务(MQTT、HTTP、CoAP、LWM2M、SNMP)
- tb-js-executor: JavaScript 执行器
- tb-web-ui: Web UI 服务
- tb-vc-executor: 版本控制执行器
配置:
service:
type: tb-core # 或 tb-rule-engine, tb-transport 等
3. Docker 部署
3.1 Docker Compose 配置
位置: docker/docker-compose.yml
主要服务:
services:
# 核心服务
tb-core1:
image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
environment:
TB_SERVICE_ID: tb-core1
TB_SERVICE_TYPE: tb-core
env_file:
- tb-node.env
tb-core2:
image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
environment:
TB_SERVICE_ID: tb-core2
TB_SERVICE_TYPE: tb-core
# 规则引擎服务
tb-rule-engine1:
image: "${DOCKER_REPO}/${TB_NODE_DOCKER_NAME}:${TB_VERSION}"
environment:
TB_SERVICE_ID: tb-rule-engine1
TB_SERVICE_TYPE: tb-rule-engine
# 传输服务
tb-mqtt-transport1:
image: "${DOCKER_REPO}/${MQTT_TRANSPORT_DOCKER_NAME}:${TB_VERSION}"
environment:
TB_SERVICE_ID: tb-mqtt-transport1
ports:
- "1883"
# Web UI 服务
tb-web-ui1:
image: "${DOCKER_REPO}/${WEB_UI_DOCKER_NAME}:${TB_VERSION}"
# 负载均衡器
haproxy:
image: thingsboard/haproxy-certbot:2.2.33-alpine
ports:
- "80:80"
- "443:443"
- "1883:1883"
3.2 数据库配置
PostgreSQL 模式
配置文件: docker/tb-node.postgres.env
DATABASE_TS_TYPE=sql
SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/thingsboard
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=postgres
Docker Compose: docker/docker-compose.postgres.yml
services:
postgres:
image: postgres:16.6
environment:
POSTGRES_DB: thingsboard
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
混合模式(PostgreSQL + Cassandra)
配置文件: docker/tb-node.hybrid.env
DATABASE_TS_TYPE=cassandra
CASSANDRA_CLUSTER_NAME=ThingsBoard Cluster
CASSANDRA_URL=cassandra:9042
Docker Compose: docker/docker-compose.hybrid.yml
services:
postgres:
# PostgreSQL 配置(用于实体数据)
cassandra:
image: cassandra:4.1
environment:
CASSANDRA_CLUSTER_NAME: ThingsBoard Cluster
volumes:
- cassandra-data:/var/lib/cassandra
3.3 缓存配置
Valkey Standalone
配置文件: docker/cache-valkey.env
CACHE_TYPE=valkey
REDIS_URL=valkey:6379
Valkey Cluster
配置文件: docker/cache-valkey-cluster.env
CACHE_TYPE=valkey-cluster
REDIS_CLUSTER_NODES=valkey-node-1:6379,valkey-node-2:6379,valkey-node-3:6379
Valkey Sentinel
配置文件: docker/cache-valkey-sentinel.env
CACHE_TYPE=valkey-sentinel
REDIS_SENTINEL_MASTER=mymaster
REDIS_SENTINEL_NODES=valkey-sentinel-1:26379,valkey-sentinel-2:26379,valkey-sentinel-3:26379
3.4 消息队列配置
Kafka
配置文件: docker/queue-kafka.env
QUEUE_TYPE=kafka
KAFKA_SERVERS=kafka:9092
Docker Compose: docker/docker-compose.kafka.yml
services:
zookeeper:
image: zookeeper:3.8.1
kafka:
image: confluentinc/cp-kafka:7.5.0
depends_on:
- zookeeper
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
RabbitMQ
配置文件: docker/queue-rabbitmq.env
QUEUE_TYPE=rabbitmq
RABBITMQ_URL=amqp://rabbitmq:5672
3.5 部署步骤
3.5.1 准备环境
# 1. 创建日志目录
./docker-create-log-folders.sh
# 2. 配置环境变量(.env 文件)
DATABASE=postgres # 或 hybrid
CACHE=valkey # 或 valkey-cluster, valkey-sentinel
QUEUE=kafka # 或 rabbitmq
3.5.2 安装
# 安装 ThingsBoard(包含数据库初始化)
./docker-install-tb.sh --loadDemo
3.5.3 启动服务
# 启动所有服务
./docker-start-services.sh
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f tb-core1
3.5.4 停止服务
# 停止服务
./docker-stop-services.sh
# 删除服务
./docker-remove-services.sh
3.5.5 更新服务
# 更新所有服务
./docker-update-service.sh
# 更新特定服务
./docker-update-service.sh tb-core1 tb-mqtt-transport1
3.5.6 升级
# 停止服务
./docker-stop-services.sh
# 执行升级
./docker-upgrade-tb.sh --fromVersion=3.6.0
# 启动服务
./docker-start-services.sh
4. 单 Docker 镜像部署
4.1 适用场景
- 快速测试
- 小型部署
- 开发环境
4.2 镜像类型
位置: msa/tb/
- thingsboard/tb: 使用 HSQLDB(内存数据库)
- thingsboard/tb-postgres: 使用 PostgreSQL
- thingsboard/tb-cassandra: 使用混合模式(PostgreSQL + Cassandra)
4.3 运行示例
# 使用 PostgreSQL
docker run -it -p 9090:9090 -p 1883:1883 \
-v ~/.mytb-data:/data \
--name mytb \
thingsboard/tb-postgres
5. Kubernetes 部署
5.1 服务拆分
在 Kubernetes 中,每个服务可以作为独立的 Deployment:
- tb-core: Core Service Deployment
- tb-rule-engine: Rule Engine Deployment
- tb-transport-*: Transport Service Deployments
- tb-web-ui: Web UI Deployment
5.2 配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: tb-core
spec:
replicas: 2
selector:
matchLabels:
app: tb-core
template:
metadata:
labels:
app: tb-core
spec:
containers:
- name: tb-core
image: thingsboard/tb-node:latest
env:
- name: TB_SERVICE_TYPE
value: "tb-core"
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://postgres:5432/thingsboard"
6. 监控配置
6.1 Prometheus + Grafana
启用监控:
# 设置环境变量
export MONITORING_ENABLED=true
访问地址:
- Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3000(默认用户名: admin, 密码: foobar)
配置文件:
- Prometheus:
docker/monitoring/prometheus/prometheus.yml - Grafana:
docker/monitoring/grafana/provisioning/dashboards/
7. 高可用性配置
7.1 服务冗余
- tb-core: 至少 2 个实例
- tb-rule-engine: 至少 2 个实例
- tb-transport-*: 至少 2 个实例(每个传输协议)
7.2 数据库高可用
- PostgreSQL: 使用主从复制或集群模式
- Cassandra: 使用集群模式(至少 3 个节点)
7.3 缓存高可用
- Valkey Cluster: 3 主 3 从
- Valkey Sentinel: 1 主 1 从 1 哨兵
7.4 消息队列高可用
- Kafka: 使用集群模式(至少 3 个 broker)
- RabbitMQ: 使用集群模式或镜像队列
8. 负载均衡
8.1 HAProxy 配置
位置: docker/haproxy/config/
HAProxy 负责:
- HTTP/HTTPS 流量负载均衡
- MQTT 连接负载均衡
- WebSocket 连接负载均衡
8.2 端口映射
- 80/443: HTTP/HTTPS
- 1883: MQTT
- 7070: Edge RPC
- 9999: HAProxy 统计
9. 网络配置
9.1 服务发现
使用 ZooKeeper 进行服务发现:
services:
zookeeper:
image: zookeeper:3.8.1
ports:
- "2181"
9.2 内部通信
服务间通过消息队列和 ZooKeeper 进行通信,不需要直接网络连接。
10. 存储配置
10.1 数据持久化
使用 Docker Volumes 持久化数据:
volumes:
postgres-data:
cassandra-data:
tb-logs:
10.2 日志管理
日志目录映射到宿主机:
volumes:
- ./tb-node/log:/var/log/thingsboard
11. 安全配置
11.1 SSL/TLS
位置: docker/haproxy/config/
配置 SSL 证书:
# Let's Encrypt 证书
- ./haproxy/letsencrypt:/etc/letsencrypt
# 自定义证书
- ./haproxy/certs.d:/usr/local/etc/haproxy/certs.d
11.2 防火墙
建议只开放必要端口:
- 80/443: HTTP/HTTPS
- 1883: MQTT
- 5683: CoAP
12. 性能调优
12.1 JVM 参数
JAVA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"
12.2 数据库连接池
spring:
datasource:
hikari:
maximum-pool-size: 50
minimum-idle: 10
12.3 消息队列配置
queue:
core:
pack-processing-timeout: 3000
poll-interval: 25
13. 总结
ThingsBoard 的部署方案具有以下特点:
- 灵活的部署模式: 支持单体和微服务两种模式
- 容器化支持: 完整的 Docker 和 Kubernetes 支持
- 数据库选择: 支持 PostgreSQL、TimescaleDB、Cassandra
- 高可用性: 支持服务冗余和数据库集群
- 监控集成: 内置 Prometheus 和 Grafana 支持
- 易于扩展: 微服务模式支持水平扩展
根据实际需求选择合适的部署方案:
- 小型部署: 单体模式 + Docker
- 中型部署: 微服务模式 + Docker Compose
- 大型部署: 微服务模式 + Kubernetes