跳至主要內容

运维工具

...大约 14 分钟

运维工具

集群版部署

集群管理工具部署

IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。旨在解决 IoTDB 分布式系统多节点的运维难题,主要包括集群部署、集群启停、弹性扩容、配置更新、数据导出等功能,从而实现对复杂数据库集群的一键式指令下发,极大降低管理难度。本文档将说明如何用集群管理工具远程部署、配置、启动和停止 IoTDB 集群实例。

部署集群管理工具

环境依赖

IoTDB 要部署的机器需要依赖jdk 8及以上版本、lsof 或者 netstat、unzip功能如果没有请自行安装,可以参考文档最后的一节环境所需安装命令。

提示:IoTDB集群管理工具需要使用具有root权限的账号

部署方法
下载安装

本工具为TimechoDB(基于IoTDB的企业版数据库)配套工具,您可以联系您的销售获取工具下载方式。

注意:由于二进制包仅支持GLIBC2.17 及以上版本,因此最低适配Centos7版本

  • 在在iotd目录内输入以下指令后:
bash install-iotd.sh

即可在之后的 shell 内激活 iotd 关键词,如检查部署前所需的环境指令如下所示:

iotd cluster check example
  • 也可以不激活iotd直接使用 <iotd absolute path>/sbin/iotd 来执行命令,如检查部署前所需的环境:
<iotd absolute path>/sbin/iotd cluster check example

集群配置文件介绍

  • iotd/config 目录下有集群配置的yaml文件,yaml文件名字就是集群名字yaml 文件可以有多个,为了方便用户配置yaml文件在iotd/config目录下面提供了default_cluster.yaml示例。
  • yaml 文件配置由globalconfignode_serversdatanode_serversgrafana_servers(功能待开发)四大部分组成
  • global 是通用配置主要配置机器用户名密码、IoTDB本地安装文件、Jdk配置等。在iotd/config目录中提供了一个default_cluster.yaml样例数据,
    用户可以复制修改成自己集群名字并参考里面的说明进行配置iotdb集群,在default_cluster.yaml样例中没有注释的均为必填项,已经注释的为非必填项。

例如要执行default_cluster.yaml检查命令则需要执行命令iotd cluster check default_cluster即可,
更多详细命令请参考下面命令列表。

参数说明是否必填
iotdb_zip_dirIoTDB 部署分发目录,如果值为空则从iotdb_download_url指定地址下载非必填
iotdb_download_urlIoTDB 下载地址,如果iotdb_zip_dir 没有值则从指定地址下载非必填
jdk_tar_dirjdk 本地目录,可使用该 jdk 路径进行上传部署至目标节点。非必填
jdk_deploy_dirjdk 远程机器部署目录,会将 jdk 部署到目标节点该文件夹下最终部署完成的路径是<jdk_deploy_dir>/jdk_iotdb非必填
iotdb_lib_dirIoTDB lib 目录或者IoTDB 的lib 压缩包仅支持.zip格式 ,仅用于IoTDB升级,默认处于注释状态,如需升级请打开注释非必填
userssh登陆部署机器的用户名必填
passwordssh登录的密码, 如果password未指定使用pkey登陆, 请确保已配置节点之间ssh登录免密钥非必填
pkey密钥登陆如果password 有值优先使用password否则使用pkey登陆非必填
ssh_portssh登录端口必填
deploy_diriotdb 部署目录,会把 iotdb 部署到目标节点该文件夹下最终部署完成的路径是<deploy_dir>/iotdb必填
datanode-env.shopen in new window对应iotdb/config/datanode-env.sh非必填
confignode-env.shopen in new window对应iotdb/config/confignode-env.sh非必填
iotdb-common.properties对应iotdb/config/iotdb-common.properties非必填
cn_seed_config_node集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globalconfignode_servers同时配置值时优先使用confignode_servers中的值,对应iotdb/config/iotdb-confignode.properties中的cn_seed_config_node必填
dn_seed_config_node集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globaldatanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_seed_config_node必填
  • confignode_servers 是部署IoTDB Confignodes配置,里面可以配置多个Confignode
    默认将第一个启动的ConfigNode节点node1当作Seed-ConfigNode
