跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava算法

Apache IoTDB 部署全指南:AINode 独立部署与 Kubernetes 集群部署

Apache IoTDB 的两种部署方案:AINode 独立部署与 Kubernetes 集群部署。AINode 独立部署适用于时序数据机器学习分析场景,需准备 Python 环境及安装包,配置参数后启动即可。Kubernetes 集群部署适用于大规模高可用场景,通过 Helm Chart 管理,涉及命名空间创建、持久化存储 PV 配置、镜像拉取(私有库或本地导入)、安装激活及验证扩容等步骤。文章涵盖了环境准备、常见问题解决及集群验证方法,帮助读者完成 IoTDB 相关组件和集群的部署工作。

CloudNative发布于 2026/4/6更新于 2026/10/25134 浏览
Apache IoTDB 部署全指南:AINode 独立部署与 Kubernetes 集群部署

Apache IoTDB 部署全指南:AINode 独立部署与 Kubernetes 集群部署

IoTDB(Internet of Things Database)作为一款专为时间序列数据设计的数据库,在工业物联网、智能监控等领域应用广泛。随着业务需求的不断发展,仅依靠 ConfigNode 和 DataNode 已难以满足复杂的时序数据机器学习分析需求,AINode 应运而生,为 IoTDB 扩展了机器学习分析能力。同时,在大规模部署场景下,Kubernetes 凭借其强大的容器编排和管理能力,成为 IoTDB 集群部署的理想选择。

一、引言

IoTDB 是一款专为时间序列数据设计的数据库。AINode 作为 IoTDB 的第三种内生节点,通过与 IoTDB 集群的 DataNode、ConfigNode 交互,扩展了对时间序列进行机器学习分析的能力。本文详细介绍 IoTDB 的 AINode 独立部署和 Kubernetes 集群部署方案。

二、AINode 独立部署

2.1 AINode 简介

AINode 是 IoTDB 在 ConfigNode、DataNode 之后提供的第三种内生节点,支持从外部引入已有机器学习模型进行注册,使用注册的模型在指定时序数据上通过简单 SQL 语句完成时序分析任务。AINode 以独立安装包的形式交付,是 IoTDB 集群外的额外套件。

2.2 安装准备
2.2.1 安装包获取

首先需要获取 AINode 安装包,其文件名格式为 apache-iotdb--ainode-bin.zip。解压该安装包后,会得到以下目录结构:

目录/文件类型说明
lib文件夹存放 AINode 的 python 包文件,这些包文件是 AINode 运行的基础依赖
sbin文件夹包含 AINode 的运行脚本,可实现 AINode 的启动、停止和移除等操作
conf文件夹存储 AINode 的配置文件和运行环境设置脚本,通过修改配置文件可自定义 AINode 运行参数
LICENSE文件证书文件,规定了 AINode 的使用许可条款
NOTICE文件提示文件,包含一些重要的声明和提示信息
README_ZH.md文件中文版的说明文档,详细介绍了 AINode 的功能、安装和使用方法
README.md文件英文版的使用说明,内容与中文版类似,供英文用户参考
2.2.2 环境准备
  • 操作系统:建议使用 Ubuntu 或 MacOS,这两种操作系统对 AINode 的兼容性较好。
  • IoTDB 版本:要求 IoTDB 版本不低于 V2.0.5.1。
  • Python 环境:Python 版本需在 3.9~3.12 之间,且必须带有 pip 和 venv 工具。

可通过以下命令查看 Python 版本,确认是否满足要求:

python --version # 或 python3 --version 
2.3 安装部署步骤
2.3.1 安装 AINode

首先,选择一个合适的目录作为 AINode 的专用文件夹,将下载的 AINode 安装包导入该文件夹,然后执行以下命令解压安装包:

unzip apache-iotdb-<version>-ainode-bin.zip 

解压完成后,AINode 的安装目录结构便搭建完成。

2.3.2 配置项修改

AINode 支持修改一些必要的参数,以适应不同的运行环境和需求。这些参数位于 conf/iotdb-ainode.properties 文件中,可进行持久化修改,各主要参数说明如下:

