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 服务无感知。

Redis Sentinel 高可用架构(ThingsBoard 集群) ThingsBoard 节点 1 ThingsBoard 节点 2 ThingsBoard 节点 3 Sentinel 1 Sentinel 2 Sentinel 3 Redis Master Redis Slave 1 Redis Slave 2
避坑提示: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 策略 —
性能调优关键参数:
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;" 能看到 thingsboard keyspace。
  • 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 脚本),在每次部署或扩缩容后自动执行,避免人工遗漏。