欢迎光临
我们一直在努力

Apache IoTDB 全场景部署指南:从环境配置到单机 / 集群实战(基于 Docker 与原生部署)

在这里插入图片描述在这里插入图片描述

Apache IoTDB 全场景部署指南:从环境配置到单机 / 集群实战(基于 Docker 与原生部署)

本文围绕Apache IoTDB部署展开,先介绍其核心组件ConfigNode与DataNode,对比Docker单机/集群、原生单机/集群四种部署模式的适用场景与组件要求。接着详解基础环境配置,包括磁盘阵列(推荐系统盘RAID1、数据盘RAID5)、Linux系统参数优化(关闭防火墙、调整端口与SWAP、提升最大打开文件数)及Java环境安装(推荐JDK17)。随后分步讲解Docker部署(含Docker与Docker Compose安装、单机版镜像拉取与配置、集群版节点规划与启动)和原生部署(安装包解压、参数配置、集群一键启停)流程,还提供启动失败、节点通信故障等常见问题的解决方案,助力开发者根据场景选择合适模式,快速搭建稳定IoTDB环境。

在这里插入图片描述

在工业物联网(IIoT)和时序数据存储这块儿,Apache IoTDB 绝对是绕不开的主流选择——它的高吞吐、低延迟,再加上出色的压缩率,能轻松应对海量时序数据的存储需求。不过很多朋友刚接触时,总会在部署环节卡壳,一会儿是环境依赖不对,一会儿是集群节点连不通。今天这篇文章,就把官方部署规范揉碎了讲,从最基础的环境配置开始,一步步带大家搞定 Docker 单机/集群 和 原生单机/集群 这四种部署方式,每段代码都给大家拆解开解释,遇到常见问题也有对应解法,跟着做就能搭起稳定的 IoTDB 环境。

一、前置知识:先搞懂 IoTDB 核心逻辑,再选部署方式

开始部署前,咱们得先明白 IoTDB 是靠啥干活的,不同部署模式又适合啥场景,不然选岔了路,后面改起来更麻烦。

  • 核心组件就俩,分工很明确:

    • ConfigNode(配置节点):管的是集群的“大脑”工作——元数据管理、节点注册、负载均衡这些。要是装单机版,它会内置简化逻辑,不用单独配;但集群版必须多搞几个,不然断了一个整个集群就瘫了。
    • DataNode(数据节点):这才是存数据、处理读写请求的“主力”,时序数据全靠它管,是 IoTDB 真正的核心存储单元。
  • 四种部署模式,该怎么选?看这张表就够了: | 部署模式 | 适用场景 | 核心优势 | 组件要求 | |———-|———-|———-|———-| | Docker 单机版 | 平时写代码测试、小体量应用用 | 环境隔离开,装起来快,不用怕依赖冲突 | 1个 DataNode(里面带了简化的 ConfigNode) | | Docker 集群版 | 要上生产、怕单点故障的场景 | 能横向扩节点,某个节点挂了也不影响整体 | 3个 ConfigNode + 3个 DataNode(也就是常说的 3C3D) | | 原生单机版 | 服务器资源紧张,或者想自己调细节配置 | 轻量没依赖,想改啥参数都方便 | 1个 ConfigNode + 1个 DataNode | | 原生集群版 | 大规模生产环境,对性能要求高的场景 | 性能最顶,能精细控制每个节点 | 3个 ConfigNode + 3个 DataNode(3C3D) |

二、基础环境配置:这些准备工作,不管哪种部署都得做

不管你最后选哪种部署模式,服务器环境先配好,不然后面大概率会因为缺依赖、参数不对卡壳。咱们一步步来,别着急。

2.1 磁盘阵列配置:性能和安全都得顾上

IoTDB 存时序数据,对磁盘 IO 速度要求不低,搞个 RAID 阵列既能提速度,又能防磁盘坏了丢数据,推荐这么配:

  • 物理机这么搞就行:

    • 系统盘:用 2 块磁盘做 RAID1(镜像备份),只要够装操作系统就行,比如给个 100GB 以上,不用特意给 IoTDB 留空间。
    • 数据盘:1-6 块磁盘组个 RAID5,这种模式允许坏一块盘,性能和冗余都兼顾到了。千万别把所有磁盘堆成一个阵列,不然 IO 速度会被卡死。
  • 举个例子:12 块 3.5 英寸硬盘怎么分: | 磁盘用途 | RAID类型 | 硬盘数量 | 冗余能力 | 可用容量(单盘容量×N) | |———-|———-|———-|———-|————————| | 系统盘 | RAID1 | 2 | 允许1块故障 | 1 | | 数据盘1 | RAID5 | 5 | 允许1块故障 | 4 | | 数据盘2 | RAID5 | 5 | 允许1块故障 | 4 |