参数名称描述类型默认值说明
cluster_nameAINode 要加入集群的标识stringdefaultCluster用于区分不同的 IoTDB 集群
ain_seed_config_nodeAINode 启动时注册的 ConfigNode 地址String127.0.0.1:10710需根据实际 ConfigNode 地址修改
ain_cluster_ingress_addressAINode 拉取数据的 DataNode 的 rpc 地址String127.0.0.1需填写实际 DataNode 的 rpc 地址
ain_cluster_ingress_portAINode 拉取数据的 DataNode 的 rpc 端口Integer6667需与 DataNode 的配置保持一致
ain_cluster_ingress_usernameAINode 拉取数据的 DataNode 的客户端用户名Stringroot需具有相应的数据访问权限
ain_cluster_ingress_passwordAINode 拉取数据的 DataNode 的客户端密码Stringroot确保 AINode 能正常登录 DataNode
ain_cluster_ingress_time_zoneAINode 拉取数据的 DataNode 的客户端时区StringUTC+8设定数据处理时的时区
ain_inference_rpc_addressAINode 提供服务与通信的地址String127.0.0.1其他节点或服务与 AINode 进行通信的地址
ain_inference_rpc_portAINode 提供服务与通信的端口String10810需确保该端口未被其他服务占用
ain_system_dirAINode 元数据存储路径Stringdata/AINode/system建议使用绝对路径
ain_models_dirAINode 存储模型文件的路径Stringdata/AINode/models建议使用绝对路径
ain_thrift_compression_enabledAINode 是否启用 thrift 的压缩机制Boolean00 表示不启动,1 表示启动

根据实际的 IoTDB 集群配置和运行需求,修改上述参数。

2.3.3 导入权重文件

该步骤仅适用于离线环境。在离线环境中,需要联系官方工作人员获取模型权重文件,然后将其放置到 /IOTDB_AINODE_HOME/data/ainode/models/weights/目录下。模型权重文件是机器学习模型正常运行的关键。

2.3.4 启动 AINode

在完成 Seed-ConfigNode 的部署和 AINode 配置项修改后,即可启动 AINode。

Linux 和 MacOS 系统

后台启动命令(长期运行推荐):

nohup bash sbin/start-ainode.sh > myout.file 2>&1 &

普通启动命令:

bash sbin/start-ainode.sh 

Windows 系统

后台启动命令(长期运行推荐):

nohup bash sbin\start-ainode.bat > myout.file 2>&1 &

普通启动命令:

sbin\start-ainode.bat 
2.3.5 检测 AINode 节点状态

AINode 启动后会自动加入 IoTDB 集群,可通过在命令行中输入 SQL 语句查询集群状态:

show cluster 

如果查询结果中出现 AINode 节点,且其运行状态为 Running,则表示 AINode 成功加入集群。

2.3.6 停止 AINode

当需要停止正在运行的 AINode 节点时,可执行相应的关闭脚本:

Windows 系统:

sbin\stop-ainode.bat 

Linux / MacOS 系统:

bash sbin/stop-ainode.sh 
2.4 常见问题及解决方案
2.4.1 启动 AINode 时出现找不到 venv 模块的报错

问题原因:部分系统自带的 Python 环境可能缺少 venv 模块。

解决方案:

  1. 在运行启动脚本时,通过 -i 参数指定已有的 Python 解释器路径。
    bash sbin/start-ainode.sh -i /usr/bin/python3.10 
    
  2. 在本地安装 venv 模块。以 Ubuntu 系统为例:
    apt-get install python3.10-venv 
    
2.4.2 Python 中的 SSL 模块未正确安装和配置

报错信息:WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

解决方案:安装 OpenSSL 后重新构建 Python。

  1. 编译并安装 Python:
    make && sudo make install
    
  2. 配置 Python 编译选项,指定使用 SSL:
    sudo -E ./configure --with-ssl 
    
  3. 安装相关依赖包:
    sudo apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev uuid-dev lzma-dev 
    
2.4.3 pip 版本较低导致 Windows 下出现编译问题

报错信息:error:Microsoft Visual C++ 14.0 or greater is required…

解决方案:升级 pip 和 setuptools 版本。

./python -m pip install --upgrade pip
./python -m pip install --upgrade setuptools 
2.4.4 安装编译 Python

如果系统中没有合适版本的 Python,或者需要重新编译 Python 以解决某些依赖问题,可按照以下步骤进行:

  1. 验证 Python 是否安装成功:
    python3 --version 
    
  2. 解压下载的安装包:
    tar -Jxf Python-3.10.0.tar.xz 
    
  3. 进入解压后的目录,配置编译选项并指定安装路径:
    cd Python-3.10.0
    ./configure prefix=/usr/local/python3 
    
  4. 编译并安装 Python:
    make && sudo make install
    

三、Kubernetes 集群部署 IoTDB

3.1 环境准备
3.1.1 准备 Kubernetes 集群

