ThingsBoard集群部署方案:高可用架构设计与负载均衡配置
随着物联网设备规模的快速增长,单节点部署的ThingsBoard面临性能瓶颈和单点故障风险。本文将详细介绍如何通过Docker Compose实现ThingsBoard的高可用集群部署,包括多节点服务编排、负载均衡配置及故障转移策略,确保系统在大规模设备接入场景下的稳定性和可扩展性。
集群架构设计
核心组件与服务拆分
ThingsBoard集群采用微服务架构,将核心功能拆分为多个独立服务,通过ZooKeeper实现服务发现与协调。关键服务包括:
- 核心服务(tb-core):处理设备管理、数据处理和API请求,部署两个实例实现高可用
- 规则引擎(tb-rule-engine):负责数据流处理和业务规则执行,双实例冗余部署
- 传输服务:支持MQTT、HTTP、CoAP等多种协议接入,其中MQTT和HTTP服务采用双实例部署
- JavaScript执行器(tb-js-executor):处理脚本执行任务,通过多实例(10个副本)实现负载分担
服务定义文件:docker-compose.yml
集群拓扑结构
环境准备与依赖配置
硬件与软件要求
部署ThingsBoard集群需满足以下最低要求:
- 4核CPU、16GB内存、100GB SSD存储
- Docker CE 20.10+和Docker Compose 2.0+
- 操作系统:Ubuntu 20.04 LTS或CentOS 8
安装指南:docker/README.md
网络规划
| 服务类型 | 端口范围 | 协议 | 说明 |
|---|---|---|---|
| tb-core | 8080, 7070 | TCP | 核心API与WebSocket端口 |
| MQTT传输 | 1883 | TCP | 设备消息传输端口 |
| HTTP传输 | 8081 | TCP | REST API与HTTP设备接入 |
| 负载均衡器 | 80, 443 | TCP | 前端流量入口 |
集群部署步骤
1. 环境配置
克隆代码仓库:
git clone https://gitcode.com/GitHub_Trending/th/thingsboard
cd GitHub_Trending/th/thingsboard
2. 数据库与缓存配置
编辑.env文件选择数据库类型(PostgreSQL或混合模式)和缓存策略:
DATABASE=postgres:使用PostgreSQL作为主数据库CACHE=valkey-cluster:启用Valkey集群作为分布式缓存
配置文件:docker/.env(需手动创建)
3. 初始化日志目录
执行脚本创建日志文件夹并设置权限:
cd docker
./docker-create-log-folders.sh
脚本文件:docker/docker-create-log-folders.sh
4. 执行安装
./docker-install-tb.sh --loadDemo
参数说明:
--loadDemo:可选参数,加载演示数据便于测试
安装脚本:docker/docker-install-tb.sh
5. 启动集群
./docker-start-services.sh
启动后可通过docker-compose ps检查服务状态,正常情况下所有服务应显示为"Up"状态。
负载均衡配置
HAProxy配置
集群通过HAProxy实现流量分发,配置文件位于docker/haproxy/config/haproxy.cfg。核心配置包括:
- 前端配置:定义80/443端口的HTTP流量和1883端口的MQTT流量
- 后端配置:
tb_core_backend:负载均衡tb-core1和tb-core2tb_webui_backend:分发Web UI请求到tb-web-ui1和tb-web-ui2tb_mqtt_backend:平衡MQTT连接到两个传输服务实例
负载均衡策略
- 核心服务:采用轮询(roundrobin)策略分发请求
- Web UI:基于源IP的会话保持(source)确保用户会话一致性
- MQTT服务:使用leastconn策略将新连接分配到当前连接数最少的节点
高可用保障
服务自愈机制
所有服务配置restart: always策略,当服务异常退出时Docker会自动重启实例:
tb-core1:
restart: always
# 其他配置...
故障转移测试
手动停止一个核心服务实例测试故障转移:
docker-compose stop tb-core1
此时HAProxy会自动将流量路由到tb-core2,可通过日志确认:
docker-compose logs -f haproxy
数据持久化
核心服务通过卷挂载实现配置和日志持久化:
volumes:
- ./tb-node/conf:/config
- ./tb-node/log:/var/log/thingsboard
配置位置:docker-compose.yml#L52-L54
性能优化建议
1. 资源调整
根据设备规模调整服务资源限制,编辑docker-compose.yml修改每个服务的资源配置:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
2. 水平扩展
增加核心服务实例数量:
docker-compose up -d --scale tb-core=3
注意:需同步更新HAProxy配置添加新实例
3. 监控配置
启用Prometheus和Grafana监控:
export MONITORING_ENABLED=true
./docker-start-services.sh
监控配置文件:docker/docker-compose.prometheus-grafana.yml
维护与故障处理
服务状态检查
查看服务日志:
# 查看核心服务日志
docker-compose logs -f tb-core1 tb-core2
# 查看所有服务状态
docker-compose ps
滚动更新
更新单个服务:
./docker-update-service.sh tb-core
更新脚本:docker/docker-update-service.sh
备份策略
定期备份数据库:
# PostgreSQL备份示例
docker exec -t docker_postgres_1 pg_dump -U postgres thingsboard > backup_$(date +%Y%m%d).sql
集群验证与测试
功能验证
-
访问Web UI:http://服务器IP,使用默认凭据登录
- 系统管理员:sysadmin@thingsboard.org / sysadmin
- 租户管理员:tenant@thingsboard.org / tenant(需--loadDemo)
-
设备连接测试:使用MQTT客户端连接1883端口,发布遥测数据
高可用测试
- 模拟服务故障:
docker-compose stop tb-core1
-
验证业务连续性:
- Web UI应仍可访问
- 设备数据应继续流入系统
- 规则链应正常执行
-
恢复服务:
docker-compose start tb-core1
总结
通过Docker Compose实现的ThingsBoard集群方案,具有以下优势:
- 高可用性:核心服务多实例部署,避免单点故障
- 可扩展性:支持按需增加服务实例应对负载增长
- 简化部署:通过脚本自动化安装和配置流程
- 灵活配置:支持多种数据库和缓存组合
集群部署建议根据设备规模和业务需求进行资源调整,对于超过10万台设备的场景,建议进一步优化数据库和消息队列配置,或考虑Kubernetes环境下的容器编排方案。
完整部署文档:docker/README.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