参数说明是否必填
nameConfignode 名称必填
deploy_dirIoTDB config node 部署目录,注:该目录不能与下面的IoTDB data node部署目录相同必填|
iotdb-confignode.properties对应iotdb/config/iotdb-confignode.properties更加详细请参看iotdb-confignode.properties文件说明非必填
cn_internal_address对应iotdb/内部通信地址,对应iotdb/config/iotdb-confignode.properties中的cn_internal_address必填
cn_seed_config_node集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globalconfignode_servers同时配置值时优先使用confignode_servers中的值,对应iotdb/config/iotdb-confignode.properties中的cn_seed_config_node必填
cn_internal_port内部通信端口,对应iotdb/config/iotdb-confignode.properties中的cn_internal_port必填
cn_consensus_port对应iotdb/config/iotdb-confignode.properties中的cn_consensus_port非必填
cn_data_dir对应iotdb/config/iotdb-confignode.properties中的cn_data_dir必填
iotdb-common.properties对应iotdb/config/iotdb-common.propertiesglobalconfignode_servers同时配置值优先使用confignode_servers中的值非必填
  • datanode_servers 是部署IoTDB Datanodes配置,里面可以配置多个Datanode
参数说明是否必填
nameDatanode 名称必填
deploy_dirIoTDB data node 部署目录,注:该目录不能与下面的IoTDB config node部署目录相同必填
iotdb-datanode.properties对应iotdb/config/iotdb-datanode.properties更加详细请参看iotdb-datanode.properties文件说明非必填
dn_rpc_addressdatanode rpc 地址对应iotdb/config/iotdb-datanode.properties中的dn_rpc_address必填
dn_internal_address内部通信地址,对应iotdb/config/iotdb-datanode.properties中的dn_internal_address必填
dn_seed_config_node集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globaldatanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_seed_config_node必填
dn_rpc_portdatanode rpc端口地址,对应iotdb/config/iotdb-datanode.properties中的dn_rpc_port必填
dn_internal_port内部通信端口,对应iotdb/config/iotdb-datanode.properties中的dn_internal_port必填
iotdb-common.properties对应iotdb/config/iotdb-common.propertiesglobaldatanode_servers同时配置值优先使用datanode_servers中的值非必填
  • grafana_servers 是部署Grafana 相关配置
    该模块暂不支持

注意:如何配置yaml key对应的值包含特殊字符如:等建议整个value使用双引号,对应的文件路径中不要使用包含空格的路径,防止出现识别出现异常问题。

命令格式

本工具的基本用法为:

iotd cluster <key> <cluster name> [params (Optional)]
  • key 表示了具体的命令。

  • cluster name 表示集群名称(即iotd/config 文件中yaml文件名字)。

  • params 表示了命令的所需参数(选填)。

  • 例如部署default_cluster集群的命令格式为:

iotd cluster deploy default_cluster
  • 集群的功能及参数列表如下:
命令功能参数
check检测集群是否可以部署集群名称列表
clean清理集群集群名称
deploy部署集群集群名称
list打印集群及状态列表
start启动集群集群名称,-N,节点名称(可选)
stop关闭集群集群名称,-N,节点名称(可选)
restart重启集群集群名称
show查看集群信息,details字段表示展示集群信息细节集群名称, details(可选)
destroy销毁集群集群名称
scaleout集群扩容集群名称
scalein集群缩容集群名称,-N,集群节点名字或集群节点ip+port
reload集群热加载集群名称
distribute集群配置文件分发集群名称
dumplog备份指定集群日志集群名称,-N,集群节点名字 -h 备份至目标机器ip -pw 备份至目标机器密码 -p 备份至目标机器端口 -path 备份的目录 -startdate 起始时间 -enddate 结束时间 -loglevel 日志类型 -l 传输速度
dumpdata备份指定集群数据集群名称, -h 备份至目标机器ip -pw 备份至目标机器密码 -p 备份至目标机器端口 -path 备份的目录 -startdate 起始时间 -enddate 结束时间 -l 传输速度
upgradelib 包升级集群名字(升级完后请重启)

详细命令执行过程

下面的命令都是以default_cluster.yaml 为示例执行的,用户可以修改成自己的集群文件来执行

检查集群部署环境命令
iotd cluster check default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 验证目标节点是否能够通过 SSH 登录

  • 验证对应节点上的 JDK 版本是否满足IoTDB jdk1.8及以上版本、服务器是否按照unzip、是否安装lsof 或者netstat

  • 如果看到下面提示Info:example check successfully! 证明服务器已经具备安装的要求,
    如果输出Warn:example check fail! 证明有部分条件没有满足需求可以查看上面的Warn日志进行修复,假如jdk没有满足要求,我们可以自己在yaml 文件中配置一个jdk1.8 及以上版本的进行部署不影响后面使用,如果检查lsof、netstat或者unzip 不满足要求需要在服务器上自行安装

