跳至主要內容

部署指导

大约 24 分钟

部署指导

IoTDB 提供单机版、集群版和双活版共 3 种部署形态。本章节将详细介绍每一种部署形态的具体部署步骤。

预备知识

在开始部署前,您需要充分了解下面的预备知识。

安装包结构

首先,需要获取安装包,名字为 apache-iotdb-{version}-all-bin 的安装包包含 ConfigNode 和 DataNode 的可执行程序,请将安装包部署于目标集群的所有机器上,推荐将安装包部署于所有服务器的相同目录下。

之后,需要对 IoTDB 安装包的结构有了解。IoTDB 安装包目录结构如下:

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

配置文件

必要情况下,您需要根据业务需求,修改每个服务器上的配置文件。登录服务器,并将工作路径切换至 apache-iotdb-{version}-all-bin,配置文件在 ./conf 目录内。

  • 对于所有部署 ConfigNode 的服务器,需要修改 通用配置ConfigNode 配置
  • 对于所有部署 DataNode 的服务器,需要修改 通用配置DataNode 配置

通用配置

打开通用配置文件 ./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_target_config_node_list节点注册加入集群时连接的 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_target_config_node_list集群中正在运行的 ConfigNode 地址127.0.0.1:10710设置为任意正在运行的 ConfigNode 的 cn_internal_address:cn_internal_port,可设置多个,用逗号(",")隔开

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

环境检查

最后,在正式部署前,还需要对下列项目进行检查:

  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,请确保这些端口未被占用,或者手动修改配置文件中的端口配置。

FAQ

在部署集群过程中有任何问题,请参考 分布式部署FAQ

单机版部署

本小节描述如何启动包括 1 个 ConfigNode 和 1 个 DataNode 的实例。

启动流程

在完成配置文件的修改后(一般仅需要修改 IP 等信息) ,用户可以使用 sbin 文件夹下的 start-standalone 脚本启动 IoTDB。

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

> bash sbin/start-standalone.sh

Windows 系统启动命令如下:

> sbin\start-standalone.bat

注意:目前,要使用单机模式,你需要保证所有的地址设置为 127.0.0.1,如果需要从非 IoTDB 所在的机器访问此IoTDB,请将配置项 dn_rpc_address 修改为 IoTDB 所在的机器 IP。

验证部署

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

# Linux
./sbin/start-cli.sh

# Windows
.\sbin\start-cli.bat

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

成功启动集群后,在 Cli 执行 show cluster details

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

停止流程

Linux 系统与 MacOS 系统停止命令如下:

> bash sbin/stop-standalone.sh

Windows 系统停止命令如下:

> sbin\stop-standalone.bat

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

IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。

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

环境准备

本工具为 IoTDB 企业版配套工具,您可以联系您的销售获取工具下载方式。

注意:

  • 需要依赖 jdk 8 及以上版本、lsof 或者 netstat、unzip 功能
  • 由于二进制包仅支持 GLIBC2.17 及以上版本,因此最低适配 Centos7 版本
  • 集群管理工具需要使用具有 root 权限的账号

在 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_target_config_node_list集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globalconfignode_servers同时配置值时优先使用confignode_servers中的值,对应iotdb/config/iotdb-confignode.properties中的cn_target_config_node_list必填
dn_target_config_node_list集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globaldatanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_target_config_node_list必填
  • 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_target_config_node_list集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globalconfignode_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.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_target_config_node_list集群配置地址指向存活的ConfigNode,默认指向confignode_x,在globaldatanode_servers同时配置值时优先使用datanode_servers中的值,对应iotdb/config/iotdb-datanode.properties中的dn_target_config_node_list必填
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
  • 停止该节点

集群版部署(手工部署)

启动流程

本小节描述如何启动包括若干 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_target_config_node_list已设置为自己的内部通讯地址,即 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_target_config_node_list已设置为另一个正在运行的 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_target_config_node_list已设置为正在运行的 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 后,集群才可以提供服务

验证部署

若搭建的集群仅用于本地调试,可直接执行 ./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。

成功启动集群后,在 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 的 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>

双活版部署

IoTDB 的双活集群指的是两个独立的集群,它们的配置完全独立,可以同时接收外界的写入,每一个独立的集群都可以将写入到自己数据同步到另一个集群中,
两个集群的数据可达到最终一致。

两个集群可构成一个高可用组:当其中一个集群停止服务时,另一个集群不会受到影响。当停止服务的集群再次启动时,另一个集群会将新写入的数据同步过来。
业务可以绑定两个集群进行读写,从而达到高可用的目的。

双活集群的部署方案允许在物理节点少于 3 的情况下实现高可用,在部署成本上具备一定优势。

启动流程

IoTDB 双活集群的启动步骤如下:

  1. 启动集群 A 和集群 B。集群 A 和集群 B 可以是单机部署模式,也可以是分布式部署模式。具体的部署方式见上文。

  2. 使用 sbin/cli 工具,分别连接上两个集群,为两个集群创建并启动 Pipe,SQL 如下:

    a.集群A:

    create pipe atob 
    with extractor (
        'extractor'='iotdb-extractor', 
        'extractor.forwarding-pipe-requests'='false'
    ) 
    with connector (
        'connector'='iotdb-thrift-connector',
        'connector.node-urls'='<B集群地址>'
    );
    
    start pipe atob;
    

    b.集群B:

    create pipe btoa 
    with extractor (
        'extractor'='iotdb-extractor', 
        'extractor.forwarding-pipe-requests'='false'
    ) 
    with connector (
        'connector'='iotdb-thrift-connector',
        'connector.node-urls'='<A集群地址>'
    );
    
    start pipe btoa;
    

即可成功启动双活集群。

推荐 A、B 集群的各项配置保持一致,以实现最佳的双活效果。

验证部署

在 A、B 集群的 cli 工具中执行下列两个检查语句:

  1. 检查集群运行状态

    show cluster details
    

    确保每一个 ConfigNode 和 DataNode 都处于 Running 状态。

  2. 检查数据同步状态

    show pipes
    

    确保每一个 Pipe 都处于 RUNNING 状态。

停止流程

如果想要解除两个集群的双活绑定关系,那么:

  1. 在 A 集群的 cli 工具中执行下列命令:
    stop pipe atob;
    
  2. 在 B 集群的 cli 工具中执行下列命令:
    stop pipe btoa;
    
  • 如果单纯想要停止两个集群,那么,只需要按照上文 “集群版部署” 或 “单机版部署” 中的 “停止流程” 分别对 A、B 集群进行操作即可。

Copyright © 2023 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.