2.2 操作系统配置(以 Linux 为例)

2.2.1 防火墙先关了,省得端口被拦

IoTDB 要用到好几个端口通信,比如 6667、10710 这些,防火墙开着很容易把它们拦住,干脆关了省心:

# 1. 先看看防火墙是不是开着(显示 active 就是在运行)
systemctl status firewalld
# 2. 临时关了试试(重启服务器会恢复,先测个通不通)
systemctl stop firewalld
# 3. 想永久关了,就用这个命令(生产环境推荐这么做,省得重启后又出问题)
systemctl disable firewalld

2.2.2 先查端口有没有被占,别等启动了才报错

IoTDB 要用的端口要是被其他程序占了,启动时肯定报错,提前查一遍:

# 先查 ConfigNode 要用的端口:10710(内部通信)、10720(共识协议)
lsof -i:10710 || netstat -tunp | grep 10710
lsof -i:10720 || netstat -tunp | grep 10720

# 再查 DataNode 要用的端口:6667(RPC通信)、10730-10760(内部/共识用)
lsof -i:6667 || netstat -tunp | grep 6667
lsof -i:10730 || netstat -tunp | grep 10730
lsof -i:10740 || netstat -tunp | grep 10740
lsof -i:10750 || netstat -tunp | grep 10750
lsof -i:10760 || netstat -tunp | grep 10760

# 要是查到某个端口被占了,比如 6667,就把占用它的进程干掉
kill -9 $(lsof -t -i:6667)

2.2.3 系统参数调一调,别让性能卡脖子
  • 把 SWAP 优先级调低,别让内存数据往磁盘跑: 要是 SWAP 开太高,IoTDB 内存里的数据会被写到磁盘,速度一下就慢了,这么改:

    # 1. 写进配置文件,永久生效
    echo "vm.swappiness = 0" >> /etc/sysctl.conf
    # 2. 马上生效(把 SWAP 里的数据导回内存,再清空 SWAP)
    swapoff -a && swapon -a
    # 3. 看看成没成(Swap 那行的已使用应该是 0)
    free -m

  • 最大打开文件数调大,别报“文件开太多”的错: IoTDB 要同时处理很多时序数据文件,默认的打开文件数限制不够用,很容易报错,改成 65535 就行:

    # 1. 先看看现在的限制是多少(默认可能就 1024,肯定不够)
    ulimit -n
    # 2. 临时改一下(当前终端有用,关了就没了)
    ulimit -n 65535
    # 3. 永久改,写进配置文件(重启也有效,改完要退出终端再登)
    echo "* soft nofile 65535" >> /etc/security/limits.conf
    echo "* hard nofile 65535" >> /etc/security/limits.conf
    # 4. 验证一下(退出终端再登录,执行这个命令,显示 65535 就对了)
    ulimit -n

2.3 Java 环境必须装,版本别弄错

IoTDB 是用 Java 写的,没 Java 环境根本跑不起来。得装 JDK 1.8 以上,不过建议直接上 JDK 17,老版本有时候会有性能问题,甚至 DataNode 关不掉。以装 OpenJDK 17 为例:

# 1. 先下 JDK 17 安装包(也能从 Oracle 官网下,这里用 OpenJDK 举例)
wget https://download.java.net/java/GA/jdk17.0.9/9e8b04b39048487b961645e1e184609e/36/GPL/openjdk-17.0.9_linux-x64_bin.tar.gz

# 2. 解压到指定目录,比如 /usr/lib/jvm
tar -zxvf openjdk-17.0.9_linux-x64_bin.tar.gz -C /usr/lib/jvm

# 3. 配置环境变量,编辑 ~/.bashrc 文件
vim ~/.bashrc
# 在文件最后加这两行(注意 JDK 路径要和你解压的一致)
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.9
export PATH=$JAVA_HOME/bin:$PATH

# 4. 让配置生效
source ~/.bashrc

