ThingsBoard集群部署方案:高可用架构设计与负载均衡配置

ThingsBoard集群部署方案:高可用架构设计与负载均衡配置

【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 【免费下载链接】thingsboard 项目地址: https://gitcode.com/GitHub_Trending/th/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

集群拓扑结构

mermaid

环境准备与依赖配置

硬件与软件要求

部署ThingsBoard集群需满足以下最低要求:

  • 4核CPU、16GB内存、100GB SSD存储
  • Docker CE 20.10+和Docker Compose 2.0+
  • 操作系统:Ubuntu 20.04 LTS或CentOS 8

安装指南:docker/README.md

网络规划

服务类型端口范围协议说明
tb-core8080, 7070TCP核心API与WebSocket端口
MQTT传输1883TCP设备消息传输端口
HTTP传输8081TCPREST API与HTTP设备接入
负载均衡器80, 443TCP前端流量入口

集群部署步骤

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-core2
    • tb_webui_backend:分发Web UI请求到tb-web-ui1和tb-web-ui2
    • tb_mqtt_backend:平衡MQTT连接到两个传输服务实例

负载均衡策略

  • 核心服务:采用轮询(roundrobin)策略分发请求
  • Web UI:基于源IP的会话保持(source)确保用户会话一致性
  • MQTT服务:使用leastconn策略将新连接分配到当前连接数最少的节点

高可用保障

服务自愈机制

所有服务配置restart: always策略,当服务异常退出时Docker会自动重启实例:

tb-core1:
  restart: always
  # 其他配置...

配置位置:docker-compose.yml#L34

故障转移测试

手动停止一个核心服务实例测试故障转移:

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

集群验证与测试

功能验证

  1. 访问Web UI:http://服务器IP,使用默认凭据登录

    • 系统管理员:sysadmin@thingsboard.org / sysadmin
    • 租户管理员:tenant@thingsboard.org / tenant(需--loadDemo)
  2. 设备连接测试:使用MQTT客户端连接1883端口,发布遥测数据

高可用测试

  1. 模拟服务故障:
docker-compose stop tb-core1
  1. 验证业务连续性:

    • Web UI应仍可访问
    • 设备数据应继续流入系统
    • 规则链应正常执行
  2. 恢复服务:

docker-compose start tb-core1

总结

通过Docker Compose实现的ThingsBoard集群方案,具有以下优势:

  • 高可用性:核心服务多实例部署,避免单点故障
  • 可扩展性:支持按需增加服务实例应对负载增长
  • 简化部署:通过脚本自动化安装和配置流程
  • 灵活配置:支持多种数据库和缓存组合

集群部署建议根据设备规模和业务需求进行资源调整,对于超过10万台设备的场景,建议进一步优化数据库和消息队列配置,或考虑Kubernetes环境下的容器编排方案。

完整部署文档:docker/README.md

【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 【免费下载链接】thingsboard 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值