首先需要确保拥有一个可用的 Kubernetes 集群,建议最低版本为 Kubernetes 1.24。IoTDB 版本要求不能低于 v1.3.3.2。

3.1.2 安装 Helm

Helm 是 Kubernetes 的包管理工具。安装完成后,可通过以下命令验证 Helm 是否安装成功:

helm version 
3.2 创建命名空间
3.2.1 创建命名空间

执行以下命令创建名为 iotdb-ns 的命名空间:

kubectl create ns iotdb-ns 
3.2.2 查看命名空间
kubectl get ns 
3.3 创建 PersistentVolume (PV)

每个 ConfigNode 或 DataNode 都需要一个对应的 PV。

3.3.1 创建 PV 配置文件

以创建 3 个 ConfigNode 和 3 个 DataNode 为例,需要创建 6 个 PV。pv.yaml 文件的示例内容如下:

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: iotdb-pv-01
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  hostPath:
    path: /data/k8s-data/iotdb-pv-01
    type: DirectoryOrCreate

修改每个 PV 配置文件中的 name 和 path 字段,确保唯一性。

3.3.2 应用 PV 配置
kubectl apply -f pv01.yaml
kubectl apply -f pv02.yaml
# ... 依次执行 pv03.yaml 到 pv06.yaml
kubectl apply -f pv06.yaml 
3.3.3 查看 PV
kubectl get pv
3.3.4 手动创建文件夹

如果未配置 type: DirectoryOrCreate 参数,则需要在所有 Kubernetes 节点上手动创建对应的存储文件夹。

mkdir -p /data/k8s-data/iotdb-pv-01
mkdir -p /data/k8s-data/iotdb-pv-02
# ... 依次创建
3.4 配置 IoTDB 的 Helm Chart
3.4.1 克隆 IoTDB Kubernetes 部署代码
git clone https://gitlab.timecho.com/r-d/db/iotdb-cluster-k8s.git/

如果遇到代理问题,取消代理设置:

unset HTTPS_PROXY 
3.4.2 修改 YAML 文件

找到 values.yaml 文件,修改各项参数。示例内容如下:

nameOverride: "iotdb"
fullnameOverride: "iotdb"
image:
  repository: nexus.infra.timecho.com:8143/timecho/iotdb-enterprise
  pullPolicy: IfNotPresent
  tag: 1.3.3.2-standalone
storage:
  className: local-storage
datanode:
  name: datanode
  nodeCount: 3
  enableRestService: true
  storageCapacity: 10Gi
  resources:
    requests:
      memory: 2Gi
      cpu: 1000m
    limits:
      memory: 4Gi
      cpu: 1000m
confignode:
  name: confignode
  nodeCount: 3
  storageCapacity: 10Gi
  resources:
    requests:
      memory: 512Mi
      cpu: 1000m
    limits:
      memory: 1024Mi
      cpu: 2000m
configNodeConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensus
schemaReplicationFactor: 3
schemaRegionConsensusProtocolClass: org.apache.iotdb.consensus.ratis.RatisConsensus
dataReplicationFactor: 2
dataRegionConsensusProtocolClass: org.apache.iotdb.consensus.iot.IoTConsensus
3.5 配置私库信息或预先拉取镜像
3.5.1 方案一:从私有仓库拉取镜像
3.5.1.1 创建 secret
kubectl create secret docker-registry timecho-nexus \
  --docker-server='nexus.infra.timecho.com:8143' \
  --docker-username='xxxxxx' \
  --docker-password='xxxxxx' \
  --docker-email='xxxxxx' \
  -n iotdb-ns 
3.5.1.2 将 secret 作为 patch 加载到命名空间
kubectl patch serviceaccount default -n iotdb-ns -p '{"imagePullSecrets": [{"name": "timecho-nexus"}]}'
3.5.2 方案二:导入镜像
3.5.2.1 拉取并导出镜像
ctr images pull --user xxxxxxxx nexus.infra.timecho.com:8143/timecho/iotdb-enterprise:1.3.3.2-standalone
ctr images export iotdb-enterprise:1.3.3.2-standalone.tar nexus.infra.timecho.com:8143/timecho/iotdb-enterprise:1.3.3.2-standalone 
3.5.2.2 导入镜像到 Kubernetes 集群
ctr -n k8s.io images import iotdb-enterprise:1.3.3.2-standalone.tar 
3.6 安装 IoTDB
3.6.1 执行安装命令
cd iotdb-cluster-k8s/helm
helm install iotdb ./ -n iotdb-ns 
3.6.2 查看 Helm 安装列表
helm list -n iotdb-ns 
3.6.3 查看 Pods 状态
kubectl get pods -n iotdb-ns -o wide 
3.6.4 故障排除

