IoTDB 集群管理工具旨在解决分布式系统部署时操作繁琐、容易出错的问题, 主要包括预检查、部署、启停、清理、销毁、配置更新、以及弹性扩缩容等功能。 用户可通过一行命令实现集群一键部署和维护管理,极大地降低管理难度。
IoTDB 集群管理工具需要 python3.8 及以上版本,IoTDB 要部署的机器需要依赖jdk 8及以上版本、lsof 或者 netstat、unzip功能如果没有请自行安装,可以参考文档最后的一节环境所需安装命令。
bash build.sh
即可在之后的 shell 内激活 iotd 关键词,并安装所需的 whl 包。
alias "iotd=python3 <main.py's absolute path>"
iotd/config 目录下有集群配置的yaml文件,yaml文件名字就是集群名字yaml 文件可以有多个,为了方便用户配置yaml文件在iotd/config目录下面提供了default_cluster.yaml示例。global、confignode_servers、datanode_servers、grafana_servers(功能待开发)四大部分组成iotd/config目录中提供了一个default_cluster.yaml样例数据, 用户可以复制修改成自己集群名字并参考里面的说明进行配置iotdb集群,在default_cluster.yaml样例中没有注释的均为必填项,已经注释的为非必填项。例如要执行default_cluster.yaml检查命令则需要执行命令iotd cluster check default_cluster即可, 更多详细命令请参考下面命令列表。
| 参数 | 说明 | 是否必填 |
|---|---|---|
| iotdb_zip_dir | IoTDB 部署分发目录,如果值为空则从iotdb_download_url指定地址下载 | 非必填 |
| iotdb_download_url | IoTDB 下载地址,如果iotdb_zip_dir 没有值则从指定地址下载 | 非必填 |
| jdk_tar_dir | jdk 本地目录,可使用该 jdk 路径进行上传部署至目标节点。 | 非必填 |
| jdk_deploy_dir | jdk 远程机器部署目录,会将 jdk 部署到目标节点该文件夹下最终部署完成的路径是<jdk_deploy_dir>/jdk_iotdb | 非必填 |
| user | ssh登陆部署机器的用户名 | 必填 |
| password | ssh登录的密码, 如果password未指定使用pkey登陆, 请确保已配置节点之间ssh登录免密钥 | 非必填 |
| pkey | 密钥登陆如果password 有值优先使用password否则使用pkey登陆 | 非必填 |
| ssh_port | ssh登录端口 | 必填 |
| deploy_dir | iotdb 部署目录,会把 iotdb 部署到目标节点该文件夹下最终部署完成的路径是<deploy_dir>/iotdb | 必填 |
| datanode-env.sh | 对应iotdb/config/datanode-env.sh | 非必填 |
| confignode-env.sh | 对应iotdb/config/confignode-env.sh | 非必填 |
| iotdb-common.properties | 对应iotdb/config/iotdb-common.properties | 非必填 |
| cn_target_config_node_list | 集群配置地址指向存活的ConfigNode,默认指向confignode_x,在global与confignode_servers同时配置值时优先使用confignode_servers中的值,对应iotdb/config/iotdb-confignode.properties中的cn_target_config_node_list | 必填 |
| dn_target_config_node_list | 集群配置地址指向存活的ConfigNode,默认指向confignode_x,在global与datanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_target_config_node_list | 必填 |
| 参数 | 说明 | 是否必填 |
|---|---|---|
| name | Confignode 名称 | 必填 |
| deploy_dir | IoTDB 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_target_config_node_list | 集群配置地址指向存活的ConfigNode,默认指向confignode_x,在global与confignode_servers同时配置值时优先使用confignode_servers中的值,对应iotdb/config/iotdb-confignode.properties中的cn_target_config_node_list | 必填 |
| 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.properties在global与confignode_servers同时配置值优先使用confignode_servers中的值 | 非必填 |
| 参数 | 说明 | 是否必填 |
|---|---|---|
| name | Datanode 名称 | 必填 |
| deploy_dir | IoTDB data node 部署目录,注:该目录不能与下面的IoTDB config node部署目录相同 | 必填 |
| iotdb-datanode.properties | 对应iotdb/config/iotdb-datanode.properties更加详细请参看iotdb-datanode.properties文件说明 | 非必填 |
| dn_rpc_address | datanode rpc 地址对应iotdb/config/iotdb-datanode.properties中的dn_rpc_address | 必填 |
| dn_internal_address | 内部通信地址,对应iotdb/config/iotdb-datanode.properties中的dn_internal_address | 必填 |
| dn_target_config_node_list | 集群配置地址指向存活的ConfigNode,默认指向confignode_x,在global与datanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_target_config_node_list | 必填 |
| dn_rpc_port | datanode 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.properties在global与datanode_servers同时配置值优先使用datanode_servers中的值 | 非必填 |
本工具的基本用法为:
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 | 启动集群 | 集群名称,节点名称(可选) |
| stop | 关闭集群 | 集群名称,节点名称(可选) |
| restart | 重启集群 | 集群名称 |
| show | 查看集群信息,details字段表示展示集群信息细节 | 集群名称, details(可选) |
| destroy | 销毁集群 | 集群名称 |
| scaleout | 集群扩容 | 集群名称 |
| scalein | 集群缩容 | 集群名称,-N,集群节点名字或集群节点ip+port |
| reload | 集群热加载 | 集群名称 |
| distribute | 集群配置文件分发 | 集群名称 |
| run | 一键执行集群检查、部署、启动 | 集群名称 |
下面的命令都是以default_cluster.yaml 为示例执行的,用户可以修改成自己的集群文件来执行
iotd cluster check default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_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_servers和datanode_servers配置信息
根据confignode_servers 和datanode_servers中的节点信息上传iotdb压缩包和jdk压缩包(如果yaml中配置jdk_tar_dir和jdk_deploy_dir值)
根据yaml文件节点配置信息生成并上传iotdb-common.properties、iotdb-confignode.properties、iotdb-datanode.properties
提示:这里的confignode 和datanode部署到同一台机器上时目录不能为相同,否则会被后部署的节点文件覆盖
iotd cluster check default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_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 datanode_1
or
iotd cluster start default_cluster 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_servers和datanode_servers配置信息
依次在datanode通过cli执行show cluster details 如果有一个节点执行成功则不会在后续节点继续执行cli直接返回结果
iotd cluster stop default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
根据datanode_servers中datanode节点信息,按照配置先后顺序依次停止datanode节点
根据confignode_servers中confignode节点信息,按照配置依次停止confignode节点
停止单个节点命令
iotd cluster stop default_cluster datanode_1
or
iotd cluster stop default_cluster 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 clean default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
根据confignode_servers和datanode_servers中node节点信息,检查是否节点还在运行, 如果有任何一个节点正在运行则不会执行清理命令
根据confignode_servers和datanode_servers中node配置节点信息依次清理数据(数据目录)
iotd cluster restart default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
执行上述的停止集群命令(stop),然后执行启动集群命令(start) 具体参考上面的start 和stop 命令
iotd cluster scalein default_cluster -N ip:port
iotd cluster scalein default_cluster -N clustername
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
判断要缩容的confignode节点和datanode是否只剩一个,如果只剩一个则不能执行缩容
然后根据ip:port或者clustername 获取要缩容的节点信息,执行缩容命令,然后销毁该节点目录,如果缩容的节点是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 scaleout default_cluster <绝对路径/iotdb.zip>
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
找到要扩容的节点,执行上传iotdb压缩包和jdb包(如果yaml中配置jdk_tar_dir和jdk_deploy_dir值)并解压
根据yaml文件节点配置信息生成并上传iotdb-common.properties、iotdb-confignode.properties或iotdb-datanode.properties
执行启动该节点命令并校验节点是否启动成功
iotd cluster destroy default_cluster
cluster-name 找到默认位置的 yaml 文件
根据confignode_servers和datanode_servers中node节点信息,检查是否节点还在运行, 如果有任何一个节点正在运行则停止销毁命令
根据confignode_servers和datanode_servers中node配置节点信息依次清理数据(⽇志⽬录,数据⽬录、iotdb部署的目录)
iotd cluster distribute default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
根据yaml文件节点配置信息生成并依次上传iotdb-common.properties、iotdb-confignode.properties、iotdb-datanode.properties到指定节点
iotd cluster reload default_cluster
根据 cluster-name 找到默认位置的 yaml 文件,获取confignode_servers和datanode_servers配置信息
根据yaml文件节点配置信息依次在cli中执行load configuration
iotd cluster run default_cluster
IoTDB集群管理工具主要由cluster、config、logs、tools、doc、bin目录组成。
cluster和tools存放部署工具执行代码。
config存放要部署的集群配置文件如果要使用集群部署工具需要修改里面的yaml文件。
logs 存放部署工具日志,如果想要查看部署工具执行日志请查看logs/iotd.log。
bin 存放集群部署工具所需的二进制安装包,包括jdk、python和wheel。
doc 存放用户手册、开发手册和推荐部署手册。
iotdb自身需要 linux 的 lsof 和 netstat 命令,所以需要预先安装
Ubuntu: apt-get install lsof net-tools
Centos: yum install lsof net-tools
iotd则需要unzip来解压iotdb的压缩包
Ubuntu: apt-get install unzip
Centos: yum install unzip
Ubuntu20+的操作系统原生带有python3.7+,但是需要apt-get install python-pip,centos7+的操作系统只有python2,
Ubuntu: apt-get install python3-pip
Centos: 在同操作系统机器上进行编译之后拷贝,或者使用anaconda(700MB,解压之后4G)