# 5. 看看装没装好(显示 JDK 17 的版本信息就对了)
java -version

三、Docker 部署实战:开发测试首选,装起来快

用 Docker 部署最大的好处就是不用管环境依赖,装个 Docker 就能跑,特别适合开发测试。下面咱们分别讲 单机版(1C1D) 和 集群版(3C3D) 怎么搞。

在这里插入图片描述

3.1 先装 Docker 和 Docker Compose,这是基础

以 Ubuntu 为例,要是用 CentOS,把 apt-get 换成 yum 就行:

# ————————– 先装 Docker ————————–
# 1. 更新一下系统的包列表
sudo apt-get update
# 2. 装几个必要的工具,让 apt 能通过 HTTPS 访问仓库
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 3. 导入阿里云的 Docker 仓库证书,下东西能快不少
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add
# 4. 把阿里云的 Docker 仓库地址加上
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 5. 再更一次列表,然后装 Docker CE(社区版,免费够用)
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 6. 设置 Docker 开机自启,省得每次手动开
sudo systemctl enable docker
# 7. 看看装没装好(显示版本号就成)
docker –version

# ————————– 再装 Docker Compose ————————–
# 1. 下 Docker Compose v2.20.0(这个版本和 IoTDB 1.3.2 配,也能换最新版)
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)$(uname -m)" -o /usr/local/bin/docker-compose
# 2. 给文件加执行权限,不然没法运行
chmod +x /usr/local/bin/docker-compose
# 3. 建个软链接,避免后面输命令时找不到路径
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 4. 验证一下(显示版本号就对了)
docker-compose –version

3.2 Docker 单机版部署(1C1D)

在这里插入图片描述

3.2.1 第一步:拉 IoTDB 镜像

选 1.3.2 稳定版,单机版的镜像标签是 standalone,命令很简单:

# 拉 IoTDB 1.3.2 单机版镜像
docker pull apache/iotdb:1.3.2-standalone
# 看看拉下来没(列表里有 apache/iotdb 就成)
docker images

3.2.2 第二步:建个自定义网络,别和其他容器冲突

给 IoTDB 单独分个网络,省得和其他 Docker 容器抢端口,命令这么写:

docker network create \\
–driver=bridge \\ # 用 bridge 模式,单机够用了
–subnet=172.18.0.0/16 \\ # 子网网段自己定,别和宿主机的冲突就行
–gateway=172.18.0.1 \\ # 网关地址,对应上面的网段
iotdb # 网络名叫 iotdb,后面配置文件要用到

3.2.3 第三步:写 Docker Compose 配置文件,管理起来方便