查看 Pod 的日志:

kubectl logs -n iotdb-ns confignode-0 -f 

获取异常 Pod 的详细信息:

kubectl describe pod confignode-0 -n iotdb-ns
kubectl describe pod datanode-0 -n iotdb-ns 

查看 Kubernetes 集群的事件日志:

kubectl get events -n iotdb-ns
3.7 激活 IoTDB
3.7.1 方案一:直接在 Pod 中激活
kubectl exec -it -n iotdb-ns confignode-0 -- /iotdb/sbin/start-activate.sh
kubectl exec -it -n iotdb-ns confignode-1 -- /iotdb/sbin/start-activate.sh
kubectl exec -it -n iotdb-ns confignode-2 -- /iotdb/sbin/start-activate.sh
3.7.2 方案二:进入 ConfigNode 的容器中激活
kubectl exec -it -n iotdb-ns confignode-0 -- /bin/bash
cd /iotdb/sbin
/bin/bash start-activate.sh
exit
3.7.3 方案三:手动激活
  1. 登录到 ConfigNode 所在的 Kubernetes 节点,找到 system-info 文件。
  2. 在同一目录下新建 license 文件,将获取到的激活码写入该文件。

查看对应 PV 的详细信息,确定物理目录的位置:

kubectl describe pv iotdb-pv-04 | grep "Path:"

查看 PVC:

kubectl get pvc -n iotdb-ns | grep "confignode-0"

查看 ConfigNode 的详细信息:

for i in {0..2}; do echo confignode-$i; kubectl describe pod confignode-${i} -n iotdb-ns | grep -e "Node:" -e "Path:"; echo "---"; done
3.8 验证 IoTDB
3.8.1 查看 Pods 状态
kubectl get pods -n iotdb-ns -o wide 
3.8.2 查看端口映射情况
kubectl get svc -n iotdb-ns 
3.8.3 使用 CLI 验证集群状态
start-cli.sh -h 172.20.31.86 -p 31895

连接成功后,可在 CLI 中执行 SQL 命令:

-- 查看所有时间序列
show timeseries;
-- 创建时间序列
create timeseries root.sg1.d1.s1 with datatype=FLOAT, encoding=RLE;
-- 插入数据
insert into root.sg1.d1(timestamp, s1) values(1620000000000, 10.5);
-- 查询数据
select s1 from root.sg1.d1 where time >= 1620000000000 and time <= 1620000000000;
3.9 扩容 IoTDB 集群
3.9.1 新增 PV

创建新的 PV 配置文件,应用 PV 配置文件。

3.9.2 扩容 ConfigNode

修改 values.yaml 文件,将 confignode.nodeCount 的值从 3 改为 4,然后执行 helm upgrade。

helm upgrade iotdb . -n iotdb-ns 
3.9.3 扩容 DataNode

修改 values.yaml 文件,将 datanode.nodeCount 的值从 3 改为 4,然后执行 helm upgrade。

3.9.4 验证扩容后的 IoTDB 状态
kubectl get pods -n iotdb-ns -o wide 

四、总结

本文详细介绍了 IoTDB 的两种部署方案:AINode 独立部署和 Kubernetes 集群部署。AINode 独立部署适用于对时序数据进行机器学习分析的场景,部署过程相对简单。Kubernetes 集群部署则适用于大规模、高可用的 IoTDB 集群部署场景,通过 Kubernetes 的容器编排和管理能力,实现 IoTDB 集群的自动化部署、运维和扩容。

在实际部署过程中,需根据具体的业务需求、数据量大小、可用资源等因素,选择合适的部署方案。同时,要注意环境准备、配置参数修改、故障排查等关键环节,确保部署过程顺利进行。

附:IoTDB 的各大版本

版本IoTDB 二进制包IoTDB 源代码发布说明
2.0.5All-in-one, AINode, SHA512, ASC源代码,SHA512, ASCrelease notes
1.3.5All-in-one, AINode, SHA512, ASC源代码,SHA512, ASCrelease notes
0.13.4All-in-one, Grafana 连接器,Grafana 插件,SHA512, ASC源代码,SHA512, ASCrelease notes

✨ 去获取:https://archive.apache.org/dist/iotdb/