部署集群命令
iotd cluster deploy default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 根据confignode_serversdatanode_servers中的节点信息上传iotdb压缩包和jdk压缩包(如果yaml中配置jdk_tar_dirjdk_deploy_dir值)

  • 根据yaml文件节点配置信息生成并上传iotdb-common.propertiesiotdb-confignode.propertiesiotdb-datanode.properties

提示:这里的confignode 和datanode部署到同一台机器上时目录不能为相同,否则会被后部署的节点文件覆盖

启动集群命令
iotd cluster check default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 启动confignode,根据yaml配置文件中confignode_servers中的顺序依次启动同时根据进程id检查confignode是否正常,第一个confignode 为seek config

  • 启动datanode,根据yaml配置文件中datanode_servers中的顺序依次启动同时根据进程id检查datanode是否正常

  • 如果根据进程id检查进程存在后,通过cli依次检查集群列表中每个服务是否正常,如果cli链接失败则每隔10s重试一次直到成功最多重试5次

启动单个节点命令

iotd cluster start default_cluster -N datanode_1

or

iotd cluster start default_cluster -N 192.168.1.5:6667
  • 根据 cluster-name 找到默认位置的 yaml 文件

  • 根据提供的节点名称或者ip:port找到对于节点位置信息,如果启动的节点是data_node则ip使用yaml 文件中的dn_rpc_address、port 使用的是yaml文件中datanode_servers 中的dn_rpc_port
    如果启动的节点是config_node则ip使用的是yaml文件中confignode_servers 中的cn_internal_address 、port 使用的是cn_internal_port

  • 启动该节点

查看集群状态命令
iotd cluster show default_cluster

or

iotd cluster show default_cluster details
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 依次在datanode通过cli执行show cluster details 如果有一个节点执行成功则不会在后续节点继续执行cli直接返回结果

停止集群命令
iotd cluster stop default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 根据datanode_servers中datanode节点信息,按照配置先后顺序依次停止datanode节点

  • 根据confignode_servers中confignode节点信息,按照配置依次停止confignode节点

停止单个节点命令

iotd cluster stop default_cluster -N datanode_1

or

iotd cluster stop default_cluster -N 192.168.1.5:6667
  • 根据 cluster-name 找到默认位置的 yaml 文件

  • 根据提供的节点名称或者ip:port找到对于节点位置信息,如果停止的节点是data_node则ip使用yaml 文件中的dn_rpc_address、port 使用的是yaml文件中datanode_servers 中的dn_rpc_port
    如果停止的节点是config_node则ip使用的是yaml文件中confignode_servers 中的cn_internal_address 、port 使用的是cn_internal_port

  • 停止该节点

数据文件夹概览工具

IoTDB数据文件夹概览工具用于打印出数据文件夹的结构概览信息,工具位置为 tools/tsfile/print-iotdb-data-dir。

用法

  • Windows:
.\print-iotdb-data-dir.bat <IoTDB数据文件夹路径,如果是多个文件夹用逗号分隔> (<输出结果的存储路径>) 
  • Linux or MacOs:
./print-iotdb-data-dir.sh <IoTDB数据文件夹路径,如果是多个文件夹用逗号分隔> (<输出结果的存储路径>)

注意:如果没有设置输出结果的存储路径, 将使用相对路径"IoTDB_data_dir_overview.txt"作为默认值。

示例

以Windows系统为例:

.\print-iotdb-data-dir.bat D:\github\master\iotdb\data\datanode\data
````````````````````````
Starting Printing the IoTDB Data Directory Overview
````````````````````````
output save path:IoTDB_data_dir_overview.txt
data dir num:1
143  [main] WARN  o.a.i.t.c.conf.TSFileDescriptor - not found iotdb-common.properties, use the default configs.
|==============================================================
|D:\github\master\iotdb\data\datanode\data
|--sequence
|  |--root.redirect0
|  |  |--1
|  |  |  |--0
|  |--root.redirect1
|  |  |--2
|  |  |  |--0
|  |--root.redirect2
|  |  |--3
|  |  |  |--0
|  |--root.redirect3
|  |  |--4
|  |  |  |--0
|  |--root.redirect4
|  |  |--5
|  |  |  |--0
|  |--root.redirect5
|  |  |--6
|  |  |  |--0
|  |--root.sg1
|  |  |--0
|  |  |  |--0
|  |  |  |--2760
|--unsequence
|==============================================================