咱们把 IoTDB 的目录统一放 /docker-iotdb 里,数据和配置都好管理。先建目录,再写配置文件:

  • 先建目录结构:

    # 建根目录 /docker-iotdb,里面再建个 iotdb 子目录
    mkdir -p /docker-iotdb/iotdb
    # 进目录,新建配置文件
    cd /docker-iotdb
    touch docker-compose-standalone.yml

  • 写 docker-compose-standalone.yml,每一行都给大家加了注释,看不懂的地方看注释:

    version: "3" # Docker Compose 版本,3.x 能兼容大部分 Docker 版本
    services:
    iotdb-service: # 服务名,自己随便起
    image: apache/iotdb:1.3.2standalone # 用刚才拉的 IoTDB 镜像
    hostname: iotdb # 容器的主机名,要和网络配置对应上
    container_name: iotdb # 容器名,后面操作容器就用这个名
    restart: always # 容器退出了自动重启,省得手动开
    ports:
    "6667:6667" # 端口映射:宿主机的 6667 对应容器的 6667(这是 RPC 通信端口)
    environment: # 用环境变量配置 IoTDB 核心参数,不用进去改配置文件
    cn_internal_address=iotdb # ConfigNode 内部通信地址,对应上面的 hostname
    cn_internal_port=10710 # ConfigNode 内部通信端口,固定 10710
    cn_consensus_port=10720 # ConfigNode 共识协议端口,固定 10720
    cn_seed_config_node=iotdb:10710 # 种子 ConfigNode 地址,单机版就是自己
    dn_rpc_address=iotdb # DataNode 的 RPC 地址
    dn_internal_address=iotdb # DataNode 内部通信地址
    dn_rpc_port=6667 # DataNode 的 RPC 端口,和上面的映射对应
    dn_internal_port=10730 # DataNode 内部通信端口,固定 10730
    dn_mpp_data_exchange_port=10740 # DataNode 数据流交换端口,固定 10740
    dn_schema_region_consensus_port=10750 # 元数据共识端口,固定 10750
    dn_data_region_consensus_port=10760 # 数据共识端口,固定 10760
    dn_seed_config_node=iotdb:10710 # DataNode 要连的种子 ConfigNode
    privileged: true # 给容器特权,避免后面改文件时权限不够
    volumes: # 数据卷映射,把容器里的数据存到宿主机,防止容器删了数据丢了
    ./iotdb/data:/iotdb/data # 数据目录,这个必须映射,不然数据白存
    ./iotdb/logs:/iotdb/logs # 日志目录,后面查错要靠它
    networks: # 加入刚才建的自定义网络
    iotdb:
    ipv4_address: 172.18.0.6 # 给容器配个固定 IP,对应前面的子网网段
    # 声明用的是外部网络,就是咱们第二步建的 iotdb 网络
    networks:
    iotdb:
    external: true

  • 3.2.4 第四步:启动 IoTDB,再验证一下
  • 启动命令很简单,进目录执行就行:

    # 进配置文件所在的目录
    cd /docker-iotdb
    # 后台启动容器(-d 表示后台运行,不会占着终端)
    docker-compose -f docker-compose-standalone.yml up -d

  • 怎么确认启动成功了?两种方法:

    • 方法一:看日志,出现“set up successfully”就成:docker logs -f iotdb # -f 是实时看日志,不想看了按 Ctrl+C 退出
      # 成功的标志是这行:2024-07-21 08:22:38,457 [main] INFO o.a.i.db.service.DataNode:227 – Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!
    • 方法二:进容器里,用 CLI 看集群状态:# 1. 先进入 IoTDB 容器
      docker exec -it iotdb /bin/bash
      # 2. 用 CLI 登录 IoTDB(-h 后面跟容器的 hostname,就是前面设的 iotdb)
      ./start-cli.sh -h iotdb
      # 3. 执行 show cluster 命令,所有服务显示 running 就对了
      IoTDB> show cluster
  • 3.2.5 可选:把 /conf 目录映射出来,方便改配置

    默认情况下,容器里的配置文件没法直接改,要是想调点参数(比如内存大小),可以把 /conf 目录映射到宿主机,分三步:

  • 先把容器里的 /conf 目录拷到宿主机:docker cp iotdb:/iotdb/conf /docker-iotdb/iotdb/conf
  • 改 docker-compose-standalone.yml,加一行 /conf 的映射:volumes:
    ./iotdb/conf:/iotdb/conf # 新增这行,把配置目录映射出来
    ./iotdb/data:/iotdb/data
    ./iotdb/logs:/iotdb/logs
  • 重启容器,让配置生效:docker-compose -f docker-compose-standalone.yml up -d
  • 3.3 Docker 集群版部署(3C3D,生产环境可以参考)

    集群版得要 3 台 Linux 服务器,建议每台至少 4 核 8G。它支持 host 网络 或 overlay 网络,千万别用 bridge 网络,会出问题。咱们以 host 网络为例讲。

    在这里插入图片描述

    3.3.1 先规划集群:3 台服务器怎么分工
    服务器 IP主机名部署组件核心作用
    192.168.1.3 iotdb-1 ConfigNode + DataNode 种子节点,得先启动它
    192.168.1.4 iotdb-2 ConfigNode + DataNode 从节点,帮忙分担负载
    192.168.1.5 iotdb-3 ConfigNode + DataNode 从节点,防止单点故障
    3.3.2 第一步:配置主机名和免密登录(3 台服务器都要做)
  • 先改 /etc/hosts,让 3 台服务器能通过主机名互相访问:echo "192.168.1.3 iotdb-1" >> /etc/hosts
    echo "192.168.1.4 iotdb-2" >> /etc/hosts
    echo "192.168.1.5 iotdb-3" >> /etc/hosts
  • 配免密登录(可选,但后面管理集群方便,不用老输密码):# 只在 iotdb-1 上执行就行,一路回车,不用设密码
    ssh-keygen -t rsa
    # 把公钥拷到 iotdb-2 和 iotdb-3,中间要输目标服务器的密码
    ssh-copy-id root@iotdb-2
    ssh-copy-id root@iotdb-3
  • 3.3.3 第二步:拉 IoTDB 镜像(3 台服务器都要做)

    和单机版用同一个镜像,集群版是靠命令区分启动 ConfigNode 还是 DataNode:

    # 拉 IoTDB 1.3.2 镜像
    docker pull apache/iotdb:1.3.2-standalone
    # 看看拉下来没
    docker images

    3.3.4 第三步:写 Docker Compose 配置文件(3 台服务器都要做)

    先建目录,再写两个配置文件:confignode.yml(管 ConfigNode)和 datanode.yml(管 DataNode)。

  • 建目录结构:

    mkdir -p /docker-iotdb/iotdb
    cd /docker-iotdb
    touch confignode.yml datanode.yml

  • 写 confignode.yml(注意:3 台服务器要改主机名,iotdb-1 就写 iotdb-1,以此类推):

    version: "3"
    services:
    iotdb-confignode:
    image: apache/iotdb:1.3.2standalone # 用和单机版一样的镜像
    hostname: iotdb1 # 👉 重点:iotdb-2 改成 iotdb-2,iotdb-3 改成 iotdb-3
    container_name: iotdbconfignode # 容器名固定,后面好操作
    command: ["bash", "-c", "entrypoint.sh confignode"] # 启动 ConfigNode 的命令
    restart: always
    environment:
    cn_internal_address=iotdb1 # 👉 对应上面的主机名,iotdb-2/3 要改
    cn_internal_port=10710 # 固定端口,不用改
    cn_consensus_port=10720 # 固定端口,不用改
    cn_seed_config_node=iotdb1:10710 # 种子节点固定是 iotdb-1
    schema_replication_factor=3 # 元数据副本数,3 个 ConfigNode 就设 3
    data_replication_factor=2 # 数据副本数,3 个 DataNode 设 2,坏一个还能用
    privileged: true
    volumes:
    ./iotdb/data:/iotdb/data # 数据持久化,别丢了
    ./iotdb/logs:/iotdb/logs # 日志持久化,查错用
    network_mode: "host" # 用 host 网络,集群必须这么设

  • 写 datanode.yml(同样要按服务器改主机名):

    version: "3"
    services:
    iotdb-datanode:
    image: apache/iotdb:1.3.2standalone # 还是用同一个镜像
    hostname: iotdb1 # 👉 重点:iotdb-2 改成 iotdb-2,iotdb-3 改成 iotdb-3
    container_name: iotdbdatanode # 容器名固定
    command: ["bash", "-c", "entrypoint.sh datanode"] # 启动 DataNode 的命令
    restart: always
    ports:
    "6667:6667" # RPC 端口映射,对外提供服务
    privileged: true
    environment:
    dn_rpc_address=iotdb1 # 👉 对应主机名,iotdb-2/3 要改
    dn_internal_address=iotdb1 # 👉 对应主机名,iotdb-2/3 要改
    dn_seed_config_node=iotdb1:10710 # 连种子 ConfigNode iotdb-1
    dn_rpc_port=6667 # 固定端口
    dn_internal_port=10730 # 固定端口
    dn_mpp_data_exchange_port=10740 # 固定端口
    dn_schema_region_consensus_port=10750 # 固定端口
    dn_data_region_consensus_port=10760 # 固定端口
    schema_replication_factor=3 # 和 ConfigNode 保持一致
    data_replication_factor=2 # 和 ConfigNode 保持一致
    volumes:
    ./iotdb/data:/iotdb/data # 数据持久化
    ./iotdb/logs:/iotdb/logs # 日志持久化
    network_mode: "host" # 用 host 网络,集群必须这么设

  • 3.3.5 第四步:启动集群,顺序千万别错
  • 先启动 ConfigNode:必须先启动 iotdb-1,再启动 iotdb-2 和 iotdb-3,3 台服务器分别执行:cd /docker-iotdb
    docker-compose -f confignode.yml up -d
  • 再启动 DataNode:3 台服务器可以同时执行,不用等:cd /docker-iotdb
    docker-compose -f datanode.yml up -d
  • 3.3.6 第五步:验证集群,看看是不是都跑起来了
  • 先看 DataNode 日志,出现成功提示就没问题:docker logs -f iotdb-datanode
    # 成功标志:2024-07-21 09:40:58,120 [main] INFO o.a.i.db.service.DataNode:227 – Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!
  • 进容器用 CLI 看集群状态,所有节点都是 running 就成:# 随便进一台服务器的 DataNode 容器
    docker exec -it iotdb-datanode /bin/bash
    # 登录 IoTDB,连种子 ConfigNode iotdb-1
    ./start-cli.sh -h iotdb-1
    # 执行 show cluster,3 个 ConfigNode 和 3 个 DataNode 都显示 running 就对了
    IoTDB> show cluster
  • 四、原生部署实战:生产环境首选,性能更顶

    原生部署不用装 Docker,直接在服务器上跑,性能更好,也能更精细地调配置,适合生产环境。同样分 单机版 和 集群版 讲。

    4.1 原生单机版部署(1C1D)

    4.1.1 第一步:下安装包,解压后进目录

    先从 IoTDB 官网 下 1.3.2 版本的安装包(文件名是 apache-iotdb-1.3.2-all-bin.zip),然后解压:

    # 假设安装包下到了 /opt 目录,先进这个目录
    cd /opt
    # 解压安装包
    unzip apache-iotdb-1.3.2-all-bin.zip
    # 进入解压后的目录
    cd apache-iotdb-1.3.2-all-bin

    4.1.2 第二步:配置参数,这步很关键(部分参数改了就不能动)

    原生部署要手动改配置文件,特别是那些“首次启动后不能改”的参数,一定要仔细填,不然后面得删数据重配。

  • 先配环境脚本,给节点分内存:

    • 改 ConfigNode 的内存(./conf/confignode-env.sh):# 找到 MEMORY_SIZE 这行,设成服务器内存的 1/4 就行,比如 4G 服务器设 1G
      export MEMORY_SIZE=1G
    • 改 DataNode 的内存(./conf/datanode-env.sh):# 找到 MEMORY_SIZE 这行,设成服务器内存的 1/2,比如 4G 服务器设 2G
      export MEMORY_SIZE=2G
  • 再改通用配置(./conf/iotdb-system.properties):

    # 集群名称,首次启动后就不能改了,默认是 defaultCluster,不用改也成
    cluster_name=defaultCluster
    # 元数据副本数,单机版就设 1,首次启动后不能改
    schema_replication_factor=1
    # 数据副本数,单机版也设 1,首次启动后不能改
    data_replication_factor=1

  • 配 ConfigNode(./conf/iotdb-system.properties):

    # ConfigNode 内部通信地址,推荐用主机名,首次启动后不能改
    cn_internal_address=iotdb-1
    # ConfigNode 内部通信端口,固定 10710,首次启动后不能改
    cn_internal_port=10710
    # ConfigNode 共识协议端口,固定 10720,首次启动后不能改
    cn_consensus_port=10720
    # 种子 ConfigNode 地址,单机版就是自己,首次启动后不能改
    cn_seed_config_node=iotdb-1:10710

  • 配 DataNode(./conf/iotdb-system.properties):

    # DataNode 的 RPC 地址,对外提供服务,推荐用服务器 IP
    dn_rpc_address=192.168.1.3
    # DataNode 的 RPC 端口,固定 6667,重启就能生效
    dn_rpc_port=6667
    # DataNode 内部通信地址,推荐用主机名,首次启动后不能改
    dn_internal_address=iotdb-1
    # DataNode 内部通信端口,固定 10730,首次启动后不能改
    dn_internal_port=10730
    # 数据流交换端口,固定 10740,首次启动后不能改
    dn_mpp_data_exchange_port=10740
    # 数据共识端口,固定 10750,首次启动后不能改
    dn_data_region_consensus_port=10750
    # 元数据共识端口,固定 10760,首次启动后不能改
    dn_schema_region_consensus_port=10760
    # 连的种子 ConfigNode 地址,首次启动后不能改
    dn_seed_config_node=iotdb-1:10710

  • 4.1.3 第三步:启动节点,再验证
  • 先启动 ConfigNode:# 进 sbin 目录,加 -d 是后台启动,不占终端
    cd sbin
    ./start-confignode.sh -d
  • 再启动 DataNode:# 同样后台启动
    ./start-datanode.sh -d
  • 怎么验证成功了?两种方法:
    • 方法一:用 CLI 登录,看集群状态:# 进 sbin 目录,-h 后面跟 DataNode 的 RPC 地址,-p 是端口
      ./start-cli.sh -h 192.168.1.3 -p 6667
      # 执行 show cluster,显示 running 就成
      IoTDB> show cluster
    • 方法二:看日志,日志在 ./logs/datanode.log:tail -f ../logs/datanode.log
      # 看到这行就成功了:Congratulations, IoTDB DataNode is set up successfully.
  • 4.2 原生集群版部署(3C3D,生产环境用)

    集群版还是要 3 台服务器,规划和 Docker 集群一样(192.168.1.3/4/5 对应 iotdb-1/2/3)。

    4.2.1 第一步:下载解压,3 台服务器都要做

    和原生单机版第一步一样,把安装包下到 /opt 目录,解压后确保 3 台服务器的安装目录都一样,比如都叫 /opt/apache-iotdb-1.3.2-all-bin。

    4.2.2 第二步:配置主机名,3 台服务器都要做

    和 Docker 集群一样,改 /etc/hosts,让 3 台服务器能通过主机名访问。

    4.2.3 第三步:配置参数,3 台服务器要分别改
  • 先配环境脚本(3 台都要做):

    • ConfigNode 内存(./conf/confignode-env.sh):设 2G 就行。
    • DataNode 内存(./conf/datanode-env.sh):设 4G 比较合适。
  • 通用配置(./conf/iotdb-system.properties,3 台都一样):

    cluster_name=defaultCluster # 集群名统一,别改
    schema_replication_factor=3 # 元数据副本数=3,和 ConfigNode 数量对应
    data_replication_factor=2 # 数据副本数=2,和 DataNode 数量对应

  • ConfigNode 配置(按服务器改,首次启动后不能改):

    配置项iotdb-1(192.168.1.3)iotdb-2(192.168.1.4)iotdb-3(192.168.1.5)
    cn_internal_address iotdb-1 iotdb-2 iotdb-3
    cn_internal_port 10710 10710 10710
    cn_consensus_port 10720 10720 10720
    cn_seed_config_node iotdb-1:10710 iotdb-1:10710 iotdb-1:10710
  • DataNode 配置(按服务器改,首次启动后不能改):

    配置项iotdb-1(192.168.1.3)iotdb-2(192.168.1.4)iotdb-3(192.168.1.5)
    dn_rpc_address 192.168.1.3 192.168.1.4 192.168.1.5
    dn_rpc_port 6667 6667 6667
    dn_internal_address iotdb-1 iotdb-2 iotdb-3
    dn_internal_port 10730 10730 10730
    dn_mpp_data_exchange_port 10740 10740 10740
    dn_data_region_consensus_port 10750 10750 10750
    dn_schema_region_consensus_port 10760 10760 10760
    dn_seed_config_node iotdb-1:10710 iotdb-1:10710 iotdb-1:10710
  • 4.2.4 第四步:启动集群,顺序很重要
  • 先启动 ConfigNode:必须先启动 iotdb-1,再启动 iotdb-2 和 iotdb-3,3 台分别执行:cd /opt/apache-iotdb-1.3.2-all-bin/sbin
    ./start-confignode.sh -d
  • 再启动 DataNode:3 台可以同时执行:cd /opt/apache-iotdb-1.3.2-all-bin/sbin
    ./start-datanode.sh -d
  • 4.2.5 第五步:验证集群,和 Docker 集群一样

    随便进一台服务器,用 CLI 登录后执行 show cluster,确认 3 个 ConfigNode 和 3 个 DataNode 都是 running 状态就行。

    4.2.6 可选:一键启停集群,运维更方便

    原生部署支持用 start-all.sh 和 stop-all.sh 一键管集群,不过得先改 ./conf/iotdb-cluster.properties 配置文件:

    # ConfigNode 节点 IP 列表,用逗号分开
    confignode_address_list=192.168.1.3,192.168.1.4,192.168.1.5
    # DataNode 节点 IP 列表,用逗号分开
    datanode_address_list=192.168.1.3,192.168.1.4,192.168.1.5
    # SSH 登录用户名,3 台服务器要一样
    ssh_account=root
    # SSH 端口,默认 22 就行
    ssh_port=22
    # ConfigNode 部署路径,3 台要一样
    confignode_deploy_path=/opt/apache-iotdb-1.3.2-all-bin
    # DataNode 部署路径,3 台要一样
    datanode_deploy_path=/opt/apache-iotdb-1.3.2-all-bin

    改完后,一键启停的命令是这样:

    # 一键启动集群,在任意一台服务器执行就行
    cd /opt/apache-iotdb-1.3.2-all-bin/sbin
    ./start-all.sh

    # 一键停止集群
    ./stop-all.sh

    五、常见问题:遇到这些坑,这么解决

    5.1 ConfigNode 或 DataNode 启动不起来

    问题 1:改了首次启动后不能改的参数
    • 现象:日志里会提示“parameter cannot be modified after first startup”。
    • 原因:像 cluster_name、cn_internal_address 这些参数,首次启动后会写到元数据里,再改就冲突了。
    • 怎么解决:
    • 先把所有 IoTDB 进程停了:# 原生部署这么停
      cd sbin && ./stop-all.sh
      # Docker 部署这么停
      docker stop iotdb-confignode iotdb-datanode
    • 把数据目录删了(元数据存在这里面,删了就能重配):# 原生部署,数据目录在安装目录下
      rm -rf /opt/apache-iotdb-1.3.2-all-bin/data
      # Docker 部署,数据目录在 /docker-iotdb
      rm -rf /docker-iotdb/iotdb/data
    • 重新改参数,再启动。
    问题 2:端口被占用了
    • 现象:日志里提示“port is already in use”。
    • 怎么解决:
    • 先找到占用端口的进程:# 比如找 6667 端口被谁占了
      lsof -i:6667
    • 把这个进程干掉:kill -9 <进程 PID>
    • 重新启动 IoTDB。
    问题 3:内存不够用
    • 现象:日志里提示“OutOfMemoryError”。
    • 怎么解决:
    • 改环境脚本里的 MEMORY_SIZE 参数,少分配点内存。
    • 把服务器上其他占内存的程序关了。
    • 要是长期不够用,还是升级服务器内存吧。

    5.2 集群节点连不通

    问题现象

    有些节点显示 unavailable 状态,日志里提示“connection refused”。

    怎么解决
  • 先检查防火墙是不是关了(参考 2.2.1 节),没关就关了。
  • 看看 /etc/hosts 配置对不对,3 台服务器都要包含所有节点的 IP 和主机名。
  • 测测节点间能不能 ping 通,比如在 iotdb-1 上 ping iotdb-2:ping iotdb-2
  • 要是用 Docker 集群,确认网络模式是 host 或 overlay,别用 bridge。
  • 六、总结

    今天这篇文章,把 Apache IoTDB 从环境配置到部署验证的全流程都讲透了,主要包括这几块:

  • 基础环境:磁盘阵列、操作系统优化、Java 依赖,这些是不管哪种部署都得做的,没做好后面容易出问题。
  • Docker 部署:单机版适合开发测试,装起来快;集群版(3C3D)能应对生产环境的高可用需求。
  • 原生部署:性能比 Docker 好,适合生产环境,还支持一键启停,运维方便。
  • 问题排查:针对启动失败、节点连不通这些常见问题,给了具体的解决步骤。
  • 大家可以根据自己的场景选部署模式:开发测试用 Docker 单机版,生产环境用原生集群版(3C3D),这样既能保证性能,又能防单点故障。后面要是想深入学 IoTDB,可以再研究数据写入、查询和性能调优,把它的优势完全发挥出来。

    🌐 附:IoTDB的各大版本

    📄 Apache IoTDB 是一款工业物联网时序数据库管理系统,采用端边云协同的轻量化架构,支持一体化的物联网时序数据收集、存储、管理与分析 ,具有多协议兼容、超高压缩比、高通量读写、工业级稳定、极简运维等特点。

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

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

    联系博主

        xcLeigh 博主全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


         💞 关注博主 🌀 带你实现畅游前后端!

         🏰 大屏可视化 🌀 带你体验酷炫大屏!

         💯 神秘个人简介 🌀 带你体验不一样得介绍!

         🥇 从零到一学习Python 🌀 带你玩转Python技术流!

         🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

         💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


    在这里插入图片描述

         📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

    赞(0)
    未经允许不得转载:171主机测评 » Apache IoTDB 全场景部署指南:从环境配置到单机 / 集群实战(基于 Docker 与原生部署)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址