目录

  1. Apache IoTDB 部署全指南:AINode 独立部署与 Kubernetes 集群部署
  2. 一、引言
  3. 二、AINode 独立部署
  4. 2.1 AINode 简介
  5. 2.2 安装准备
  6. 2.2.1 安装包获取
  7. 2.2.2 环境准备
  8. 2.3 安装部署步骤
  9. 2.3.1 安装 AINode
  10. 2.3.2 配置项修改
  11. 2.3.3 导入权重文件
  12. 2.3.4 启动 AINode
  13. 2.3.5 检测 AINode 节点状态
  14. 2.3.6 停止 AINode
  15. 2.4 常见问题及解决方案
  16. 2.4.1 启动 AINode 时出现找不到 venv 模块的报错
  17. 2.4.2 Python 中的 SSL 模块未正确安装和配置
  18. 2.4.3 pip 版本较低导致 Windows 下出现编译问题
  19. 2.4.4 安装编译 Python
  20. 三、Kubernetes 集群部署 IoTDB
  21. 3.1 环境准备
  22. 3.1.1 准备 Kubernetes 集群
  23. 3.1.2 安装 Helm
  24. 3.2 创建命名空间
  25. 3.2.1 创建命名空间
  26. 3.2.2 查看命名空间
  27. 3.3 创建 PersistentVolume (PV)
  28. 3.3.1 创建 PV 配置文件
  29. pv.yaml
  30. 3.3.2 应用 PV 配置
  31. ... 依次执行 pv03.yaml 到 pv06.yaml
  32. 3.3.3 查看 PV
  33. 3.3.4 手动创建文件夹
  34. ... 依次创建
  35. 3.4 配置 IoTDB 的 Helm Chart
  36. 3.4.1 克隆 IoTDB Kubernetes 部署代码
  37. 3.4.2 修改 YAML 文件
  38. 3.5 配置私库信息或预先拉取镜像
  39. 3.5.1 方案一:从私有仓库拉取镜像
  40. 3.5.1.1 创建 secret
  41. 3.5.1.2 将 secret 作为 patch 加载到命名空间
  42. 3.5.2 方案二:导入镜像
  43. 3.5.2.1 拉取并导出镜像
  44. 3.5.2.2 导入镜像到 Kubernetes 集群
  45. 3.6 安装 IoTDB
  46. 3.6.1 执行安装命令
  47. 3.6.2 查看 Helm 安装列表
  48. 3.6.3 查看 Pods 状态
  49. 3.6.4 故障排除
  50. 3.7 激活 IoTDB
  51. 3.7.1 方案一:直接在 Pod 中激活
  52. 3.7.2 方案二:进入 ConfigNode 的容器中激活
  53. 3.7.3 方案三:手动激活
  54. 3.8 验证 IoTDB
  55. 3.8.1 查看 Pods 状态
  56. 3.8.2 查看端口映射情况
  57. 3.8.3 使用 CLI 验证集群状态
  58. 3.9 扩容 IoTDB 集群
  59. 3.9.1 新增 PV
  60. 3.9.2 扩容 ConfigNode
  61. 3.9.3 扩容 DataNode
  62. 3.9.4 验证扩容后的 IoTDB 状态
  63. 四、总结
  64. 附:IoTDB 的各大版本

更多推荐文章

查看全部
  • C++ 实现 B2115 密码翻译解密算法
  • 如何用PDF Arranger轻松管理PDF文件:完整操作指南
  • AIGC Bar API 站接入与工程化最佳实践
  • C++ STL:从零手写 String 类及高频易错点复盘
  • MySQL 与 PostgreSQL 核心差异深度对比
  • Python 的十大核心特性详解
  • 网络编程核心:路由表、MTU/MSS、ARP、NAT 及代理技术解析
  • C++ 实现非中心 t 分布的 PDF 与 CDF 计算(含源码)
  • 利用 AI 大模型一键生成高清短视频的开源项目介绍
  • AI-Render:把 Stable Diffusion 接进 Blender 的折腾实录
  • Python 爬虫实战:跨境电商数据采集与代理 IP 策略
  • 飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程
  • node-llama-cpp 常见错误处理与调试方法
  • 汇川 RobotLab 软件常规操作指南
  • Openclaw 与飞书多机器人配置指南
  • Discord 机器人创建与配置流程
  • 基于自然语言交互的 AI 爬虫工具实战解析
  • C++ gRPC 实例:客户端与服务端通信源码
  • Llama-3.2-3B在低配笔记本通过Ollama稳定生成千字长文
  • Neeshck-Z-lMage_LYX_v2 部署指南:中小企业低成本 AI 绘画私有化方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online