TsFile概览工具

TsFile概览工具用于以概要模式打印出一个TsFile的内容,工具位置为 tools/tsfile/print-tsfile。

用法

  • Windows:
.\print-tsfile-sketch.bat <TsFile文件路径> (<输出结果的存储路径>) 
  • Linux or MacOs:
./print-tsfile-sketch.sh <TsFile文件路径> (<输出结果的存储路径>) 

注意:如果没有设置输出结果的存储路径, 将使用相对路径"TsFile_sketch_view.txt"作为默认值。

示例

以Windows系统为例:

.\print-tsfile.bat D:\github\master\1669359533965-1-0-0.tsfile D:\github\master\sketch.txt
````````````````````````
Starting Printing the TsFile Sketch
````````````````````````
TsFile path:D:\github\master\1669359533965-1-0-0.tsfile
Sketch save path:D:\github\master\sketch.txt
148  [main] WARN  o.a.i.t.c.conf.TSFileDescriptor - not found iotdb-common.properties, use the default configs.
-------------------------------- TsFile Sketch --------------------------------
file path: D:\github\master\1669359533965-1-0-0.tsfile
file length: 2974

            POSITION|   CONTENT
            --------    -------
                   0|   [magic head] TsFile
                   6|   [version number] 3
||||||||||||||||||||| [Chunk Group] of root.sg1.d1, num of Chunks:3
                   7|   [Chunk Group Header]
                    |           [marker] 0
                    |           [deviceID] root.sg1.d1
                  20|   [Chunk] of root.sg1.d1.s1, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-9032452783138882770,maxValue:9117677033041335123,firstValue:7068645577795875906,lastValue:-5833792328174747265,sumValue:5.795959009889246E19]
                    |           [chunk header] marker=5, measurementID=s1, dataSize=864, dataType=INT64, compressionType=SNAPPY, encodingType=RLE
                    |           [page]  UncompressedSize:862, CompressedSize:860
                 893|   [Chunk] of root.sg1.d1.s2, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-8806861312244965718,maxValue:9192550740609853234,firstValue:1150295375739457693,lastValue:-2839553973758938646,sumValue:8.2822564314572677E18]
                    |           [chunk header] marker=5, measurementID=s2, dataSize=864, dataType=INT64, compressionType=SNAPPY, encodingType=RLE
                    |           [page]  UncompressedSize:862, CompressedSize:860
                1766|   [Chunk] of root.sg1.d1.s3, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-9076669333460323191,maxValue:9175278522960949594,firstValue:2537897870994797700,lastValue:7194625271253769397,sumValue:-2.126008424849926E19]
                    |           [chunk header] marker=5, measurementID=s3, dataSize=864, dataType=INT64, compressionType=SNAPPY, encodingType=RLE
                    |           [page]  UncompressedSize:862, CompressedSize:860
||||||||||||||||||||| [Chunk Group] of root.sg1.d1 ends
                2656|   [marker] 2
                2657|   [TimeseriesIndex] of root.sg1.d1.s1, tsDataType:INT64, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-9032452783138882770,maxValue:9117677033041335123,firstValue:7068645577795875906,lastValue:-5833792328174747265,sumValue:5.795959009889246E19]
                    |           [ChunkIndex] offset=20
                2728|   [TimeseriesIndex] of root.sg1.d1.s2, tsDataType:INT64, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-8806861312244965718,maxValue:9192550740609853234,firstValue:1150295375739457693,lastValue:-2839553973758938646,sumValue:8.2822564314572677E18]
                    |           [ChunkIndex] offset=893
                2799|   [TimeseriesIndex] of root.sg1.d1.s3, tsDataType:INT64, startTime: 1669359533948 endTime: 1669359534047 count: 100 [minValue:-9076669333460323191,maxValue:9175278522960949594,firstValue:2537897870994797700,lastValue:7194625271253769397,sumValue:-2.126008424849926E19]
                    |           [ChunkIndex] offset=1766
                2870|   [IndexOfTimerseriesIndex Node] type=LEAF_MEASUREMENT
                    |           <s1, 2657>
                    |           <endOffset, 2870>
