3、核心依赖安装:Redis安装与配置、Cassandra安装与配置(可选)、RabbitMQ/Kafka消息队列安装
ThingsBoard 平台的高可用与高性能依赖于底层中间件的稳定运行。本章将详细讲解三大核心依赖的安装与配置流程:Redis(缓存与会话管理)、Cassandra(可选,时序数据存储)以及RabbitMQ / Kafka(消息队列,用于节点间通信与事件驱动)。正确安装并调优这些组件是后续单机部署与集群扩展的基础。
部署顺序建议:先安装并验证 Redis,再根据业务需求决定是否安装 Cassandra,最后安装消息队列。消息队列的选择直接影响集群架构的复杂度,建议生产环境优先选用 Kafka。
3.1 Redis 安装与配置
Redis 在 ThingsBoard 中承担 缓存(设备属性、权限令牌)、会话管理(Web UI 登录态)和 速率限制 等关键职责。单机部署时可直接使用单实例;集群部署必须配置为 Redis Sentinel 或 Redis Cluster 以保证高可用。
3.1.1 安装步骤(Ubuntu 20.04 / CentOS 7)
# Ubuntu / Debian
sudo apt update
sudo apt install redis-server -y
# CentOS / RHEL
sudo yum install epel-release -y
sudo yum install redis -y
# 启动并设置开机自启
sudo systemctl start redis
sudo systemctl enable redis
# 验证安装
redis-cli ping
# 输出:PONG
3.1.2 生产环境配置要点
| 配置项 | 推荐值 | 说明 |
|---|---|---|
bind |
内网 IP 或 0.0.0.0 | 限制监听地址,生产环境不要暴露公网 |
protected-mode |
yes | 开启保护模式,防止未授权访问 |
requirepass |
强密码(如 TB@Redis!2024) |
必须设置密码认证 |
maxmemory |
物理内存的 70% | 避免 OOM,例如 4GB 内存设为 3gb |
maxmemory-policy |
allkeys-lru | 缓存淘汰策略,优先保留最近使用的 key |
save |
900 1 / 300 10 / 60 10000 | RDB 持久化策略,根据写入量调整 |
验证配置生效:修改
/etc/redis/redis.conf 后执行 sudo systemctl restart redis,然后使用 redis-cli -a '你的密码' info server 检查配置是否加载。
3.1.3 集群模式下的 Redis Sentinel 架构
下图展示了 ThingsBoard 集群中 Redis Sentinel 的典型部署方式:3 个 Sentinel 节点监控主从复制组,当主节点故障时自动完成故障转移,确保 ThingsBoard 服务无感知。
避坑提示:Sentinel 节点数量必须为奇数(至少 3 个),否则无法形成法定人数(quorum)进行故障转移。不要将 Sentinel 与 Redis 部署在同一台物理机上,避免单点故障。
3.2 Cassandra 安装与配置(可选)
Cassandra 是 ThingsBoard 的 时序数据存储引擎,用于存储设备遥测数据(telemetry)和最新值(latest values)。如果业务场景对时序写入吞吐要求极高(如每秒数万条数据点),建议启用 Cassandra;中小规模场景可使用 PostgreSQL 替代以降低运维复杂度。
3.2.1 安装 Cassandra(以 4.1.x 为例)
# 添加 Apache 仓库
echo "deb https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
# 添加 GPG 密钥
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
# 安装
sudo apt update
sudo apt install cassandra -y
# 启动服务
sudo systemctl start cassandra
sudo systemctl enable cassandra
# 验证集群状态
nodetool status
3.2.2 ThingsBoard 专用 Keyspace 与表结构
| Keyspace 名称 | 用途 | 复制策略 | 建议副本数 |
|---|---|---|---|
thingsboard |
时序遥测数据、最新值 | NetworkTopologyStrategy | 3(生产环境) |
thingsboard_ts_kv_cf |
原始时序数据列族 | 继承 keyspace 策略 | — |
thingsboard_ts_latest_cf |
设备最新值缓存 | 继承 keyspace 策略 | — |
性能调优关键参数:
修改后重启 Cassandra:
concurrent_reads: 32(增加读取并发)concurrent_writes: 64(提升写入吞吐)memtable_allocation_type: offheap_objects(减少 GC 压力)修改后重启 Cassandra:
sudo systemctl restart cassandra
3.3 RabbitMQ / Kafka 消息队列安装
消息队列是 ThingsBoard 集群的 通信中枢,负责在多个 ThingsBoard 节点之间传递设备消息、规则引擎事件和 RPC 请求。官方推荐两种选择:RabbitMQ(轻量、易运维)和 Kafka(高吞吐、持久化、适合大规模集群)。
3.3.1 选型对比
| 特性 | RabbitMQ | Kafka |
|---|---|---|
| 吞吐量 | 万级/秒 | 百万级/秒 |
| 消息持久化 | 支持(需配置) | 原生强持久化 |
| 运维复杂度 | 低 | 中高(需 Zookeeper/KRaft) |
| ThingsBoard 集群规模 | 3~5 节点 | 5 节点以上 |
| 延迟 | 微秒级 | 毫秒级 |
3.3.2 RabbitMQ 安装与配置
# 安装 Erlang(RabbitMQ 依赖)
sudo apt install erlang -y
# 安装 RabbitMQ
curl -fsSL https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.6/rabbitmq-server_3.12.6-1_all.deb -o rabbitmq.deb
sudo dpkg -i rabbitmq.deb
# 启动管理插件(Web UI)
sudo rabbitmq-plugins enable rabbitmq_management
# 创建 ThingsBoard 专用用户
sudo rabbitmqctl add_user tb_admin 'TB@Mq!2024'
sudo rabbitmqctl set_user_tags tb_admin administrator
sudo rabbitmqctl set_permissions -p / tb_admin ".*" ".*" ".*"
# 验证
sudo rabbitmqctl list_users
3.3.3 Kafka 安装与配置(推荐集群模式)
# 下载 Kafka(内置 KRaft 模式,无需 Zookeeper)
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0
# 启动 KRaft 模式(单节点示例)
# 1. 生成集群 ID
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
# 2. 格式化日志目录
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
# 3. 启动 Kafka
bin/kafka-server-start.sh config/kraft/server.properties &
# 创建 ThingsBoard 主题
bin/kafka-topics.sh --create --topic tb-rule-engine --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
bin/kafka-topics.sh --create --topic tb-transport --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
生产环境 Kafka 集群建议:至少 3 个 Broker 节点,每个 Broker 独立物理机或容器;主题分区数 = Broker 数 × 2;副本因子 = 3;保留策略设置为 7 天或根据数据量调整
log.retention.hours。
3.3.4 ThingsBoard 消息队列配置示例
在 /etc/thingsboard/conf/thingsboard.yml 中配置消息队列类型:
# 使用 RabbitMQ
queue:
type: rabbitmq
rabbitmq:
host: "192.168.1.100"
port: 5672
username: "tb_admin"
password: "TB@Mq!2024"
virtual-host: "/"
# 使用 Kafka
# queue:
# type: kafka
# kafka:
# bootstrap.servers: "192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092"
# acks: "all"
# retries: 3
# topic.properties.replication-factor: 3
关键检查点:修改消息队列配置后,必须重启 ThingsBoard 服务:
sudo systemctl restart thingsboard。同时检查日志 /var/log/thingsboard/thingsboard.log 中是否有连接错误或认证失败信息。
3.4 依赖安装验证清单
完成所有安装后,使用以下清单逐项验证,确保每个组件都处于健康状态:
- Redis:
redis-cli -a '密码' ping返回 PONG;redis-cli -a '密码' info replication确认主从角色正确。 - Cassandra(可选):
nodetool status显示所有节点状态为 UN(Up Normal);cqlsh -e "describe keyspaces;"能看到thingsboardkeyspace。 - RabbitMQ:访问
http://IP:15672使用 tb_admin 登录;sudo rabbitmqctl list_queues显示 ThingsBoard 相关队列。 - Kafka:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092列出 tb-rule-engine 等主题;bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092确认 Broker 版本。
最佳实践:建议将上述验证命令写入自动化脚本(如 Ansible Playbook 或 Shell 脚本),在每次部署或扩缩容后自动执行,避免人工遗漏。