跳至主要內容

部署指导

大约 43 分钟

部署指导

单机版部署

本文将介绍关于 IoTDB 使用的基本流程,如果需要更多信息,请浏览我们官网的 指引.

安装环境

安装前需要保证设备上配有 JDK>=1.8 的运行环境,并配置好 JAVA_HOME 环境变量。

设置最大文件打开数为 65535。

安装步骤

IoTDB 支持多种安装途径。用户可以使用三种方式对 IoTDB 进行安装——下载二进制可运行程序、使用源码、使用 docker 镜像。

  • 使用源码:您可以从代码仓库下载源码并编译,具体编译方法见下方。

  • 二进制可运行程序:请从 下载open in new window 页面下载最新的安装包,解压后即完成安装。

  • 使用 Docker 镜像:dockerfile 文件位于githubopen in new window

软件目录结构

  • sbin 启动和停止脚本目录
  • conf 配置文件目录
  • tools 系统工具目录
  • lib 依赖包目录

IoTDB 试用

用户可以根据以下操作对 IoTDB 进行简单的试用,若以下操作均无误,则说明 IoTDB 安装成功。

启动 IoTDB

IoTDB 是一个基于分布式系统的数据库。要启动 IoTDB ,你可以先启动单机版(一个 ConfigNode 和一个 DataNode)来检查安装。

用户可以使用 sbin 文件夹下的 start-standalone 脚本启动 IoTDB。

Linux 系统与 MacOS 系统启动命令如下:

> bash sbin/start-standalone.sh

Windows 系统启动命令如下:

> sbin\start-standalone.bat

集群版部署(使用集群管理工具)

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

环境准备

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

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

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

部署方法

下载安装

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

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

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

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

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

系统结构

IoTDB集群管理工具主要由config、logs、doc、sbin目录组成。

  • config存放要部署的集群配置文件如果要使用集群部署工具需要修改里面的yaml文件。

  • logs 存放部署工具日志,如果想要查看部署工具执行日志请查看logs/iotd_yyyy_mm_dd.log

  • sbin 存放集群部署工具所需的二进制包。

  • doc 存放用户手册、开发手册和推荐部署手册。

集群配置文件介绍

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