||||||||||||||||||||| [TsFileMetadata] begins
                2891|   [IndexOfTimerseriesIndex Node] type=LEAF_DEVICE
                    |           <root.sg1.d1, 2870>
                    |           <endOffset, 2891>
                    |   [meta offset] 2656
                    |   [bloom filter] bit vector byte array length=31, filterSize=256, hashFunctionSize=5
||||||||||||||||||||| [TsFileMetadata] ends
                2964|   [TsFileMetadataSize] 73
                2968|   [magic tail] TsFile
                2974|   END of TsFile
---------------------------- IndexOfTimerseriesIndex Tree -----------------------------
        [MetadataIndex:LEAF_DEVICE]
        └──────[root.sg1.d1,2870]
                        [MetadataIndex:LEAF_MEASUREMENT]
                        └──────[s1,2657]
---------------------------------- TsFile Sketch End ----------------------------------

解释:

  • 以"|"为分隔,左边是在TsFile文件中的实际位置,右边是梗概内容。
  • "|||||||||||||||||||||"是为增强可读性而添加的导引信息,不是TsFile中实际存储的数据。
  • 最后打印的"IndexOfTimerseriesIndex Tree"是对TsFile文件末尾的元数据索引树的重新整理打印,便于直观理解,不是TsFile中存储的实际数据。

TsFile Resource概览工具

TsFile resource概览工具用于打印出TsFile resource文件的内容,工具位置为 tools/tsfile/print-tsfile-resource-files。

用法

  • Windows:
.\print-tsfile-resource-files.bat <TsFile resource文件所在的文件夹路径,或者单个TsFile resource文件路径>
  • Linux or MacOs:
./print-tsfile-resource-files.sh <TsFile resource文件所在的文件夹路径,或者单个TsFile resource文件路径> 

示例

以Windows系统为例:

.\print-tsfile-resource-files.bat D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0
````````````````````````
Starting Printing the TsFileResources
````````````````````````
147  [main] WARN  o.a.i.t.c.conf.TSFileDescriptor - not found iotdb-common.properties, use the default configs.
230  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading config file iotdb-common.properties, use default configuration
231  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Couldn't load the configuration iotdb-common.properties from any of the known sources.
233  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading config file iotdb-datanode.properties, use default configuration
237  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Couldn't load the configuration iotdb-datanode.properties from any of the known sources.
Analyzing D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0\1669359533489-1-0-0.tsfile ...

Resource plan index range [9223372036854775807, -9223372036854775808]
device root.sg1.d1, start time 0 (1970-01-01T08:00+08:00[GMT+08:00]), end time 99 (1970-01-01T08:00:00.099+08:00[GMT+08:00])

Analyzing the resource file folder D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0 finished.
.\print-tsfile-resource-files.bat D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0\1669359533489-1-0-0.tsfile.resource
````````````````````````
Starting Printing the TsFileResources
````````````````````````
178  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading config file iotdb-common.properties, use default configuration
186  [main] WARN  o.a.i.t.c.conf.TSFileDescriptor - not found iotdb-common.properties, use the default configs.
187  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Couldn't load the configuration iotdb-common.properties from any of the known sources.
188  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Cannot find IOTDB_HOME or IOTDB_CONF environment variable when loading config file iotdb-datanode.properties, use default configuration
192  [main] WARN  o.a.iotdb.db.conf.IoTDBDescriptor - Couldn't load the configuration iotdb-datanode.properties from any of the known sources.
Analyzing D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0\1669359533489-1-0-0.tsfile ...

Resource plan index range [9223372036854775807, -9223372036854775808]
device root.sg1.d1, start time 0 (1970-01-01T08:00+08:00[GMT+08:00]), end time 99 (1970-01-01T08:00:00.099+08:00[GMT+08:00])

Analyzing the resource file D:\github\master\iotdb\data\datanode\data\sequence\root.sg1\0\0\1669359533489-1-0-0.tsfile.resource finished.

Copyright © 2024 The Apache Software Foundation.
Apache IoTDB, IoTDB, Apache, the Apache feather logo, and the Apache IoTDB project logo are either registered trademarks or trademarks of The Apache Software Foundation in all countries

Have a question? Connect with us on QQ, WeChat, or Slack. Join the community now.