例如要执行default_cluster.yaml检查命令则需要执行命令iotdbctl 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_dir_name参数构成完整的jdk部署目录即 <jdk_deploy_dir>/<jdk_dir_name>非必填
jdk_dir_namejdk 解压后的目录名称默认是jdk_iotdb非必填
iotdb_lib_dirIoTDB lib 目录或者IoTDB 的lib 压缩包仅支持.zip格式 ,仅用于IoTDB升级,默认处于注释状态,如需升级请打开注释修改路径即可。如果使用zip文件请使用zip 命令压缩iotdb/lib目录例如 zip -r lib.zip apache-iotdb-1.2.0/lib/*非必填
userssh登陆部署机器的用户名必填
passwordssh登录的密码, 如果password未指定使用pkey登陆, 请确保已配置节点之间ssh登录免密钥非必填
pkey密钥登陆如果password有值优先使用password否则使用pkey登陆非必填
ssh_portssh登录端口必填
deploy_dirIoTDB 部署目录,会把 IoTDB 部署到该目录下面与下面的iotdb_dir_name参数构成完整的IoTDB 部署目录即 <deploy_dir>/<iotdb_dir_name>必填
iotdb_dir_nameIoTDB 解压后的目录名称默认是iotdb非必填
datanode-env.shopen in new window对应iotdb/config/datanode-env.sh ,在globalconfignode_servers同时配置值时优先使用confignode_servers中的值非必填
confignode-env.shopen in new window对应iotdb/config/confignode-env.sh,在globaldatanode_servers同时配置值时优先使用datanode_servers中的值非必填
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必填

其中datanode-env.shopen in new window 和confignode-env.shopen in new window 可以配置额外参数extra_opts,当该参数配置后会在datanode-env.shopen in new window 和confignode-env.shopen in new window 后面追加对应的值,可参考default_cluster.yaml,配置示例如下:
datanode-env.shopen in new window:
extra_opts: |
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+UseG1GC"
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:MaxGCPauseMillis=200"

  • confignode_servers 是部署IoTDB Confignodes配置,里面可以配置多个Confignode
    默认将第一个启动的ConfigNode节点node1当作Seed-ConfigNode
参数说明是否必填
nameConfignode 名称必填
deploy_dirIoTDB config 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-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_server 是部署Grafana 相关配置
参数说明是否必填
grafana_dir_namegrafana 解压目录名称非必填默认grafana_iotdb
hostgrafana 部署的服务器ip必填
grafana_portgrafana 部署机器的端口非必填,默认3000
deploy_dirgrafana 部署服务器目录必填
grafana_tar_dirgrafana 压缩包位置必填
dashboardsdashboards 所在的位置非必填,多个用逗号隔开
  • prometheus_server 是部署Prometheus 相关配置
参数说明是否必填
prometheus_dir_nameprometheus 解压目录名称非必填默认prometheus_iotdb
hostprometheus 部署的服务器ip必填
prometheus_portprometheus 部署机器的端口非必填,默认9090
deploy_dirprometheus 部署服务器目录必填
prometheus_tar_dirprometheus 压缩包位置必填
storage_tsdb_retention_time默认保存数据天数 默认15天非必填
storage_tsdb_retention_size指定block可以保存的数据大小默认512M ,注意单位KB, MB, GB, TB, PB, EB非必填

如果在config/xxx.yaml的iotdb-datanode.propertiesiotdb-confignode.properties中配置了metrics,则会自动把配置放入到promethues无需手动修改

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

使用场景

清理数据场景

  • 清理集群数据场景会删除IoTDB集群中的data目录以及yaml文件中配置的cn_system_dircn_consensus_dir
    dn_data_dirsdn_consensus_dirdn_system_dirlogsext目录。
  • 首先执行停止集群命令、然后在执行集群清理命令。
iotdbctl cluster stop default_cluster
iotdbctl cluster clean default_cluster

集群销毁场景

  • 集群销毁场景会删除IoTDB集群中的datacn_system_dircn_consensus_dir
    dn_data_dirsdn_consensus_dirdn_system_dirlogsextIoTDB部署目录、
    grafana部署目录和prometheus部署目录。
  • 首先执行停止集群命令、然后在执行集群销毁命令。
iotdbctl cluster stop default_cluster
iotdbctl cluster destroy default_cluster

集群升级场景

  • 集群升级首先需要在config/xxx.yaml中配置iotdb_lib_dir为要上传到服务器的jar所在目录路径(例如iotdb/lib)。
  • 如果使用zip文件上传请使用zip 命令压缩iotdb/lib目录例如 zip -r lib.zip apache-iotdb-1.2.0/lib/*
  • 执行上传命令、然后执行重启IoTDB集群命令即可完成集群升级
iotdbctl cluster upgrade default_cluster
iotdbctl cluster restart default_cluster

集群配置文件的热部署场景

  • 首先修改在config/xxx.yaml中配置。
  • 执行分发命令、然后执行热部署命令即可完成集群配置的热部署
iotdbctl cluster distribute default_cluster
iotdbctl cluster reload default_cluster

集群扩容场景

  • 首先修改在config/xxx.yaml中添加一个datanode 或者confignode 节点。
  • 执行集群扩容命令
iotdbctl cluster scaleout default_cluster

集群缩容场景

  • 首先在config/xxx.yaml中找到要缩容的节点名字或者ip+port(其中confignode port 是cn_internal_port、datanode port 是rpc_port)
  • 执行集群缩容命令
iotdbctl cluster scalein default_cluster

已有IoTDB集群,使用集群部署工具场景

  • 配置服务器的userpasswodpkeyssh_port
  • 修改config/xxx.yaml中IoTDB 部署路径,deploy_dir(IoTDB 部署目录)、iotdb_dir_name(IoTDB解压目录名称,默认是iotdb)
    例如IoTDB 部署完整路径是/home/data/apache-iotdb-1.1.1则需要修改yaml文件deploy_dir:/home/data/iotdb_dir_name:apache-iotdb-1.1.1
  • 如果服务器不是使用的java_home则修改jdk_deploy_dir(jdk 部署目录)、jdk_dir_name(jdk解压后的目录名称,默认是jdk_iotdb),如果使用的是java_home 则不需要修改配置
    例如jdk部署完整路径是/home/data/jdk_1.8.2则需要修改yaml文件jdk_deploy_dir:/home/data/jdk_dir_name:jdk_1.8.2
  • 配置cn_seed_config_nodedn_seed_config_node
  • 配置confignode_serversiotdb-confignode.properties里面的cn_internal_addresscn_internal_portcn_consensus_portcn_system_dir
    cn_consensus_diriotdb-common.properties里面的值不是IoTDB默认的则需要配置否则可不必配置
  • 配置datanode_serversiotdb-datanode.properties里面的dn_rpc_addressdn_internal_addressdn_data_dirsdn_consensus_dirdn_system_diriotdb-common.properties
  • 执行初始化命令
iotdbctl cluster init default_cluster

一键部署IoTDB、Grafana和Prometheus 场景

  • 配置iotdb-datanode.propertiesiotdb-confignode.properties 打开metrics接口
  • 配置Grafana 配置,如果dashboards 有多个就用逗号隔开,名字不能重复否则会被覆盖。
  • 配置Prometheus配置,IoTDB 集群配置了metrics 则无需手动修改Prometheus 配置会根据哪个节点配置了metrics,自动修改Prometheus 配置。
  • 启动集群
iotdbctl cluster start default_cluster

更加详细参数请参考上方的 集群配置文件介绍

命令格式

本工具的基本用法为:

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

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

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

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

iotdbctl cluster deploy default_cluster
  • 集群的功能及参数列表如下:
命令功能参数
check检测集群是否可以部署集群名称列表
clean清理集群集群名称
deploy部署集群集群名称 ,-N,模块名称(iotdb、grafana、prometheus可选),-op force(可选)
list打印集群及状态列表
start启动集群集群名称,-N,节点名称(nodename、grafana、prometheus可选)
stop关闭集群集群名称,-N,节点名称(nodename、grafana、prometheus可选) ,-op force(nodename、grafana、prometheus可选)
restart重启集群集群名称,-N,节点名称(nodename、grafana、prometheus可选),-op force(nodename、grafana、prometheus可选)
show查看集群信息,details字段表示展示集群信息细节集群名称, details(可选)
destroy销毁集群集群名称,-N,模块名称(iotdb、grafana、prometheus可选)
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 包升级集群名字(升级完后请重启)
init已有集群使用集群部署工具时,初始化集群配置集群名字,初始化集群配置
status查看进程状态集群名字
acitvate激活集群集群名字

详细命令执行过程

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

检查集群部署环境命令

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

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

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

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

部署集群命令

iotdbctl 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

iotdbctl cluster deploy default_cluster -op force

注意:该命令会强制执行部署,具体过程会删除已存在的部署目录重新部署

部署单个模块

# 部署grafana模块
iotdbctl cluster deploy default_cluster -N grafana
# 部署prometheus模块
iotdbctl cluster deploy default_cluster -N prometheus
# 部署iotdb模块
iotdbctl cluster deploy default_cluster -N iotdb

启动集群命令

iotdbctl cluster start 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次

启动单个节点命令

#按照IoTDB 节点名称启动
iotdbctl cluster start default_cluster -N datanode_1
#按照IoTDB 集群ip+port启动,其中port对应confignode的cn_internal_port、datanode的rpc_port
iotdbctl cluster start default_cluster -N 192.168.1.5:6667
#启动grafana
iotdbctl cluster start default_cluster -N grafana
#启动prometheus
iotdbctl cluster start default_cluster -N prometheus
  • 根据 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集群中的start-confignode.sh和start-datanode.shopen in new window 脚本,
在实际输出结果失败时有可能是集群还未正常启动,建议使用status命令进行查看当前集群状态(iotdbctl cluster status xxx)

查看IoTDB集群状态命令

iotdbctl cluster show default_cluster
#查看IoTDB集群详细信息
iotdbctl cluster show default_cluster details
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

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

停止集群命令

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

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

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

强制停止集群命令

iotdbctl cluster stop default_cluster -op force

会直接执行kill -9 pid 命令强制停止集群

停止单个节点命令

#按照IoTDB 节点名称停止
iotdbctl cluster stop default_cluster -N datanode_1
#按照IoTDB 集群ip+port停止(ip+port是按照datanode中的ip+dn_rpc_port获取唯一节点或confignode中的ip+cn_internal_port获取唯一节点)
iotdbctl cluster stop default_cluster -N 192.168.1.5:6667
#停止grafana
iotdbctl cluster stop default_cluster -N grafana
#停止prometheus
iotdbctl cluster stop default_cluster -N prometheus
  • 根据 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集群中的stop-confignode.sh和stop-datanode.shopen in new window 脚本,在某些情况下有可能iotdb集群并未停止。

清理集群数据命令

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

  • 根据confignode_serversdatanode_servers中的信息,检查是否还有服务正在运行,
    如果有任何一个服务正在运行则不会执行清理命令

  • 删除IoTDB集群中的data目录以及yaml文件中配置的cn_system_dircn_consensus_dir
    dn_data_dirsdn_consensus_dirdn_system_dirlogsext目录。

重启集群命令

iotdbctl cluster restart default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_serversgrafanaprometheus配置信息

  • 执行上述的停止集群命令(stop),然后执行启动集群命令(start) 具体参考上面的start 和stop 命令

强制重启集群命令

iotdbctl cluster restart default_cluster -op force

会直接执行kill -9 pid 命令强制停止集群,然后启动集群

重启单个节点命令

#按照IoTDB 节点名称重启datanode_1
iotdbctl cluster restart default_cluster -N datanode_1
#按照IoTDB 节点名称重启confignode_1
iotdbctl cluster restart default_cluster -N confignode_1
#重启grafana
iotdbctl cluster restart default_cluster -N grafana
#重启prometheus
iotdbctl cluster restart default_cluster -N prometheus

集群缩容命令

#按照节点名称缩容
iotdbctl cluster scalein default_cluster -N nodename
#按照ip+port缩容(ip+port按照datanode中的ip+dn_rpc_port获取唯一节点,confignode中的ip+cn_internal_port获取唯一节点)
iotdbctl cluster scalein default_cluster -N ip:port
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_servers配置信息

  • 判断要缩容的confignode节点和datanode是否只剩一个,如果只剩一个则不能执行缩容

  • 然后根据ip:port或者nodename 获取要缩容的节点信息,执行缩容命令,然后销毁该节点目录,如果缩容的节点是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

提示:目前一次仅支持一个节点缩容

集群扩容命令

iotdbctl cluster scaleout default_cluster
  • 修改config/xxx.yaml 文件添加一个datanode 节点或者confignode节点

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

  • 找到要扩容的节点,执行上传IoTDB压缩包和jdb包(如果yaml中配置jdk_tar_dirjdk_deploy_dir值)并解压

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

  • 执行启动该节点命令并校验节点是否启动成功

提示:目前一次仅支持一个节点扩容

销毁集群命令

iotdbctl cluster destroy default_cluster
  • cluster-name 找到默认位置的 yaml 文件

  • 根据confignode_serversdatanode_serversgrafanaprometheus中node节点信息,检查是否节点还在运行,
    如果有任何一个节点正在运行则停止销毁命令

  • 删除IoTDB集群中的data以及yaml文件配置的cn_system_dircn_consensus_dir
    dn_data_dirsdn_consensus_dirdn_system_dirlogsextIoTDB部署目录、
    grafana部署目录和prometheus部署目录

销毁单个模块

# 销毁grafana模块
iotdbctl cluster destroy default_cluster -N grafana
# 销毁prometheus模块
iotdbctl cluster destroy default_cluster -N prometheus
# 销毁iotdb模块
iotdbctl cluster destroy default_cluster -N iotdb

分发集群配置命令

iotdbctl cluster distribute default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_serversgrafanaprometheus配置信息

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

热加载集群配置命令

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

  • 根据yaml文件节点配置信息依次在cli中执行load configuration

集群节点日志备份

iotdbctl cluster dumplog default_cluster -N datanode_1,confignode_1  -startdate '2023-04-11' -enddate '2023-04-26' -h 192.168.9.48 -p 36000 -u root -pw root -path '/iotdb/logs' -logs '/root/data/db/iotdb/logs'
  • 根据 cluster-name 找到默认位置的 yaml 文件

  • 该命令会根据yaml文件校验datanode_1,confignode_1 是否存在,然后根据配置的起止日期(startdate<=logtime<=enddate)备份指定节点datanode_1,confignode_1 的日志数据到指定服务192.168.9.48 端口36000 数据备份路径是 /iotdb/logs ,IoTDB日志存储路径在/root/data/db/iotdb/logs(非必填,如果不填写-logs xxx 默认从IoTDB安装路径/logs下面备份日志)

命令功能是否必填
-h存放备份数据机器ip
-u存放备份数据机器用户名
-pw存放备份数据机器密码
-p存放备份数据机器端口(默认22)
-path存放备份数据的路径(默认当前路径)
-loglevel日志基本有all、info、error、warn(默认是全部)
-l限速(默认不限速范围0到104857601 单位Kbit/s)
-N配置文件集群名称多个用逗号隔开
-startdate起始时间(包含默认1970-01-01)
-enddate截止时间(包含)
-logsIoTDB 日志存放路径,默认是({iotdb}/logs)

集群节点数据备份

iotdbctl cluster dumpdata default_cluster -granularity partition  -startdate '2023-04-11' -enddate '2023-04-26' -h 192.168.9.48 -p 36000 -u root -pw root -path '/iotdb/datas'
  • 该命令会根据yaml文件获取leader 节点,然后根据起止日期(startdate<=logtime<=enddate)备份数据到192.168.9.48 服务上的/iotdb/datas 目录下
命令功能是否必填
-h存放备份数据机器ip
-u存放备份数据机器用户名
-pw存放备份数据机器密码
-p存放备份数据机器端口(默认22)
-path存放备份数据的路径(默认当前路径)
-granularity类型partition
-l限速(默认不限速范围0到104857601 单位Kbit/s)
-startdate起始时间(包含)
-enddate截止时间(包含)

集群升级

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

  • 上传lib包

注意执行完升级后请重启IoTDB 才能生效

集群初始化

iotdbctl cluster init default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_serversgrafanaprometheus配置信息
  • 初始化集群配置

查看集群进程状态

iotdbctl cluster status default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_serversdatanode_serversgrafanaprometheus配置信息
  • 展示集群的存活状态

集群授权激活

集群激活默认是通过输入激活码激活,也可以通过-op license_path 通过license路径激活

  • 默认激活方式
iotdbctl cluster activate default_cluster
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers配置信息
  • 读取里面的机器码
  • 等待输入激活码
Machine code:
Kt8NfGP73FbM8g4Vty+V9qU5lgLvwqHEF3KbLN/SGWYCJ61eFRKtqy7RS/jw03lHXt4MwdidrZJ==
JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKgGXEGzMms25+u==
Please enter the activation code: 
JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKg=,lTF1Dur1AElXIi/5jPV9h0XCm8ziPd9/R+tMYLsze1oAPxE87+Nwws=
Activation successful
  • 激活单个节点
iotdbctl cluster activate default_cluster -N confignode1
  • 通过license路径方式激活
iotdbctl cluster activate default_cluster -op license_path 
  • 根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers配置信息
  • 读取里面的机器码
  • 等待输入激活码
Machine code:
Kt8NfGP73FbM8g4Vty+V9qU5lgLvwqHEF3KbLN/SGWYCJ61eFRKtqy7RS/jw03lHXt4MwdidrZJ==
JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKgGXEGzMms25+u==
Please enter the activation code: 
JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKg=,lTF1Dur1AElXIi/5jPV9h0XCm8ziPd9/R+tMYLsze1oAPxE87+Nwws=
Activation successful
  • 激活单个节点
iotdbctl cluster activate default_cluster -N confignode1 -op license_path

集群部署工具样例介绍

在集群部署工具安装目录中config/example 下面有3个yaml样例,如果需要可以复制到config 中进行修改即可

名称说明
default_1c1d.yaml1个confignode和1个datanode 配置样例
default_3c3d.yaml3个confignode和3个datanode 配置样例
default_3c3d_grafa_prome3个confignode和3个datanode、Grafana、Prometheus配置样例

手动部署

前置检查

  1. JDK>=1.8 的运行环境,并配置好 JAVA_HOME 环境变量。
  2. 设置最大文件打开数为 65535。
  3. 关闭交换内存。
  4. 首次启动ConfigNode节点时,确保已清空ConfigNode节点的data/confignode目录;首次启动DataNode节点时,确保已清空DataNode节点的data/datanode目录。
  5. 如果整个集群处在可信环境下,可以关闭机器上的防火墙选项。
  6. 在集群默认配置中,ConfigNode 会占用端口 10710 和 10720,DataNode 会占用端口 6667、10730、10740、10750 和 10760,
    请确保这些端口未被占用,或者手动修改配置文件中的端口配置。

安装包获取

你可以选择下载二进制文件(见 3.1)或从源代码编译(见 3.2)。

下载二进制文件

  1. 打开官网Download Pageopen in new window
  2. 下载 IoTDB 1.3.0 版本的二进制文件。
  3. 解压得到 apache-iotdb-1.3.0-all-bin 目录。

使用源码编译

下载源码

Git

git clone https://github.com/apache/iotdb.git
git checkout v1.3.0

官网下载

  1. 打开官网Download Pageopen in new window
  2. 下载 IoTDB 1.0.0 版本的源码。
  3. 解压得到 apache-iotdb-1.3.0 目录。
编译源码

在 IoTDB 源码根目录下:

mvn clean package -pl distribution -am -DskipTests

编译成功后,可在目录
distribution/target/apache-iotdb-1.3.0-SNAPSHOT-all-bin/apache-iotdb-1.3.0-SNAPSHOT-all-bin
找到集群版本的二进制文件。

安装包说明

打开 apache-iotdb-1.3.0-SNAPSHOT-all-bin,可见以下目录:

目录说明
conf配置文件目录,包含 ConfigNode、DataNode、JMX 和 logback 等配置文件
data数据文件目录,包含 ConfigNode 和 DataNode 的数据文件
lib库文件目录
licenses证书文件目录
logs日志文件目录,包含 ConfigNode 和 DataNode 的日志文件
sbin脚本目录,包含 ConfigNode 和 DataNode 的启停移除脚本,以及 Cli 的启动脚本等
tools系统工具目录

集群安装配置

集群安装

apache-iotdb-1.3.0-SNAPSHOT-all-bin 包含 ConfigNode 和 DataNode,
请将安装包部署于你目标集群的所有机器上,推荐将安装包部署于所有服务器的相同目录下。

如果你希望先在一台服务器上尝试部署 IoTDB 集群,请参考
Cluster Quick Startopen in new window

集群配置

接下来需要修改每个服务器上的配置文件,登录服务器,
并将工作路径切换至 apache-iotdb-1.3.0-SNAPSHOT-all-bin
配置文件在 ./conf 目录内。

对于所有部署 ConfigNode 的服务器,需要修改通用配置(见 5.2.1)和 ConfigNode 配置(见 5.2.2)。

对于所有部署 DataNode 的服务器,需要修改通用配置(见 5.2.1)和 DataNode 配置(见 5.2.3)。

通用配置

打开通用配置文件 ./conf/iotdb-common.properties,
可根据 部署推荐
设置以下参数:

配置项说明默认
cluster_name节点希望加入的集群的名称defaultCluster
config_node_consensus_protocol_classConfigNode 使用的共识协议org.apache.iotdb.consensus.ratis.RatisConsensus
schema_replication_factor元数据副本数,DataNode 数量不应少于此数目1
schema_region_consensus_protocol_class元数据副本组的共识协议org.apache.iotdb.consensus.ratis.RatisConsensus
data_replication_factor数据副本数,DataNode 数量不应少于此数目1
data_region_consensus_protocol_class数据副本组的共识协议。注:RatisConsensus 目前不支持多数据目录org.apache.iotdb.consensus.iot.IoTConsensus

注意:上述配置项在集群启动后即不可更改,且务必保证所有节点的通用配置完全一致,否则节点无法启动。

ConfigNode 配置

打开 ConfigNode 配置文件 ./conf/iotdb-confignode.properties,根据服务器/虚拟机的 IP 地址和可用端口,设置以下参数:

配置项说明默认用法
cn_internal_addressConfigNode 在集群内部通讯使用的地址127.0.0.1设置为服务器的 IPV4 地址或域名
cn_internal_portConfigNode 在集群内部通讯使用的端口10710设置为任意未占用端口
cn_consensus_portConfigNode 副本组共识协议通信使用的端口10720设置为任意未占用端口
cn_seed_config_node节点注册加入集群时连接的 ConfigNode 的地址。注:只能配置一个127.0.0.1:10710对于 Seed-ConfigNode,设置为自己的 cn_internal_address:cn_internal_port;对于其它 ConfigNode,设置为另一个正在运行的 ConfigNode 的 cn_internal_address:cn_internal_port

注意:上述配置项在节点启动后即不可更改,且务必保证所有端口均未被占用,否则节点无法启动。

DataNode 配置

打开 DataNode 配置文件 ./conf/iotdb-datanode.properties,根据服务器/虚拟机的 IP 地址和可用端口,设置以下参数:

配置项说明默认用法
dn_rpc_address客户端 RPC 服务的地址127.0.0.1设置为服务器的 IPV4 地址或域名
dn_rpc_port客户端 RPC 服务的端口6667设置为任意未占用端口
dn_internal_addressDataNode 在集群内部接收控制流使用的地址127.0.0.1设置为服务器的 IPV4 地址或域名
dn_internal_portDataNode 在集群内部接收控制流使用的端口10730设置为任意未占用端口
dn_mpp_data_exchange_portDataNode 在集群内部接收数据流使用的端口10740设置为任意未占用端口
dn_data_region_consensus_portDataNode 的数据副本间共识协议通信的端口10750设置为任意未占用端口
dn_schema_region_consensus_portDataNode 的元数据副本间共识协议通信的端口10760设置为任意未占用端口
dn_seed_config_node集群中正在运行的 ConfigNode 地址127.0.0.1:10710设置为任意正在运行的 ConfigNode 的 cn_internal_address:cn_internal_port,可设置多个,用逗号(",")隔开

注意:上述配置项在节点启动后即不可更改,且务必保证所有端口均未被占用,否则节点无法启动。

集群操作

启动集群

本小节描述如何启动包括若干 ConfigNode 和 DataNode 的集群。
集群可以提供服务的标准是至少启动一个 ConfigNode 且启动 不小于(数据/元数据)副本个数 的 DataNode。

总体启动流程分为三步:

  1. 启动种子 ConfigNode
  2. 增加 ConfigNode(可选)
  3. 增加 DataNode
启动 Seed-ConfigNode

集群第一个启动的节点必须是 ConfigNode,第一个启动的 ConfigNode 必须遵循本小节教程。

第一个启动的 ConfigNode 是 Seed-ConfigNode,标志着新集群的创建。
在启动 Seed-ConfigNode 前,请打开通用配置文件 ./conf/iotdb-common.properties,并检查如下参数:

配置项检查
cluster_name已设置为期望的集群名称
config_node_consensus_protocol_class已设置为期望的共识协议
schema_replication_factor已设置为期望的元数据副本数
schema_region_consensus_protocol_class已设置为期望的共识协议
data_replication_factor已设置为期望的数据副本数
data_region_consensus_protocol_class已设置为期望的共识协议

注意: 请根据部署推荐配置合适的通用参数,这些参数在首次配置后即不可修改。

接着请打开它的配置文件 ./conf/iotdb-confignode.properties,并检查如下参数:

配置项检查
cn_internal_address已设置为服务器的 IPV4 地址或域名
cn_internal_port该端口未被占用
cn_consensus_port该端口未被占用
cn_seed_config_node已设置为自己的内部通讯地址,即 cn_internal_address:cn_internal_port

检查完毕后,即可在服务器上运行启动脚本:

# Linux 前台启动
bash ./sbin/start-confignode.sh

# Linux 后台启动
nohup bash ./sbin/start-confignode.sh >/dev/null 2>&1 &

# Windows
.\sbin\start-confignode.bat

ConfigNode 的其它配置参数可参考
ConfigNode 配置参数

增加更多 ConfigNode(可选)

只要不是第一个启动的 ConfigNode 就必须遵循本小节教程。

可向集群添加更多 ConfigNode,以保证 ConfigNode 的高可用。常用的配置为额外增加两个 ConfigNode,使集群共有三个 ConfigNode。

新增的 ConfigNode 需要保证 ./conf/iotdb-common.properites 中的所有配置参数与 Seed-ConfigNode 完全一致,否则可能启动失败或产生运行时错误。
因此,请着重检查通用配置文件中的以下参数:

配置项检查
cluster_name与 Seed-ConfigNode 保持一致
config_node_consensus_protocol_class与 Seed-ConfigNode 保持一致
schema_replication_factor与 Seed-ConfigNode 保持一致
schema_region_consensus_protocol_class与 Seed-ConfigNode 保持一致
data_replication_factor与 Seed-ConfigNode 保持一致
data_region_consensus_protocol_class与 Seed-ConfigNode 保持一致

接着请打开它的配置文件 ./conf/iotdb-confignode.properties,并检查以下参数:

配置项检查
cn_internal_address已设置为服务器的 IPV4 地址或域名
cn_internal_port该端口未被占用
cn_consensus_port该端口未被占用
cn_seed_config_node已设置为另一个正在运行的 ConfigNode 的内部通讯地址,推荐使用 Seed-ConfigNode 的内部通讯地址

检查完毕后,即可在服务器上运行启动脚本:

# Linux 前台启动
bash ./sbin/start-confignode.sh

# Linux 后台启动
nohup bash ./sbin/start-confignode.sh >/dev/null 2>&1 &

# Windows
.\sbin\start-confignode.bat

ConfigNode 的其它配置参数可参考
ConfigNode 配置参数

增加 DataNode

确保集群已有正在运行的 ConfigNode 后,才能开始增加 DataNode。

可以向集群中添加任意个 DataNode。
在添加新的 DataNode 前,请先打开通用配置文件 ./conf/iotdb-common.properties 并检查以下参数:

配置项检查
cluster_name与 Seed-ConfigNode 保持一致

接着打开它的配置文件 ./conf/iotdb-datanode.properties 并检查以下参数:

配置项检查
dn_rpc_address已设置为服务器的 IPV4 地址或域名
dn_rpc_port该端口未被占用
dn_internal_address已设置为服务器的 IPV4 地址或域名
dn_internal_port该端口未被占用
dn_mpp_data_exchange_port该端口未被占用
dn_data_region_consensus_port该端口未被占用
dn_schema_region_consensus_port该端口未被占用
dn_seed_config_node已设置为正在运行的 ConfigNode 的内部通讯地址,推荐使用 Seed-ConfigNode 的内部通讯地址

检查完毕后,即可在服务器上运行启动脚本:

# Linux 前台启动
bash ./sbin/start-datanode.sh

# Linux 后台启动
nohup bash ./sbin/start-datanode.sh >/dev/null 2>&1 &

# Windows
.\sbin\start-datanode.bat

DataNode 的其它配置参数可参考
DataNode配置参数

注意:当且仅当集群拥有不少于副本个数(max{schema_replication_factor, data_replication_factor})的 DataNode 后,集群才可以提供服务

启动 Cli

若搭建的集群仅用于本地调试,可直接执行 ./sbin 目录下的 Cli 启动脚本:

# Linux
./sbin/start-cli.sh

# Windows
.\sbin\start-cli.bat

若希望通过 Cli 连接生产环境的集群,
请阅读 Cli 使用手册

验证集群

以在6台服务器上启动的3C3D(3个ConfigNode 和 3个DataNode)集群为例,
这里假设3个ConfigNode的IP地址依次为192.168.1.10、192.168.1.11、192.168.1.12,且3个ConfigNode启动时均使用了默认的端口10710与10720;
3个DataNode的IP地址依次为192.168.1.20、192.168.1.21、192.168.1.22,且3个DataNode启动时均使用了默认的端口6667、10730、10740、10750与10760。

当按照6.1步骤成功启动集群后,在 Cli 执行 show cluster details,看到的结果应当如下:

IoTDB> show cluster details
+------+----------+-------+---------------+------------+-------------------+------------+-------+-------+-------------------+-----------------+
|NodeID|  NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|  RpcAddress|RpcPort|MppPort|SchemaConsensusPort|DataConsensusPort|
+------+----------+-------+---------------+------------+-------------------+------------+-------+-------+-------------------+-----------------+
|     0|ConfigNode|Running|   192.168.1.10|       10710|              10720|            |       |       |                   |                 |
|     2|ConfigNode|Running|   192.168.1.11|       10710|              10720|            |       |       |                   |                 |
|     3|ConfigNode|Running|   192.168.1.12|       10710|              10720|            |       |       |                   |                 |
|     1|  DataNode|Running|   192.168.1.20|       10730|                   |192.168.1.20|   6667|  10740|              10750|            10760|
|     4|  DataNode|Running|   192.168.1.21|       10730|                   |192.168.1.21|   6667|  10740|              10750|            10760|
|     5|  DataNode|Running|   192.168.1.22|       10730|                   |192.168.1.22|   6667|  10740|              10750|            10760|
+------+----------+-------+---------------+------------+-------------------+------------+-------+-------+-------------------+-----------------+
Total line number = 6
It costs 0.012s

若所有节点的状态均为 Running,则说明集群部署成功;
否则,请阅读启动失败节点的运行日志,并检查对应的配置参数。

停止 IoTDB 进程

本小节描述如何手动关闭 IoTDB 的 ConfigNode 或 DataNode 进程。

使用脚本停止 ConfigNode

执行停止 ConfigNode 脚本:

# Linux
./sbin/stop-confignode.sh

# Windows
.\sbin\stop-confignode.bat
使用脚本停止 DataNode

执行停止 DataNode 脚本:

# Linux
./sbin/stop-datanode.sh

# Windows
.\sbin\stop-datanode.bat
停止节点进程

首先获取节点的进程号:

jps

# 或

ps aux | grep iotdb

结束进程:

kill -9 <pid>

注意:有些端口的信息需要 root 权限才能获取,在此情况下请使用 sudo

集群缩容

本小节描述如何将 ConfigNode 或 DataNode 移出集群。

移除 ConfigNode

在移除 ConfigNode 前,请确保移除后集群至少还有一个活跃的 ConfigNode。
在活跃的 ConfigNode 上执行 remove-confignode 脚本:

# Linux
## 根据 confignode_id 移除节点
./sbin/remove-confignode.sh <confignode_id>

## 根据 ConfigNode 内部通讯地址和端口移除节点
./sbin/remove-confignode.sh <cn_internal_address>:<cn_internal_port>


# Windows
## 根据 confignode_id 移除节点
.\sbin\remove-confignode.bat <confignode_id>

## 根据 ConfigNode 内部通讯地址和端口移除节点
.\sbin\remove-confignode.bat <cn_internal_address>:<cn_internal_port>
移除 DataNode

在移除 DataNode 前,请确保移除后集群至少还有不少于(数据/元数据)副本个数的 DataNode。
在活跃的 DataNode 上执行 remove-datanode 脚本:

# Linux
## 根据 datanode_id 移除节点
./sbin/remove-datanode.sh <datanode_id>

## 根据 DataNode RPC 服务地址和端口移除节点
./sbin/remove-datanode.sh <dn_rpc_address>:<dn_rpc_port>


# Windows
## 根据 datanode_id 移除节点
.\sbin\remove-datanode.bat <datanode_id>

## 根据 DataNode RPC 服务地址和端口移除节点
.\sbin\remove-datanode.bat <dn_rpc_address>:<dn_rpc_port>

常见问题

请参考 分布式部署FAQ

AINode 部署

安装环境

建议操作系统

Ubuntu, CentOS, MacOS

运行环境

AINode目前要求系统3.8以上的Python,且带有pip和venv工具

如果是联网的情况,AINode会创建虚拟环境并自动下载运行时的依赖包,不需要额外配置。

如果是非联网的环境,可以从 https://cloud.tsinghua.edu.cn/d/4c1342f6c272439aa96c/open in new window 中获取安装所需要的依赖包并离线安装。

安装步骤

用户可以下载AINode的软件安装包,下载并解压后即完成AINode的安装。也可以从代码仓库中下载源码并编译来获取安装包。

软件目录结构

下载软件安装包并解压后,可以得到如下的目录结构

|-- apache-iotdb-AINode-bin
    |-- lib # 打包的二进制可执行文件,包含环境依赖
    |-- conf # 存放配置文件
        - iotdb-AINode.properties
    |-- sbin # AINode相关启动脚本
        - start-AINode.sh
        - start-AINode.bat
        - stop-AINode.sh
        - stop-AINode.bat
        - remove-AINode.sh
        - remove-AINode.bat
    |-- licenses
    - LICENSE
    - NOTICE
    - README.md
    - README_ZH.md
    - RELEASE_NOTES.md
  • **lib:**AINode编译后的二进制可执行文件以及相关的代码依赖
  • **conf:**包含AINode的配置项,具体包含以下配置项
  • **sbin:**AINode的运行脚本,可以启动,移除和停止AINode

启动AINode

在完成Seed-ConfigNode的部署后,可以通过添加AINode节点来支持模型的注册和推理功能。在配置项中指定IoTDB集群的信息后,可以执行相应的指令来启动AINode,加入IoTDB集群。

注意:启动AINode需要系统环境中含有3.8及以上的Python解释器作为默认解释器,用户在使用前请检查环境变量中是否存在Python解释器且可以通过python指令直接调用。

直接启动

在获得安装包的文件后,用户可以直接进行AINode的初次启动。

在Linux和MacOS上的启动指令如下:

> bash sbin/start-AINode.sh

在windows上的启动指令如下:

> sbin\start-AINode.bat

如果首次启动AINode且没有指定解释器路径,那么脚本将在程序根目录使用系统Python解释器新建venv虚拟环境,并在这个环境中自动先后安装AINode的第三方依赖和AINode主程序。这个过程将产生大小约为1GB的虚拟环境,请预留好安装的空间。在后续启动时,如果未指定解释器路径,脚本将自动寻找上面新建的venv环境并启动AINode,无需重复安装程序和依赖。

注意,如果希望在某次启动时强制重新安装AINode本体,可以通过-r激活reinstall,该参数会根据lib下的文件重新安装AINode。

Linux和MacOS:

> bash sbin/start-AINode.sh -r

Windows:

> sbin\start-AINode.bat -r

例如,用户在lib中更换了更新版本的AINode安装包,但该安装包并不会安装到用户的常用环境中。此时用户即需要在启动时添加-r选项来指示脚本强制重新安装虚拟环境中的AINode主程序,实现版本的更新

指定自定义虚拟环境

在启动AINode时,可以通过指定一个虚拟环境解释器路径来将AINode主程序及其依赖安装到特定的位置。具体需要指定参数ain_interpreter_dir的值。

Linux和MacOS:

> bash sbin/start-AINode.sh -i xxx/bin/python

Windows:

> sbin\start-AINode.bat -i xxx\Scripts\python.exe

在指定Python解释器的时候请输入虚拟环境中Python解释器的可执行文件的地址。目前AINode支持venv、conda等虚拟环境不支持输入系统Python解释器作为安装位置。为了保证脚本能够正常识别,请尽可能使用绝对路径

加入集群

AINode启动过程中会自动将新的AINode加入IoTDB集群。启动AINode后可以通过在IoTDB的cli命令行中输入集群查询的SQL来验证节点是否加入成功。

IoTDB> show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID|  NodeType| Status|InternalAddress|InternalPort|Version|  BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
|     0|ConfigNode|Running|      127.0.0.1|       10710|UNKNOWN|190e303-dev|
|     1|  DataNode|Running|      127.0.0.1|       10730|UNKNOWN|190e303-dev|
|     2|    AINode|Running|      127.0.0.1|       10810|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+

IoTDB> show cluster details
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+
|NodeID|  NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|RpcAddress|RpcPort|MppPort|SchemaConsensusPort|DataConsensusPort|Version|  BuildInfo|
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+
|     0|ConfigNode|Running|      127.0.0.1|       10710|              10720|          |       |       |                   |                 |UNKNOWN|190e303-dev|
|     1|  DataNode|Running|      127.0.0.1|       10730|                   |   0.0.0.0|   6667|  10740|              10750|            10760|UNKNOWN|190e303-dev|
|     2|    AINode|Running|      127.0.0.1|       10810|                   |   0.0.0.0|  10810|       |                   |                 |UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+

IoTDB> show AINodes
+------+-------+----------+-------+
|NodeID| Status|RpcAddress|RpcPort|
+------+-------+----------+-------+
|     2|Running| 127.0.0.1|  10810|
+------+-------+----------+-------+

移除AINode

当需要把一个已经连接的AINode移出集群时,可以执行对应的移除脚本。

在Linux和MacOS上的指令如下:

> bash sbin/remove-AINode.sh

在windows上的启动指令如下:

> sbin\remove-AINode.bat

移除节点后,将无法查询到节点的相关信息。

IoTDB> show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID|  NodeType| Status|InternalAddress|InternalPort|Version|  BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
|     0|ConfigNode|Running|      127.0.0.1|       10710|UNKNOWN|190e303-dev|
|     1|  DataNode|Running|      127.0.0.1|       10730|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+

另外,如果之前自定义了AINode安装的位置,那么在调用remove脚本的时候也需要附带相应的路径作为参数:

Linux和MacOS:

> bash sbin/remove-AINode.sh -i xxx/bin/python

Windows:

> sbin\remove-AINode.bat -i 1 xxx\Scripts\python.exe

类似地,在env脚本中持久化修改的脚本参数同样会在执行移除的时候生效。

如果用户丢失了data文件夹下的文件,可能AINode本地无法主动移除自己,需要用户指定节点号、地址和端口号进行移除,此时我们支持用户按照以下方法输入参数进行删除

Linux和MacOS:

> bash sbin/remove-AINode.sh -t <AINode-id>/<ip>:<rpc-port>

Windows:

> sbin\remove-AINode.bat -t <AINode-id>/<ip>:<rpc-port>

停止AINode

如果需要停止正在运行的AINode节点,则执行相应的关闭脚本。

在Linux和MacOS上的指令如下:

> bash sbin/stop-AINode.sh

在windows上的启动指令如下:

> sbin\stop-AINode.bat

此时无法获取节点的具体状态,也就无法使用对应的管理和推理功能。如果需要重新启动该节点,再次执行启动脚本即可。

IoTDB> show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID|  NodeType| Status|InternalAddress|InternalPort|Version|  BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
|     0|ConfigNode|Running|      127.0.0.1|       10710|UNKNOWN|190e303-dev|
|     1|  DataNode|Running|      127.0.0.1|       10730|UNKNOWN|190e303-dev|
|     2|    AINode|UNKNOWN|      127.0.0.1|       10790|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+

脚本参数详情

AINode启动过程中支持两种参数,其具体的作用如下图所示:

名称作用脚本标签描述类型默认值输入方式
ain_interpreter_dirstart remove env-iAINode所安装在的虚拟环境的解释器路径,需要使用绝对路径String默认读取环境变量调用时输入+持久化修改
ain_remove_targetremove stop-tAINode关闭时可以指定待移除的目标AINode的Node ID、地址和端口号,格式为<AINode-id>/<ip>:<rpc-port>String调用时输入
ain_force_reinstallstart remove env-r该脚本在检查AINode安装情况的时候是否检查版本,如果检查则在版本不对的情况下会强制安装lib里的whl安装包Boolfalse调用时输入
ain_no_dependenciesstart remove env-n指定在安装AINode的时候是否安装依赖,如果指定则仅安装AINode主程序而不安装依赖。Boolfalse调用时输入

除了按照上文所述的方法在执行脚本时传入上述参数外,也可以在conf文件夹下的AINode-env.shAINode-env.bat脚本中持久化地修改部分参数。

AINode-env.sh

# The defaulte venv environment is used if ain_interpreter_dir is not set. Please use absolute path without quotation mark
# ain_interpreter_dir=

AINode-env.bat

@REM The defaulte venv environment is used if ain_interpreter_dir is not set. Please use absolute path without quotation mark
@REM set ain_interpreter_dir=

在写入参数值的后解除对应行的注释并保存即可在下一次执行脚本时生效。

AINode配置项

AINode支持修改一些必要的参数。可以在conf/iotdb-AINode.properties文件中找到下列参数并进行持久化的修改:

名称描述类型默认值改后生效方式
ain_target_config_node_listAINode启动时注册的ConfigNode地址String10710仅允许在第一次启动服务前修改
ain_inference_rpc_addressAINode提供服务与通信的地址String127.0.0.1重启后生效
ain_inference_rpc_portAINode提供服务与通信的端口String10810重启后生效
ain_system_dirAINode元数据存储路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。Stringdata/AINode/system重启后生效
ain_models_dirAINode存储模型文件的路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。Stringdata/AINode/models重启后生效
ain_logs_dirAINode存储日志的路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。Stringlogs/AINode重启后生效

常见问题解答

  1. 启动AINode时出现找不到venv模块的报错

当使用默认方式启动AINode时,会在安装包目录下创建一个python虚拟环境并安装依赖,因此要求安装venv模块。通常来说python3.8及以上的版本会自带venv,但对于一些系统自带的python环境可能并不满足这一要求。出现该报错时有两种解决方案(二选一):

  • 在本地安装venv模块,以ubuntu为例,可以通过运行以下命令来安装python自带的venv模块。或者从python官网安装一个自带venv的python版本
apt-get install python3.8-venv 
  • 在运行启动脚本时通过-i指定已有的python解释器路径作为AINode的运行环境,这样就不再需要创建一个新的虚拟环境。
  1. 在CentOS7中编译python环境

在centos7的新环境中(自带python3.6)不满足启动mlnode的要求,需要自行编译python3.8+(python在centos7中未提供二进制包)

  • 安装OpenSSL

Currently Python versions 3.6 to 3.9 are compatible with OpenSSL 1.0.2, 1.1.0, and 1.1.1.

Python要求我们的系统上安装有OpenSSL,具体安装方法可见https://stackoverflow.com/questions/56552390/how-to-fix-ssl-module-in-python-is-not-available-in-centosopen in new window

  • 安装编译python

使用以下指定从官网下载安装包并解压

wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar -zxvf Python-3.8.1.tgz

编译安装对应的python包

./configure prefix=/usr/local/python3 -with-openssl=/usr/local/openssl 
make && make install
  1. windows下出现类似“error:Microsoft Visual C++ 14.0 or greater is required...”的编译问题

出现对应的报错,通常是c++版本或是setuptools版本不足,可以在https://stackoverflow.com/questions/44951456/pip-error-microsoft-visual-c-14-0-is-required中查找适合的解决方案。open in new window

Copyright © 2024 The Apache Software Foundation.
Apache and the Apache feather logo are trademarks of The Apache Software Foundation

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

We use Google Analytics to collect anonymous, aggregated usage information.