| import{_ as r,r as i,o as l,c,b as d,d as e,a as t,w as n,e as s}from"./app-Clew-Ipc.js";const p={},u=s(`<h1 id="集群版部署" tabindex="-1"><a class="header-anchor" href="#集群版部署"><span>集群版部署</span></a></h1><h2 id="集群版部署-使用集群管理工具" tabindex="-1"><a class="header-anchor" href="#集群版部署-使用集群管理工具"><span>集群版部署(使用集群管理工具)</span></a></h2><p>IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。旨在解决 IoTDB 分布式系统多节点的运维难题,主要包括集群部署、集群启停、弹性扩容、配置更新、数据导出等功能,从而实现对复杂数据库集群的一键式指令下发,<br> 极大降低管理难度。本文档将说明如何用集群管理工具远程部署、配置、启动和停止 IoTDB 集群实例。</p><h3 id="环境准备" tabindex="-1"><a class="header-anchor" href="#环境准备"><span>环境准备</span></a></h3><p>本工具为 TimechoDB(基于IoTDB的企业版数据库)配套工具,您可以联系您的销售获取工具下载方式。</p><p>IoTDB 要部署的机器需要依赖jdk 8及以上版本、lsof、netstat、unzip功能如果没有请自行安装,可以参考文档最后的一节环境所需安装命令。</p><p>提示:IoTDB集群管理工具需要使用有root权限的账号</p><h3 id="部署方法" tabindex="-1"><a class="header-anchor" href="#部署方法"><span>部署方法</span></a></h3><h4 id="下载安装" tabindex="-1"><a class="header-anchor" href="#下载安装"><span>下载安装</span></a></h4><p>本工具为TimechoDB(基于IoTDB的企业版数据库)配套工具,您可以联系您的销售获取工具下载方式。</p><p>注意:由于二进制包仅支持GLIBC2.17 及以上版本,因此最低适配Centos7版本</p><ul><li>在iotdbctl目录内输入以下指令后:</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token function">bash</span> install-iotdbctl.sh |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>即可在之后的 shell 内激活 iotdbctl 关键词,如检查部署前所需的环境指令如下所示:</p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster check example |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>也可以不激活iotd直接使用 <iotdbctl absolute path>/sbin/iotdbctl 来执行命令,如检查部署前所需的环境:</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token operator"><</span>iotdbctl absolute path<span class="token operator">></span>/sbin/iotdbctl cluster check example |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="系统结构" tabindex="-1"><a class="header-anchor" href="#系统结构"><span>系统结构</span></a></h3><p>IoTDB集群管理工具主要由config、logs、doc、sbin目录组成。</p><ul><li><p><code>config</code>存放要部署的集群配置文件如果要使用集群部署工具需要修改里面的yaml文件。</p></li><li><p><code>logs</code> 存放部署工具日志,如果想要查看部署工具执行日志请查看<code>logs/iotd_yyyy_mm_dd.log</code>。</p></li><li><p><code>sbin</code> 存放集群部署工具所需的二进制包。</p></li><li><p><code>doc</code> 存放用户手册、开发手册和推荐部署手册。</p></li></ul><h3 id="集群配置文件介绍" tabindex="-1"><a class="header-anchor" href="#集群配置文件介绍"><span>集群配置文件介绍</span></a></h3><ul><li>在<code>iotdbctl/config</code> 目录下有集群配置的yaml文件,yaml文件名字就是集群名字yaml 文件可以有多个,为了方便用户配置yaml文件在iotd/config目录下面提供了<code>default_cluster.yaml</code>示例。</li><li>yaml 文件配置由<code>global</code>、<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana_server</code>、<code>prometheus_server</code>四大部分组成</li><li>global 是通用配置主要配置机器用户名密码、IoTDB本地安装文件、Jdk配置等。在<code>iotdbctl/config</code>目录中提供了一个<code>default_cluster.yaml</code>样例数据,<br> 用户可以复制修改成自己集群名字并参考里面的说明进行配置IoTDB集群,在<code>default_cluster.yaml</code>样例中没有注释的均为必填项,已经注释的为非必填项。</li></ul><p>例如要执行<code>default_cluster.yaml</code>检查命令则需要执行命令<code>iotdbctl cluster check default_cluster</code>即可,<br> 更多详细命令请参考下面命令列表。</p><table><thead><tr><th>参数</th><th>说明</th><th>是否必填</th></tr></thead><tbody><tr><td><code>iotdb_zip_dir</code></td><td>IoTDB 部署分发目录,如果值为空则从<code>iotdb_download_url</code>指定地址下载</td><td>非必填</td></tr><tr><td><code>iotdb_download_url</code></td><td>IoTDB 下载地址,如果<code>iotdb_zip_dir</code> 没有值则从指定地址下载</td><td>非必填</td></tr><tr><td><code>jdk_tar_dir</code></td><td>jdk 本地目录,可使用该 jdk 路径进行上传部署至目标节点。</td><td>非必填</td></tr><tr><td><code>jdk_deploy_dir</code></td><td>jdk 远程机器部署目录,会将 jdk 部署到该目录下面,与下面的<code>jdk_dir_name</code>参数构成完整的jdk部署目录即 <code><jdk_deploy_dir>/<jdk_dir_name></code></td><td>非必填</td></tr><tr><td><code>jdk_dir_name</code></td><td>jdk 解压后的目录名称默认是jdk_iotdb</td><td>非必填</td></tr><tr><td><code>iotdb_lib_dir</code></td><td>IoTDB lib 目录或者IoTDB 的lib 压缩包仅支持.zip格式 ,仅用于IoTDB升级,默认处于注释状态,如需升级请打开注释修改路径即可。如果使用zip文件请使用zip 命令压缩iotdb/lib目录例如 zip -r lib.zip apache-iotdb-1.2.0/lib/*</td><td>非必填</td></tr><tr><td><code>user</code></td><td>ssh登陆部署机器的用户名</td><td>必填</td></tr><tr><td><code>password</code></td><td>ssh登录的密码, 如果password未指定使用pkey登陆, 请确保已配置节点之间ssh登录免密钥</td><td>非必填</td></tr><tr><td><code>pkey</code></td><td>密钥登陆如果password有值优先使用password否则使用pkey登陆</td><td>非必填</td></tr><tr><td><code>ssh_port</code></td><td>ssh登录端口</td><td>必填</td></tr><tr><td><code>deploy_dir</code></td><td>IoTDB 部署目录,会把 IoTDB 部署到该目录下面与下面的<code>iotdb_dir_name</code>参数构成完整的IoTDB 部署目录即 <code><deploy_dir>/<iotdb_dir_name></code></td><td>必填</td></tr><tr><td><code>iotdb_dir_name</code></td><td>IoTDB 解压后的目录名称默认是iotdb</td><td>非必填</td></tr><tr><td><code>datanode-env.sh</code></td><td>对应<code>iotdb/config/datanode-env.sh</code> ,在<code>global</code>与<code>confignode_servers</code>同时配置值时优先使用<code>confignode_servers</code>中的值</td><td>非必填</td></tr><tr><td><code>confignode-env.sh</code></td><td>对应<code>iotdb/config/confignode-env.sh</code>,在<code>global</code>与<code>datanode_servers</code>同时配置值时优先使用<code>datanode_servers</code>中的值</td><td>非必填</td></tr><tr><td><code>iotdb-common.properties</code></td><td>对应<code>iotdb/config/iotdb-common.properties</code></td><td>非必填</td></tr><tr><td><code>cn_seed_config_node</code></td><td>集群配置地址指向存活的ConfigNode,默认指向confignode_x,在<code>global</code>与<code>confignode_servers</code>同时配置值时优先使用<code>confignode_servers</code>中的值,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_seed_config_node</code></td><td>必填</td></tr><tr><td><code>dn_seed_config_node</code></td><td>集群配置地址指向存活的ConfigNode,默认指向confignode_x,在<code>global</code>与<code>datanode_servers</code>同时配置值时优先使用<code>datanode_servers</code>中的值,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_seed_config_node</code></td><td>必填</td></tr></tbody></table><p>其中 <code>datanode-env.sh</code> 和 <code>confignode-env.sh</code> 可以配置额外参数<code>extra_opts</code>,当该参数配置后会在<code>datanode-env.sh</code> 和<code>confignode-env.sh</code> 后面追加对应的值,可参考<code>default_cluster.yaml</code>,配置示例如下:</p><div class="language-yaml line-numbers-mode" data-ext="yml" data-title="yml"><pre class="language-yaml"><code><span class="token key atrule">datanode-env.sh</span><span class="token punctuation">:</span> |
| <span class="token key atrule">extra_opts</span><span class="token punctuation">:</span> <span class="token punctuation">|</span><span class="token scalar string"> |
| IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+UseG1GC" |
| IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:MaxGCPauseMillis=200"</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>confignode_servers 是部署IoTDB Confignodes配置,里面可以配置多个Confignode<br> 默认将第一个启动的ConfigNode节点node1当作Seed-ConfigNode</li></ul><table><thead><tr><th>参数</th><th>说明</th><th>是否必填</th></tr></thead><tbody><tr><td><code>name</code></td><td>Confignode 名称</td><td>必填</td></tr><tr><td><code>deploy_dir</code></td><td>IoTDB config node 部署目录</td><td>必填|</td></tr><tr><td><code>iotdb-confignode.properties</code></td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>更加详细请参看<code>iotdb-confignode.properties</code>文件说明</td><td>非必填</td></tr><tr><td><code>cn_internal_address</code></td><td>对应iotdb/内部通信地址,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_internal_address</code></td><td>必填</td></tr><tr><td><code>cn_seed_config_node</code></td><td>集群配置地址指向存活的ConfigNode,默认指向confignode_x,在<code>global</code>与<code>confignode_servers</code>同时配置值时优先使用<code>confignode_servers</code>中的值,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_seed_config_node</code></td><td>必填</td></tr><tr><td><code>cn_internal_port</code></td><td>内部通信端口,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_internal_port</code></td><td>必填</td></tr><tr><td><code>cn_consensus_port</code></td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_consensus_port</code></td><td>非必填</td></tr><tr><td><code>cn_data_dir</code></td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_data_dir</code></td><td>必填</td></tr><tr><td><code>iotdb-common.properties</code></td><td>对应<code>iotdb/config/iotdb-common.properties</code>在<code>global</code>与<code>confignode_servers</code>同时配置值优先使用confignode_servers中的值</td><td>非必填</td></tr></tbody></table><ul><li>datanode_servers 是部署IoTDB Datanodes配置,里面可以配置多个Datanode</li></ul><table><thead><tr><th>参数</th><th>说明</th><th>是否必填</th></tr></thead><tbody><tr><td>name</td><td>Datanode 名称</td><td>必填</td></tr><tr><td><code>deploy_dir</code></td><td>IoTDB data node 部署目录</td><td>必填</td></tr><tr><td><code>iotdb-datanode.properties</code></td><td>对应<code>iotdb/config/iotdb-datanode.properties</code>更加详细请参看<code>iotdb-datanode.properties</code>文件说明</td><td>非必填</td></tr><tr><td><code>dn_rpc_address</code></td><td>datanode rpc 地址对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_rpc_address</code></td><td>必填</td></tr><tr><td><code>dn_internal_address</code></td><td>内部通信地址,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_internal_address</code></td><td>必填</td></tr><tr><td><code>dn_seed_config_node</code></td><td>集群配置地址指向存活的ConfigNode,默认指向confignode_x,在<code>global</code>与<code>datanode_servers</code>同时配置值时优先使用<code>datanode_servers</code>中的值,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_seed_config_node</code></td><td>必填</td></tr><tr><td><code>dn_rpc_port</code></td><td>datanode rpc端口地址,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_rpc_port</code></td><td>必填</td></tr><tr><td><code>dn_internal_port</code></td><td>内部通信端口,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_internal_port</code></td><td>必填</td></tr><tr><td><code>iotdb-common.properties</code></td><td>对应<code>iotdb/config/iotdb-common.properties</code>在<code>global</code>与<code>datanode_servers</code>同时配置值优先使用<code>datanode_servers</code>中的值</td><td>非必填</td></tr></tbody></table><ul><li>grafana_server 是部署Grafana 相关配置</li></ul><table><thead><tr><th>参数</th><th>说明</th><th>是否必填</th></tr></thead><tbody><tr><td><code>grafana_dir_name</code></td><td>grafana 解压目录名称</td><td>非必填默认grafana_iotdb</td></tr><tr><td><code>host</code></td><td>grafana 部署的服务器ip</td><td>必填</td></tr><tr><td><code>grafana_port</code></td><td>grafana 部署机器的端口</td><td>非必填,默认3000</td></tr><tr><td><code>deploy_dir</code></td><td>grafana 部署服务器目录</td><td>必填</td></tr><tr><td><code>grafana_tar_dir</code></td><td>grafana 压缩包位置</td><td>必填</td></tr><tr><td><code>dashboards</code></td><td>dashboards 所在的位置</td><td>非必填,多个用逗号隔开</td></tr></tbody></table><ul><li>prometheus_server 是部署Prometheus 相关配置</li></ul><table><thead><tr><th>参数</th><th>说明</th><th>是否必填</th></tr></thead><tbody><tr><td><code>prometheus_dir_name</code></td><td>prometheus 解压目录名称</td><td>非必填默认prometheus_iotdb</td></tr><tr><td><code>host</code></td><td>prometheus 部署的服务器ip</td><td>必填</td></tr><tr><td><code>prometheus_port</code></td><td>prometheus 部署机器的端口</td><td>非必填,默认9090</td></tr><tr><td><code>deploy_dir</code></td><td>prometheus 部署服务器目录</td><td>必填</td></tr><tr><td><code>prometheus_tar_dir</code></td><td>prometheus 压缩包位置</td><td>必填</td></tr><tr><td><code>storage_tsdb_retention_time</code></td><td>默认保存数据天数 默认15天</td><td>非必填</td></tr><tr><td><code>storage_tsdb_retention_size</code></td><td>指定block可以保存的数据大小 ,注意单位KB, MB, GB, TB, PB, EB</td><td>非必填</td></tr></tbody></table><p>如果在config/xxx.yaml的<code>iotdb-datanode.properties</code>和<code>iotdb-confignode.properties</code>中配置了metrics,则会自动把配置放入到promethues无需手动修改</p><p>注意:如何配置yaml key对应的值包含特殊字符如:等建议整个value使用双引号,对应的文件路径中不要使用包含空格的路径,防止出现识别出现异常问题。</p><h3 id="使用场景" tabindex="-1"><a class="header-anchor" href="#使用场景"><span>使用场景</span></a></h3><h4 id="清理数据场景" tabindex="-1"><a class="header-anchor" href="#清理数据场景"><span>清理数据场景</span></a></h4><ul><li>清理集群数据场景会删除IoTDB集群中的data目录以及yaml文件中配置的<code>cn_system_dir</code>、<code>cn_consensus_dir</code>、<br><code>dn_data_dirs</code>、<code>dn_consensus_dir</code>、<code>dn_system_dir</code>、<code>logs</code>和<code>ext</code>目录。</li><li>首先执行停止集群命令、然后在执行集群清理命令。</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster stop default_cluster |
| iotdbctl cluster clean default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="集群销毁场景" tabindex="-1"><a class="header-anchor" href="#集群销毁场景"><span>集群销毁场景</span></a></h4><ul><li>集群销毁场景会删除IoTDB集群中的<code>data</code>、<code>cn_system_dir</code>、<code>cn_consensus_dir</code>、<br><code>dn_data_dirs</code>、<code>dn_consensus_dir</code>、<code>dn_system_dir</code>、<code>logs</code>、<code>ext</code>、<code>IoTDB</code>部署目录、<br> grafana部署目录和prometheus部署目录。</li><li>首先执行停止集群命令、然后在执行集群销毁命令。</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster stop default_cluster |
| iotdbctl cluster destroy default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="集群升级场景" tabindex="-1"><a class="header-anchor" href="#集群升级场景"><span>集群升级场景</span></a></h4><ul><li>集群升级首先需要在config/xxx.yaml中配置<code>iotdb_lib_dir</code>为要上传到服务器的jar所在目录路径(例如iotdb/lib)。</li><li>如果使用zip文件上传请使用zip 命令压缩iotdb/lib目录例如 zip -r lib.zip apache-iotdb-1.2.0/lib/*</li><li>执行上传命令、然后执行重启IoTDB集群命令即可完成集群升级</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster upgrade default_cluster |
| iotdbctl cluster restart default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="集群配置文件的热部署场景" tabindex="-1"><a class="header-anchor" href="#集群配置文件的热部署场景"><span>集群配置文件的热部署场景</span></a></h4><ul><li>首先修改在config/xxx.yaml中配置。</li><li>执行分发命令、然后执行热部署命令即可完成集群配置的热部署</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster distribute default_cluster |
| iotdbctl cluster reload default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="集群扩容场景" tabindex="-1"><a class="header-anchor" href="#集群扩容场景"><span>集群扩容场景</span></a></h4><ul><li>首先修改在config/xxx.yaml中添加一个datanode 或者confignode 节点。</li><li>执行集群扩容命令</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster scaleout default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="集群缩容场景" tabindex="-1"><a class="header-anchor" href="#集群缩容场景"><span>集群缩容场景</span></a></h4><ul><li>首先在config/xxx.yaml中找到要缩容的节点名字或者ip+port(其中confignode port 是cn_internal_port、datanode port 是rpc_port)</li><li>执行集群缩容命令</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster scalein default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="已有iotdb集群-使用集群部署工具场景" tabindex="-1"><a class="header-anchor" href="#已有iotdb集群-使用集群部署工具场景"><span>已有IoTDB集群,使用集群部署工具场景</span></a></h4><ul><li>配置服务器的<code>user</code>、<code>passwod</code>或<code>pkey</code>、<code>ssh_port</code></li><li>修改config/xxx.yaml中IoTDB 部署路径,<code>deploy_dir</code>(IoTDB 部署目录)、<code>iotdb_dir_name</code>(IoTDB解压目录名称,默认是iotdb)<br> 例如IoTDB 部署完整路径是<code>/home/data/apache-iotdb-1.1.1</code>则需要修改yaml文件<code>deploy_dir:/home/data/</code>、<code>iotdb_dir_name:apache-iotdb-1.1.1</code></li><li>如果服务器不是使用的java_home则修改<code>jdk_deploy_dir</code>(jdk 部署目录)、<code>jdk_dir_name</code>(jdk解压后的目录名称,默认是jdk_iotdb),如果使用的是java_home 则不需要修改配置<br> 例如jdk部署完整路径是<code>/home/data/jdk_1.8.2</code>则需要修改yaml文件<code>jdk_deploy_dir:/home/data/</code>、<code>jdk_dir_name:jdk_1.8.2</code></li><li>配置<code>cn_seed_config_node</code>、<code>dn_seed_config_node</code></li><li>配置<code>confignode_servers</code>中<code>iotdb-confignode.properties</code>里面的<code>cn_internal_address</code>、<code>cn_internal_port</code>、<code>cn_consensus_port</code>、<code>cn_system_dir</code>、<br><code>cn_consensus_dir</code>和<code>iotdb-common.properties</code>里面的值不是IoTDB默认的则需要配置否则可不必配置</li><li>配置<code>datanode_servers</code>中<code>iotdb-datanode.properties</code>里面的<code>dn_rpc_address</code>、<code>dn_internal_address</code>、<code>dn_data_dirs</code>、<code>dn_consensus_dir</code>、<code>dn_system_dir</code>和<code>iotdb-common.properties</code>等</li><li>执行初始化命令</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster init default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="一键部署iotdb、grafana和prometheus-场景" tabindex="-1"><a class="header-anchor" href="#一键部署iotdb、grafana和prometheus-场景"><span>一键部署IoTDB、Grafana和Prometheus 场景</span></a></h4><ul><li>配置<code>iotdb-datanode.properties</code> 、<code>iotdb-confignode.properties</code> 打开metrics接口</li><li>配置Grafana 配置,如果<code>dashboards</code> 有多个就用逗号隔开,名字不能重复否则会被覆盖。</li><li>配置Prometheus配置,IoTDB 集群配置了metrics 则无需手动修改Prometheus 配置会根据哪个节点配置了metrics,自动修改Prometheus 配置。</li><li>启动集群</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster start default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>更加详细参数请参考上方的 集群配置文件介绍</p><h3 id="命令格式" tabindex="-1"><a class="header-anchor" href="#命令格式"><span>命令格式</span></a></h3><p>本工具的基本用法为:</p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster <span class="token operator"><</span>key<span class="token operator">></span> <span class="token operator"><</span>cluster name<span class="token operator">></span> <span class="token punctuation">[</span>params <span class="token punctuation">(</span>Optional<span class="token punctuation">)</span><span class="token punctuation">]</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>key 表示了具体的命令。</p></li><li><p>cluster name 表示集群名称(即<code>iotdbctl/config</code> 文件中yaml文件名字)。</p></li><li><p>params 表示了命令的所需参数(选填)。</p></li><li><p>例如部署default_cluster集群的命令格式为:</p></li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster deploy default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>集群的功能及参数列表如下:</li></ul><table><thead><tr><th>命令</th><th>功能</th><th>参数</th></tr></thead><tbody><tr><td>check</td><td>检测集群是否可以部署</td><td>集群名称列表</td></tr><tr><td>clean</td><td>清理集群</td><td>集群名称</td></tr><tr><td>deploy</td><td>部署集群</td><td>集群名称 ,-N,模块名称(iotdb、grafana、prometheus可选),-op force(可选)</td></tr><tr><td>list</td><td>打印集群及状态列表</td><td>无</td></tr><tr><td>start</td><td>启动集群</td><td>集群名称,-N,节点名称(nodename、grafana、prometheus可选)</td></tr><tr><td>stop</td><td>关闭集群</td><td>集群名称,-N,节点名称(nodename、grafana、prometheus可选) ,-op force(nodename、grafana、prometheus可选)</td></tr><tr><td>restart</td><td>重启集群</td><td>集群名称,-N,节点名称(nodename、grafana、prometheus可选),-op force(nodename、grafana、prometheus可选)</td></tr><tr><td>show</td><td>查看集群信息,details字段表示展示集群信息细节</td><td>集群名称, details(可选)</td></tr><tr><td>destroy</td><td>销毁集群</td><td>集群名称,-N,模块名称(iotdb、grafana、prometheus可选)</td></tr><tr><td>scaleout</td><td>集群扩容</td><td>集群名称</td></tr><tr><td>scalein</td><td>集群缩容</td><td>集群名称,-N,集群节点名字或集群节点ip+port</td></tr><tr><td>reload</td><td>集群热加载</td><td>集群名称</td></tr><tr><td>distribute</td><td>集群配置文件分发</td><td>集群名称</td></tr><tr><td>dumplog</td><td>备份指定集群日志</td><td>集群名称,-N,集群节点名字 -h 备份至目标机器ip -pw 备份至目标机器密码 -p 备份至目标机器端口 -path 备份的目录 -startdate 起始时间 -enddate 结束时间 -loglevel 日志类型 -l 传输速度</td></tr><tr><td>dumpdata</td><td>备份指定集群数据</td><td>集群名称, -h 备份至目标机器ip -pw 备份至目标机器密码 -p 备份至目标机器端口 -path 备份的目录 -startdate 起始时间 -enddate 结束时间 -l 传输速度</td></tr><tr><td>upgrade</td><td>lib 包升级</td><td>集群名字(升级完后请重启)</td></tr><tr><td>init</td><td>已有集群使用集群部署工具时,初始化集群配置</td><td>集群名字,初始化集群配置</td></tr><tr><td>status</td><td>查看进程状态</td><td>集群名字</td></tr><tr><td>acitvate</td><td>激活集群</td><td>集群名字</td></tr></tbody></table><h3 id="详细命令执行过程" tabindex="-1"><a class="header-anchor" href="#详细命令执行过程"><span>详细命令执行过程</span></a></h3><p>下面的命令都是以default_cluster.yaml 为示例执行的,用户可以修改成自己的集群文件来执行</p><h4 id="检查集群部署环境命令" tabindex="-1"><a class="header-anchor" href="#检查集群部署环境命令"><span>检查集群部署环境命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster check default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>验证目标节点是否能够通过 SSH 登录</p></li><li><p>验证对应节点上的 JDK 版本是否满足IoTDB jdk1.8及以上版本、服务器是否按照unzip、是否安装lsof 或者netstat</p></li><li><p>如果看到下面提示<code>Info:example check successfully!</code> 证明服务器已经具备安装的要求,<br> 如果输出<code>Error:example check fail!</code> 证明有部分条件没有满足需求可以查看上面的输出的Error日志(例如:<code>Error:Server (ip:172.20.31.76) iotdb port(10713) is listening</code>)进行修复,<br> 如果检查jdk没有满足要求,我们可以自己在yaml 文件中配置一个jdk1.8 及以上版本的进行部署不影响后面使用,<br> 如果检查lsof、netstat或者unzip 不满足要求需要在服务器上自行安装。</p></li></ul><h4 id="部署集群命令" tabindex="-1"><a class="header-anchor" href="#部署集群命令"><span>部署集群命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster deploy default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>根据<code>confignode_servers</code> 和<code>datanode_servers</code>中的节点信息上传IoTDB压缩包和jdk压缩包(如果yaml中配置<code>jdk_tar_dir</code>和<code>jdk_deploy_dir</code>值)</p></li><li><p>根据yaml文件节点配置信息生成并上传<code>iotdb-common.properties</code>、<code>iotdb-confignode.properties</code>、<code>iotdb-datanode.properties</code></p></li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster deploy default_cluster <span class="token parameter variable">-op</span> force |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>注意:该命令会强制执行部署,具体过程会删除已存在的部署目录重新部署</p><p><em>部署单个模块</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment"># 部署grafana模块</span> |
| iotdbctl cluster deploy default_cluster <span class="token parameter variable">-N</span> grafana |
| <span class="token comment"># 部署prometheus模块</span> |
| iotdbctl cluster deploy default_cluster <span class="token parameter variable">-N</span> prometheus |
| <span class="token comment"># 部署iotdb模块</span> |
| iotdbctl cluster deploy default_cluster <span class="token parameter variable">-N</span> iotdb |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="启动集群命令" tabindex="-1"><a class="header-anchor" href="#启动集群命令"><span>启动集群命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster start default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>启动confignode,根据yaml配置文件中<code>confignode_servers</code>中的顺序依次启动同时根据进程id检查confignode是否正常,第一个confignode 为seek config</p></li><li><p>启动datanode,根据yaml配置文件中<code>datanode_servers</code>中的顺序依次启动同时根据进程id检查datanode是否正常</p></li><li><p>如果根据进程id检查进程存在后,通过cli依次检查集群列表中每个服务是否正常,如果cli链接失败则每隔10s重试一次直到成功最多重试5次</p></li></ul><p><em>启动单个节点命令</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#按照IoTDB 节点名称启动</span> |
| iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> datanode_1 |
| <span class="token comment">#按照IoTDB 集群ip+port启动,其中port对应confignode的cn_internal_port、datanode的rpc_port</span> |
| iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> <span class="token number">192.168</span>.1.5:6667 |
| <span class="token comment">#启动grafana</span> |
| iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> grafana |
| <span class="token comment">#启动prometheus</span> |
| iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> prometheus |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件</p></li><li><p>根据提供的节点名称或者ip:port找到对于节点位置信息,如果启动的节点是<code>data_node</code>则ip使用yaml 文件中的<code>dn_rpc_address</code>、port 使用的是yaml文件中datanode_servers 中的<code>dn_rpc_port</code>。<br> 如果启动的节点是<code>config_node</code>则ip使用的是yaml文件中confignode_servers 中的<code>cn_internal_address</code> 、port 使用的是<code>cn_internal_port</code></p></li><li><p>启动该节点</p></li></ul>`,87),h={href:"http://xn--IoTDBstart-confignode-ke17alzdqfz8ct64bxf3fxr5b6z8ethaw98ayr8eembma1591iw2rb1m8bpa.xn--shstart-datanode-yu21a.sh",target:"_blank",rel:"noopener noreferrer"},b=d("br",null,null,-1),m=s(`<h4 id="查看iotdb集群状态命令" tabindex="-1"><a class="header-anchor" href="#查看iotdb集群状态命令"><span>查看IoTDB集群状态命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster show default_cluster |
| <span class="token comment">#查看IoTDB集群详细信息</span> |
| iotdbctl cluster show default_cluster details |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>依次在datanode通过cli执行<code>show cluster details</code> 如果有一个节点执行成功则不会在后续节点继续执行cli直接返回结果</p></li></ul><h4 id="停止集群命令" tabindex="-1"><a class="header-anchor" href="#停止集群命令"><span>停止集群命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster stop default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>根据<code>datanode_servers</code>中datanode节点信息,按照配置先后顺序依次停止datanode节点</p></li><li><p>根据<code>confignode_servers</code>中confignode节点信息,按照配置依次停止confignode节点</p></li></ul><p><em>强制停止集群命令</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster stop default_cluster <span class="token parameter variable">-op</span> force |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>会直接执行kill -9 pid 命令强制停止集群</p><p><em>停止单个节点命令</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#按照IoTDB 节点名称停止</span> |
| iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> datanode_1 |
| <span class="token comment">#按照IoTDB 集群ip+port停止(ip+port是按照datanode中的ip+dn_rpc_port获取唯一节点或confignode中的ip+cn_internal_port获取唯一节点)</span> |
| iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> <span class="token number">192.168</span>.1.5:6667 |
| <span class="token comment">#停止grafana</span> |
| iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> grafana |
| <span class="token comment">#停止prometheus</span> |
| iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> prometheus |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件</p></li><li><p>根据提供的节点名称或者ip:port找到对应节点位置信息,如果停止的节点是<code>data_node</code>则ip使用yaml 文件中的<code>dn_rpc_address</code>、port 使用的是yaml文件中datanode_servers 中的<code>dn_rpc_port</code>。<br> 如果停止的节点是<code>config_node</code>则ip使用的是yaml文件中confignode_servers 中的<code>cn_internal_address</code> 、port 使用的是<code>cn_internal_port</code></p></li><li><p>停止该节点</p></li></ul>`,12),v={href:"http://xn--IoTDBstop-confignode-f545a17cifu6c3y3b0h0fb13bov9ekha509ani6eykbma4878h319a4e7bpa.xn--shstop-datanode-794z.sh",target:"_blank",rel:"noopener noreferrer"},g=s(`<h4 id="清理集群数据命令" tabindex="-1"><a class="header-anchor" href="#清理集群数据命令"><span>清理集群数据命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster clean default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>、<code>datanode_servers</code>配置信息</p></li><li><p>根据<code>confignode_servers</code>、<code>datanode_servers</code>中的信息,检查是否还有服务正在运行,<br> 如果有任何一个服务正在运行则不会执行清理命令</p></li><li><p>删除IoTDB集群中的data目录以及yaml文件中配置的<code>cn_system_dir</code>、<code>cn_consensus_dir</code>、<br><code>dn_data_dirs</code>、<code>dn_consensus_dir</code>、<code>dn_system_dir</code>、<code>logs</code>和<code>ext</code>目录。</p></li></ul><h4 id="重启集群命令" tabindex="-1"><a class="header-anchor" href="#重启集群命令"><span>重启集群命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster restart default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana</code>、<code>prometheus</code>配置信息</p></li><li><p>执行上述的停止集群命令(stop),然后执行启动集群命令(start) 具体参考上面的start 和stop 命令</p></li></ul><p><em>强制重启集群命令</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster restart default_cluster <span class="token parameter variable">-op</span> force |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>会直接执行kill -9 pid 命令强制停止集群,然后启动集群</p><p><em>重启单个节点命令</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#按照IoTDB 节点名称重启datanode_1</span> |
| iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> datanode_1 |
| <span class="token comment">#按照IoTDB 节点名称重启confignode_1</span> |
| iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> confignode_1 |
| <span class="token comment">#重启grafana</span> |
| iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> grafana |
| <span class="token comment">#重启prometheus</span> |
| iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> prometheus |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="集群缩容命令" tabindex="-1"><a class="header-anchor" href="#集群缩容命令"><span>集群缩容命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#按照节点名称缩容</span> |
| iotdbctl cluster scalein default_cluster <span class="token parameter variable">-N</span> nodename |
| <span class="token comment">#按照ip+port缩容(ip+port按照datanode中的ip+dn_rpc_port获取唯一节点,confignode中的ip+cn_internal_port获取唯一节点)</span> |
| iotdbctl cluster scalein default_cluster <span class="token parameter variable">-N</span> ip:port |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>判断要缩容的confignode节点和datanode是否只剩一个,如果只剩一个则不能执行缩容</p></li><li><p>然后根据ip:port或者nodename 获取要缩容的节点信息,执行缩容命令,然后销毁该节点目录,如果缩容的节点是<code>data_node</code>则ip使用yaml 文件中的<code>dn_rpc_address</code>、port 使用的是yaml文件中datanode_servers 中的<code>dn_rpc_port</code>。<br> 如果缩容的节点是<code>config_node</code>则ip使用的是yaml文件中confignode_servers 中的<code>cn_internal_address</code> 、port 使用的是<code>cn_internal_port</code></p></li></ul><p>提示:目前一次仅支持一个节点缩容</p><h4 id="集群扩容命令" tabindex="-1"><a class="header-anchor" href="#集群扩容命令"><span>集群扩容命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster scaleout default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>修改config/xxx.yaml 文件添加一个datanode 节点或者confignode节点</p></li><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>找到要扩容的节点,执行上传IoTDB压缩包和jdb包(如果yaml中配置<code>jdk_tar_dir</code>和<code>jdk_deploy_dir</code>值)并解压</p></li><li><p>根据yaml文件节点配置信息生成并上传<code>iotdb-common.properties</code>、<code>iotdb-confignode.properties</code>或<code>iotdb-datanode.properties</code></p></li><li><p>执行启动该节点命令并校验节点是否启动成功</p></li></ul><p>提示:目前一次仅支持一个节点扩容</p><h4 id="销毁集群命令" tabindex="-1"><a class="header-anchor" href="#销毁集群命令"><span>销毁集群命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster destroy default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>cluster-name 找到默认位置的 yaml 文件</p></li><li><p>根据<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana</code>、<code>prometheus</code>中node节点信息,检查是否节点还在运行,<br> 如果有任何一个节点正在运行则停止销毁命令</p></li><li><p>删除IoTDB集群中的<code>data</code>以及yaml文件配置的<code>cn_system_dir</code>、<code>cn_consensus_dir</code>、<br><code>dn_data_dirs</code>、<code>dn_consensus_dir</code>、<code>dn_system_dir</code>、<code>logs</code>、<code>ext</code>、<code>IoTDB</code>部署目录、<br> grafana部署目录和prometheus部署目录</p></li></ul><p><em>销毁单个模块</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment"># 销毁grafana模块</span> |
| iotdbctl cluster destroy default_cluster <span class="token parameter variable">-N</span> grafana |
| <span class="token comment"># 销毁prometheus模块</span> |
| iotdbctl cluster destroy default_cluster <span class="token parameter variable">-N</span> prometheus |
| <span class="token comment"># 销毁iotdb模块</span> |
| iotdbctl cluster destroy default_cluster <span class="token parameter variable">-N</span> iotdb |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="分发集群配置命令" tabindex="-1"><a class="header-anchor" href="#分发集群配置命令"><span>分发集群配置命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster distribute default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana</code>、<code>prometheus</code>配置信息</p></li><li><p>根据yaml文件节点配置信息生成并依次上传<code>iotdb-common.properties</code>、<code>iotdb-confignode.properties</code>、<code>iotdb-datanode.properties</code>、到指定节点</p></li></ul><h4 id="热加载集群配置命令" tabindex="-1"><a class="header-anchor" href="#热加载集群配置命令"><span>热加载集群配置命令</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster reload default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>根据yaml文件节点配置信息依次在cli中执行<code>load configuration</code></p></li></ul><h4 id="集群节点日志备份" tabindex="-1"><a class="header-anchor" href="#集群节点日志备份"><span>集群节点日志备份</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster dumplog default_cluster <span class="token parameter variable">-N</span> datanode_1,confignode_1 <span class="token parameter variable">-startdate</span> <span class="token string">'2023-04-11'</span> <span class="token parameter variable">-enddate</span> <span class="token string">'2023-04-26'</span> <span class="token parameter variable">-h</span> <span class="token number">192.168</span>.9.48 <span class="token parameter variable">-p</span> <span class="token number">36000</span> <span class="token parameter variable">-u</span> root <span class="token parameter variable">-pw</span> root <span class="token parameter variable">-path</span> <span class="token string">'/iotdb/logs'</span> <span class="token parameter variable">-logs</span> <span class="token string">'/root/data/db/iotdb/logs'</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件</p></li><li><p>该命令会根据yaml文件校验datanode_1,confignode_1 是否存在,然后根据配置的起止日期(startdate<=logtime<=enddate)备份指定节点datanode_1,confignode_1 的日志数据到指定服务<code>192.168.9.48</code> 端口<code>36000</code> 数据备份路径是 <code>/iotdb/logs</code> ,IoTDB日志存储路径在<code>/root/data/db/iotdb/logs</code>(非必填,如果不填写-logs xxx 默认从IoTDB安装路径/logs下面备份日志)</p></li></ul><table><thead><tr><th>命令</th><th>功能</th><th>是否必填</th></tr></thead><tbody><tr><td>-h</td><td>存放备份数据机器ip</td><td>否</td></tr><tr><td>-u</td><td>存放备份数据机器用户名</td><td>否</td></tr><tr><td>-pw</td><td>存放备份数据机器密码</td><td>否</td></tr><tr><td>-p</td><td>存放备份数据机器端口(默认22)</td><td>否</td></tr><tr><td>-path</td><td>存放备份数据的路径(默认当前路径)</td><td>否</td></tr><tr><td>-loglevel</td><td>日志基本有all、info、error、warn(默认是全部)</td><td>否</td></tr><tr><td>-l</td><td>限速(默认不限速范围0到104857601 单位Kbit/s)</td><td>否</td></tr><tr><td>-N</td><td>配置文件集群名称多个用逗号隔开</td><td>是</td></tr><tr><td>-startdate</td><td>起始时间(包含默认1970-01-01)</td><td>否</td></tr><tr><td>-enddate</td><td>截止时间(包含)</td><td>否</td></tr><tr><td>-logs</td><td>IoTDB 日志存放路径,默认是({iotdb}/logs)</td><td>否</td></tr></tbody></table><h4 id="集群节点数据备份" tabindex="-1"><a class="header-anchor" href="#集群节点数据备份"><span>集群节点数据备份</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster dumpdata default_cluster <span class="token parameter variable">-granularity</span> partition <span class="token parameter variable">-startdate</span> <span class="token string">'2023-04-11'</span> <span class="token parameter variable">-enddate</span> <span class="token string">'2023-04-26'</span> <span class="token parameter variable">-h</span> <span class="token number">192.168</span>.9.48 <span class="token parameter variable">-p</span> <span class="token number">36000</span> <span class="token parameter variable">-u</span> root <span class="token parameter variable">-pw</span> root <span class="token parameter variable">-path</span> <span class="token string">'/iotdb/datas'</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>该命令会根据yaml文件获取leader 节点,然后根据起止日期(startdate<=logtime<=enddate)备份数据到192.168.9.48 服务上的/iotdb/datas 目录下</li></ul><table><thead><tr><th>命令</th><th>功能</th><th>是否必填</th></tr></thead><tbody><tr><td>-h</td><td>存放备份数据机器ip</td><td>否</td></tr><tr><td>-u</td><td>存放备份数据机器用户名</td><td>否</td></tr><tr><td>-pw</td><td>存放备份数据机器密码</td><td>否</td></tr><tr><td>-p</td><td>存放备份数据机器端口(默认22)</td><td>否</td></tr><tr><td>-path</td><td>存放备份数据的路径(默认当前路径)</td><td>否</td></tr><tr><td>-granularity</td><td>类型partition</td><td>是</td></tr><tr><td>-l</td><td>限速(默认不限速范围0到104857601 单位Kbit/s)</td><td>否</td></tr><tr><td>-startdate</td><td>起始时间(包含)</td><td>是</td></tr><tr><td>-enddate</td><td>截止时间(包含)</td><td>是</td></tr></tbody></table><h4 id="集群升级" tabindex="-1"><a class="header-anchor" href="#集群升级"><span>集群升级</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster upgrade default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li><p>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>和<code>datanode_servers</code>配置信息</p></li><li><p>上传lib包</p></li></ul><p>注意执行完升级后请重启IoTDB 才能生效</p><h4 id="集群初始化" tabindex="-1"><a class="header-anchor" href="#集群初始化"><span>集群初始化</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster init default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana</code>、<code>prometheus</code>配置信息</li><li>初始化集群配置</li></ul><h4 id="查看集群进程状态" tabindex="-1"><a class="header-anchor" href="#查看集群进程状态"><span>查看集群进程状态</span></a></h4><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster status default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>、<code>datanode_servers</code>、<code>grafana</code>、<code>prometheus</code>配置信息</li><li>展示集群的存活状态</li></ul><h4 id="集群授权激活" tabindex="-1"><a class="header-anchor" href="#集群授权激活"><span>集群授权激活</span></a></h4><p>集群激活默认是通过输入激活码激活,也可以通过-op license_path 通过license路径激活</p><ul><li>默认激活方式</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster activate default_cluster |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>配置信息</li><li>读取里面的机器码</li><li>等待输入激活码</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>Machine code: |
| Kt8NfGP73FbM8g4Vty+V9qU5lgLvwqHEF3KbLN/SGWYCJ61eFRKtqy7RS/jw03lHXt4MwdidrZJ<span class="token operator">==</span> |
| JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKgGXEGzMms25+u<span class="token operator">==</span> |
| Please enter the activation code: |
| <span class="token assign-left variable">JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKg</span><span class="token operator">=</span>,lTF1Dur1AElXIi/5jPV9h0XCm8ziPd9/R+tMYLsze1oAPxE87+Nwws<span class="token operator">=</span> |
| Activation successful |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>激活单个节点</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster activate default_cluster <span class="token parameter variable">-N</span> confignode1 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>通过license路径方式激活</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster activate default_cluster <span class="token parameter variable">-op</span> license_path |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>根据 cluster-name 找到默认位置的 yaml 文件,获取<code>confignode_servers</code>配置信息</li><li>读取里面的机器码</li><li>等待输入激活码</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>Machine code: |
| Kt8NfGP73FbM8g4Vty+V9qU5lgLvwqHEF3KbLN/SGWYCJ61eFRKtqy7RS/jw03lHXt4MwdidrZJ<span class="token operator">==</span> |
| JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKgGXEGzMms25+u<span class="token operator">==</span> |
| Please enter the activation code: |
| <span class="token assign-left variable">JHQpXu97IKwv3rzbaDwoPLUuzNCm5aEeC9ZEBW8ndKg</span><span class="token operator">=</span>,lTF1Dur1AElXIi/5jPV9h0XCm8ziPd9/R+tMYLsze1oAPxE87+Nwws<span class="token operator">=</span> |
| Activation successful |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>激活单个节点</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code>iotdbctl cluster activate default_cluster <span class="token parameter variable">-N</span> confignode1 <span class="token parameter variable">-op</span> license_path |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="集群部署工具样例介绍" tabindex="-1"><a class="header-anchor" href="#集群部署工具样例介绍"><span>集群部署工具样例介绍</span></a></h3><p>在集群部署工具安装目录中config/example 下面有3个yaml样例,如果需要可以复制到config 中进行修改即可</p><table><thead><tr><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>default_1c1d.yaml</td><td>1个confignode和1个datanode 配置样例</td></tr><tr><td>default_3c3d.yaml</td><td>3个confignode和3个datanode 配置样例</td></tr><tr><td>default_3c3d_grafa_prome</td><td>3个confignode和3个datanode、Grafana、Prometheus配置样例</td></tr></tbody></table><h2 id="手动部署" tabindex="-1"><a class="header-anchor" href="#手动部署"><span>手动部署</span></a></h2><h3 id="前置检查" tabindex="-1"><a class="header-anchor" href="#前置检查"><span>前置检查</span></a></h3><ol><li>JDK>=1.8 的运行环境,并配置好 JAVA_HOME 环境变量。</li><li>设置最大文件打开数为 65535。</li><li>关闭交换内存。</li><li>首次启动ConfigNode节点时,确保已清空ConfigNode节点的data/confignode目录;首次启动DataNode节点时,确保已清空DataNode节点的data/datanode目录。</li><li>如果整个集群处在可信环境下,可以关闭机器上的防火墙选项。</li><li>在集群默认配置中,ConfigNode 会占用端口 10710 和 10720,DataNode 会占用端口 6667、10730、10740、10750 和 10760,<br> 请确保这些端口未被占用,或者手动修改配置文件中的端口配置。</li></ol><h3 id="安装包获取" tabindex="-1"><a class="header-anchor" href="#安装包获取"><span>安装包获取</span></a></h3><p>你可以选择下载二进制文件或从源代码编译。</p><h4 id="下载二进制文件" tabindex="-1"><a class="header-anchor" href="#下载二进制文件"><span>下载二进制文件</span></a></h4>`,71),_={href:"https://iotdb.apache.org/Download/",target:"_blank",rel:"noopener noreferrer"},f=d("li",null,"下载 IoTDB 1.3.0 版本的二进制文件。",-1),x=d("li",null,"解压得到 apache-iotdb-1.3.0-all-bin 目录。",-1),k=s(`<h4 id="使用源码编译" tabindex="-1"><a class="header-anchor" href="#使用源码编译"><span>使用源码编译</span></a></h4><h5 id="下载源码" tabindex="-1"><a class="header-anchor" href="#下载源码"><span>下载源码</span></a></h5><p><strong>Git</strong></p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>git clone https://github.com/apache/iotdb.git |
| git checkout v1.3.0 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>官网下载</strong></p>`,5),y={href:"https://iotdb.apache.org/Download/",target:"_blank",rel:"noopener noreferrer"},N=d("li",null,"下载 IoTDB 1.3.0 版本的源码。",-1),D=d("li",null,"解压得到 apache-iotdb-1.3.0 目录。",-1),C=s(`<h5 id="编译源码" tabindex="-1"><a class="header-anchor" href="#编译源码"><span>编译源码</span></a></h5><p>在 IoTDB 源码根目录下:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>mvn clean package -pl distribution -am -DskipTests |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>编译成功后,可在目录<br><strong>distribution/target/apache-iotdb-1.3.0-all-bin/apache-iotdb-1.3.0-all-bin</strong><br> 找到集群版本的二进制文件。</p><h3 id="安装包说明" tabindex="-1"><a class="header-anchor" href="#安装包说明"><span>安装包说明</span></a></h3><p>打开 apache-iotdb-1.3.0-all-bin,可见以下目录:</p><table><thead><tr><th><strong>目录</strong></th><th><strong>说明</strong></th></tr></thead><tbody><tr><td>conf</td><td>配置文件目录,包含 ConfigNode、DataNode、JMX 和 logback 等配置文件</td></tr><tr><td>data</td><td>数据文件目录,包含 ConfigNode 和 DataNode 的数据文件</td></tr><tr><td>lib</td><td>库文件目录</td></tr><tr><td>licenses</td><td>证书文件目录</td></tr><tr><td>logs</td><td>日志文件目录,包含 ConfigNode 和 DataNode 的日志文件</td></tr><tr><td>sbin</td><td>脚本目录,包含 ConfigNode 和 DataNode 的启停移除脚本,以及 Cli 的启动脚本等</td></tr><tr><td>tools</td><td>系统工具目录</td></tr></tbody></table><h3 id="集群安装配置" tabindex="-1"><a class="header-anchor" href="#集群安装配置"><span>集群安装配置</span></a></h3><h4 id="集群安装" tabindex="-1"><a class="header-anchor" href="#集群安装"><span>集群安装</span></a></h4><p><code>apache-iotdb-1.3.0-all-bin</code> 包含 ConfigNode 和 DataNode,<br> 请将安装包部署于你目标集群的所有机器上,推荐将安装包部署于所有服务器的相同目录下。</p>`,10),I=d("br",null,null,-1),T=d("h4",{id:"集群配置",tabindex:"-1"},[d("a",{class:"header-anchor",href:"#集群配置"},[d("span",null,"集群配置")])],-1),B=d("p",null,[e("接下来需要修改每个服务器上的配置文件,登录服务器,"),d("br"),e(" 并将工作路径切换至 "),d("code",null,"apache-iotdb-1.3.0-all-bin"),e(","),d("br"),e(" 配置文件在 "),d("code",null,"./conf"),e(" 目录内。")],-1),w=d("h5",{id:"通用配置",tabindex:"-1"},[d("a",{class:"header-anchor",href:"#通用配置"},[d("span",null,"通用配置")])],-1),z=d("br",null,null,-1),P=d("br",null,null,-1),j=s('<table><thead><tr><th><strong>配置项</strong></th><th><strong>说明</strong></th><th><strong>默认</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>节点希望加入的集群的名称</td><td>defaultCluster</td></tr><tr><td>config_node_consensus_protocol_class</td><td>ConfigNode 使用的共识协议</td><td>org.apache.iotdb.consensus.ratis.RatisConsensus</td></tr><tr><td>schema_replication_factor</td><td>元数据副本数,DataNode 数量不应少于此数目</td><td>1</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>元数据副本组的共识协议</td><td>org.apache.iotdb.consensus.ratis.RatisConsensus</td></tr><tr><td>data_replication_factor</td><td>数据副本数,DataNode 数量不应少于此数目</td><td>1</td></tr><tr><td>data_region_consensus_protocol_class</td><td>数据副本组的共识协议。注:RatisConsensus 目前不支持多数据目录</td><td>org.apache.iotdb.consensus.iot.IoTConsensus</td></tr></tbody></table><p><strong>注意:上述配置项在集群启动后即不可更改,且务必保证所有节点的通用配置完全一致,否则节点无法启动。</strong></p><h5 id="confignode-配置" tabindex="-1"><a class="header-anchor" href="#confignode-配置"><span>ConfigNode 配置</span></a></h5><p>打开 ConfigNode 配置文件 ./conf/iotdb-confignode.properties,根据服务器/虚拟机的 IP 地址和可用端口,设置以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>说明</strong></th><th><strong>默认</strong></th><th><strong>用法</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>ConfigNode 在集群内部通讯使用的地址</td><td>127.0.0.1</td><td>设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>cn_internal_port</td><td>ConfigNode 在集群内部通讯使用的端口</td><td>10710</td><td>设置为任意未占用端口</td></tr><tr><td>cn_consensus_port</td><td>ConfigNode 副本组共识协议通信使用的端口</td><td>10720</td><td>设置为任意未占用端口</td></tr><tr><td>cn_seed_config_node</td><td>节点注册加入集群时连接的 ConfigNode 的地址。注:只能配置一个</td><td>127.0.0.1:10710</td><td>对于 Seed-ConfigNode,设置为自己的 cn_internal_address:cn_internal_port;对于其它 ConfigNode,设置为另一个正在运行的 ConfigNode 的 cn_internal_address:cn_internal_port</td></tr></tbody></table><p><strong>注意:上述配置项在节点启动后即不可更改,且务必保证所有端口均未被占用,否则节点无法启动。</strong></p><h5 id="datanode-配置" tabindex="-1"><a class="header-anchor" href="#datanode-配置"><span>DataNode 配置</span></a></h5><p>打开 DataNode 配置文件 ./conf/iotdb-datanode.properties,根据服务器/虚拟机的 IP 地址和可用端口,设置以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>说明</strong></th><th><strong>默认</strong></th><th><strong>用法</strong></th></tr></thead><tbody><tr><td>dn_rpc_address</td><td>客户端 RPC 服务的地址</td><td>127.0.0.1</td><td>设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>dn_rpc_port</td><td>客户端 RPC 服务的端口</td><td>6667</td><td>设置为任意未占用端口</td></tr><tr><td>dn_internal_address</td><td>DataNode 在集群内部接收控制流使用的地址</td><td>127.0.0.1</td><td>设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>dn_internal_port</td><td>DataNode 在集群内部接收控制流使用的端口</td><td>10730</td><td>设置为任意未占用端口</td></tr><tr><td>dn_mpp_data_exchange_port</td><td>DataNode 在集群内部接收数据流使用的端口</td><td>10740</td><td>设置为任意未占用端口</td></tr><tr><td>dn_data_region_consensus_port</td><td>DataNode 的数据副本间共识协议通信的端口</td><td>10750</td><td>设置为任意未占用端口</td></tr><tr><td>dn_schema_region_consensus_port</td><td>DataNode 的元数据副本间共识协议通信的端口</td><td>10760</td><td>设置为任意未占用端口</td></tr><tr><td>dn_seed_config_node</td><td>集群中正在运行的 ConfigNode 地址</td><td>127.0.0.1:10710</td><td>设置为任意正在运行的 ConfigNode 的 cn_internal_address:cn_internal_port,可设置多个,用逗号(",")隔开</td></tr></tbody></table><p><strong>注意:上述配置项在节点启动后即不可更改,且务必保证所有端口均未被占用,否则节点无法启动。</strong></p><h3 id="集群操作" tabindex="-1"><a class="header-anchor" href="#集群操作"><span>集群操作</span></a></h3><h4 id="启动集群" tabindex="-1"><a class="header-anchor" href="#启动集群"><span>启动集群</span></a></h4><p>本小节描述如何启动包括若干 ConfigNode 和 DataNode 的集群。<br> 集群可以提供服务的标准是至少启动一个 ConfigNode 且启动 不小于(数据/元数据)副本个数 的 DataNode。</p><p>总体启动流程分为三步:</p><ol><li>启动种子 ConfigNode</li><li>增加 ConfigNode(可选)</li><li>增加 DataNode</li></ol><h5 id="启动-seed-confignode" tabindex="-1"><a class="header-anchor" href="#启动-seed-confignode"><span>启动 Seed-ConfigNode</span></a></h5><p><strong>集群第一个启动的节点必须是 ConfigNode,第一个启动的 ConfigNode 必须遵循本小节教程。</strong></p><p>第一个启动的 ConfigNode 是 Seed-ConfigNode,标志着新集群的创建。<br> 在启动 Seed-ConfigNode 前,请打开通用配置文件 ./conf/iotdb-common.properties,并检查如下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>已设置为期望的集群名称</td></tr><tr><td>config_node_consensus_protocol_class</td><td>已设置为期望的共识协议</td></tr><tr><td>schema_replication_factor</td><td>已设置为期望的元数据副本数</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>已设置为期望的共识协议</td></tr><tr><td>data_replication_factor</td><td>已设置为期望的数据副本数</td></tr><tr><td>data_region_consensus_protocol_class</td><td>已设置为期望的共识协议</td></tr></tbody></table>',19),S=d("strong",null,"注意:",-1),G=s(`<p>接着请打开它的配置文件 ./conf/iotdb-confignode.properties,并检查如下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>已设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>cn_internal_port</td><td>该端口未被占用</td></tr><tr><td>cn_consensus_port</td><td>该端口未被占用</td></tr><tr><td>cn_seed_config_node</td><td>已设置为自己的内部通讯地址,即 cn_internal_address:cn_internal_port</td></tr></tbody></table><p>检查完毕后,即可在服务器上运行启动脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux 前台启动 |
| bash ./sbin/start-confignode.sh |
| |
| # Linux 后台启动 |
| nohup bash ./sbin/start-confignode.sh >/dev/null 2>&1 & |
| |
| # Windows |
| .\\sbin\\start-confignode.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,4),M=d("br",null,null,-1),R=s(`<h5 id="增加更多-confignode-可选" tabindex="-1"><a class="header-anchor" href="#增加更多-confignode-可选"><span>增加更多 ConfigNode(可选)</span></a></h5><p><strong>只要不是第一个启动的 ConfigNode 就必须遵循本小节教程。</strong></p><p>可向集群添加更多 ConfigNode,以保证 ConfigNode 的高可用。常用的配置为额外增加两个 ConfigNode,使集群共有三个 ConfigNode。</p><p>新增的 ConfigNode 需要保证 ./conf/iotdb-common.properites 中的所有配置参数与 Seed-ConfigNode 完全一致,否则可能启动失败或产生运行时错误。<br> 因此,请着重检查通用配置文件中的以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>与 Seed-ConfigNode 保持一致</td></tr><tr><td>config_node_consensus_protocol_class</td><td>与 Seed-ConfigNode 保持一致</td></tr><tr><td>schema_replication_factor</td><td>与 Seed-ConfigNode 保持一致</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>与 Seed-ConfigNode 保持一致</td></tr><tr><td>data_replication_factor</td><td>与 Seed-ConfigNode 保持一致</td></tr><tr><td>data_region_consensus_protocol_class</td><td>与 Seed-ConfigNode 保持一致</td></tr></tbody></table><p>接着请打开它的配置文件 ./conf/iotdb-confignode.properties,并检查以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>已设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>cn_internal_port</td><td>该端口未被占用</td></tr><tr><td>cn_consensus_port</td><td>该端口未被占用</td></tr><tr><td>cn_seed_config_node</td><td>已设置为另一个正在运行的 ConfigNode 的内部通讯地址,推荐使用 Seed-ConfigNode 的内部通讯地址</td></tr></tbody></table><p>检查完毕后,即可在服务器上运行启动脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux 前台启动 |
| bash ./sbin/start-confignode.sh |
| |
| # Linux 后台启动 |
| nohup bash ./sbin/start-confignode.sh >/dev/null 2>&1 & |
| |
| # Windows |
| .\\sbin\\start-confignode.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,9),E=d("br",null,null,-1),q=s(`<h5 id="增加-datanode" tabindex="-1"><a class="header-anchor" href="#增加-datanode"><span>增加 DataNode</span></a></h5><p><strong>确保集群已有正在运行的 ConfigNode 后,才能开始增加 DataNode。</strong></p><p>可以向集群中添加任意个 DataNode。<br> 在添加新的 DataNode 前,请先打开通用配置文件 ./conf/iotdb-common.properties 并检查以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>与 Seed-ConfigNode 保持一致</td></tr></tbody></table><p>接着打开它的配置文件 ./conf/iotdb-datanode.properties 并检查以下参数:</p><table><thead><tr><th><strong>配置项</strong></th><th><strong>检查</strong></th></tr></thead><tbody><tr><td>dn_rpc_address</td><td>已设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>dn_rpc_port</td><td>该端口未被占用</td></tr><tr><td>dn_internal_address</td><td>已设置为服务器的 <code>IP地址</code>或<code>hostname(机器名/域名)</code></td></tr><tr><td>dn_internal_port</td><td>该端口未被占用</td></tr><tr><td>dn_mpp_data_exchange_port</td><td>该端口未被占用</td></tr><tr><td>dn_data_region_consensus_port</td><td>该端口未被占用</td></tr><tr><td>dn_schema_region_consensus_port</td><td>该端口未被占用</td></tr><tr><td>dn_seed_config_node</td><td>已设置为正在运行的 ConfigNode 的内部通讯地址,推荐使用 Seed-ConfigNode 的内部通讯地址</td></tr></tbody></table><p>检查完毕后,即可在服务器上运行启动脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux 前台启动 |
| bash ./sbin/start-datanode.sh |
| |
| # Linux 后台启动 |
| nohup bash ./sbin/start-datanode.sh >/dev/null 2>&1 & |
| |
| # Windows |
| .\\sbin\\start-datanode.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,8),L=d("br",null,null,-1),U=s(`<p><strong>注意:当且仅当集群拥有不少于副本个数(max{schema_replication_factor, data_replication_factor})的 DataNode 后,集群才可以提供服务</strong></p><h4 id="启动-cli" tabindex="-1"><a class="header-anchor" href="#启动-cli"><span>启动 Cli</span></a></h4><p>若搭建的集群仅用于本地调试,可直接执行 ./sbin 目录下的 Cli 启动脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux |
| ./sbin/start-cli.sh |
| |
| # Windows |
| .\\sbin\\start-cli.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,4),X=d("br",null,null,-1),K=s(`<h4 id="验证集群" tabindex="-1"><a class="header-anchor" href="#验证集群"><span>验证集群</span></a></h4><p>以在6台服务器上启动的3C3D(3个ConfigNode 和 3个DataNode)集群为例,<br> 这里假设3个ConfigNode依次为iotdb-1(192.168.1.10)、iotdb-2(192.168.1.11)、iotdb-3(192.168.1.12),且3个ConfigNode启动时均使用了默认的端口10710与10720;<br> 3个DataNode依次为iotdb-4(192.168.1.20)、iotdb-5(192.168.1.21)、iotdb-6(192.168.1.22),且3个DataNode启动时均使用了默认的端口6667、10730、10740、10750与10760。</p><p>我们为这六台地址全部设置 hostname</p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.10 iotdb-1"</span> <span class="token operator">>></span> /etc/hosts |
| <span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.11 iotdb-2"</span> <span class="token operator">>></span> /etc/hosts |
| <span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.12 iotdb-3"</span> <span class="token operator">>></span> /etc/hosts |
| <span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.20 iotdb-4"</span> <span class="token operator">>></span> /etc/hosts |
| <span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.21 iotdb-5"</span> <span class="token operator">>></span> /etc/hosts |
| <span class="token builtin class-name">echo</span> <span class="token string">"192.168.132.22 iotdb-6"</span> <span class="token operator">>></span> /etc/hosts |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>当按照6.1步骤成功启动集群后,在 Cli 执行 <code>show cluster details</code>,看到的结果应当如下:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>IoTDB> show cluster details |
| +------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+ |
| |NodeID| NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|RpcAddress|RpcPort|MppPort|SchemaConsensusPort|DataConsensusPort| |
| +------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+ |
| | 0|ConfigNode|Running| iotdb-1 | 10710| 10720| | | | | | |
| | 2|ConfigNode|Running| iotdb-2 | 10710| 10720| | | | | | |
| | 3|ConfigNode|Running| iotdb-3 | 10710| 10720| | | | | | |
| | 1| DataNode|Running| iotdb-4 | 10730| | iotdb-4| 6667| 10740| 10750| 10760| |
| | 4| DataNode|Running| iotdb-5 | 10730| | iotdb-5| 6667| 10740| 10750| 10760| |
| | 5| DataNode|Running| iotdb-6 | 10730| | iotdb-6| 6667| 10740| 10750| 10760| |
| +------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+ |
| Total line number = 6 |
| It costs 0.012s |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>若所有节点的状态均为 <strong>Running</strong>,则说明集群部署成功;<br> 否则,请阅读启动失败节点的运行日志,并检查对应的配置参数。</p><h4 id="停止-iotdb-进程" tabindex="-1"><a class="header-anchor" href="#停止-iotdb-进程"><span>停止 IoTDB 进程</span></a></h4><p>本小节描述如何手动关闭 IoTDB 的 ConfigNode 或 DataNode 进程。</p><h5 id="使用脚本停止-confignode" tabindex="-1"><a class="header-anchor" href="#使用脚本停止-confignode"><span>使用脚本停止 ConfigNode</span></a></h5><p>执行停止 ConfigNode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux |
| ./sbin/stop-confignode.sh |
| |
| # Windows |
| .\\sbin\\stop-confignode.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="使用脚本停止-datanode" tabindex="-1"><a class="header-anchor" href="#使用脚本停止-datanode"><span>使用脚本停止 DataNode</span></a></h5><p>执行停止 DataNode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux |
| ./sbin/stop-datanode.sh |
| |
| # Windows |
| .\\sbin\\stop-datanode.bat |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="停止节点进程" tabindex="-1"><a class="header-anchor" href="#停止节点进程"><span>停止节点进程</span></a></h5><p>首先获取节点的进程号:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>jps |
| |
| # 或 |
| |
| ps aux | grep iotdb |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>结束进程:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>kill -9 <pid> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p><strong>注意:有些端口的信息需要 root 权限才能获取,在此情况下请使用 sudo</strong></p><h4 id="集群缩容" tabindex="-1"><a class="header-anchor" href="#集群缩容"><span>集群缩容</span></a></h4><p>本小节描述如何将 ConfigNode 或 DataNode 移出集群。</p><h5 id="移除-confignode" tabindex="-1"><a class="header-anchor" href="#移除-confignode"><span>移除 ConfigNode</span></a></h5><p>在移除 ConfigNode 前,请确保移除后集群至少还有一个活跃的 ConfigNode。<br> 在活跃的 ConfigNode 上执行 remove-confignode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># 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> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="移除-datanode" tabindex="-1"><a class="header-anchor" href="#移除-datanode"><span>移除 DataNode</span></a></h5><p>在移除 DataNode 前,请确保移除后集群至少还有不少于(数据/元数据)副本个数的 DataNode。<br> 在活跃的 DataNode 上执行 remove-datanode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># 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> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="常见问题" tabindex="-1"><a class="header-anchor" href="#常见问题"><span>常见问题</span></a></h3>`,30);function J(W,A){const o=i("ExternalLinkIcon"),a=i("RouteLink");return l(),c("div",null,[u,d("p",null,[e("说明:"),d("a",h,[e("由于集群部署工具仅是调用了IoTDB集群中的start-confignode.sh和start-datanode.sh"),t(o)]),e(" 脚本,"),b,e(" 在实际输出结果失败时有可能是集群还未正常启动,建议使用status命令进行查看当前集群状态(iotdbctl cluster status xxx)")]),m,d("p",null,[e("说明:"),d("a",v,[e("由于集群部署工具仅是调用了IoTDB集群中的stop-confignode.sh和stop-datanode.sh"),t(o)]),e(" 脚本,在某些情况下有可能iotdb集群并未停止。")]),g,d("ol",null,[d("li",null,[e("打开官网"),d("a",_,[e("Download Page"),t(o)]),e("。")]),f,x]),k,d("ol",null,[d("li",null,[e("打开官网"),d("a",y,[e("Download Page"),t(o)]),e("。")]),N,D]),C,d("p",null,[e("如果你希望先在一台服务器上尝试部署 IoTDB 集群,请参考"),I,t(a,{to:"/zh/UserGuide/latest/QuickStart/ClusterQuickStart.html"},{default:n(()=>[e("Cluster Quick Start")]),_:1}),e("。")]),T,B,d("p",null,[e("对于所有部署 ConfigNode 的服务器,需要修改"),t(a,{to:"/zh/UserGuide/latest/Reference/Common-Config-Manual.html"},{default:n(()=>[e("通用配置")]),_:1}),e("和 "),t(a,{to:"/zh/UserGuide/latest/Reference/ConfigNode-Config-Manual.html"},{default:n(()=>[e("ConfigNode 配置")]),_:1}),e("。")]),d("p",null,[e("对于所有部署 DataNode 的服务器,需要修改"),t(a,{to:"/zh/UserGuide/latest/Reference/Common-Config-Manual.html"},{default:n(()=>[e("通用配置")]),_:1}),e("和 "),t(a,{to:"/zh/UserGuide/latest/Reference/DataNode-Config-Manual.html"},{default:n(()=>[e("DataNode 配置")]),_:1}),e("。")]),w,d("p",null,[e("打开通用配置文件 ./conf/iotdb-common.properties,"),z,e(" 可根据 "),t(a,{to:"/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html"},{default:n(()=>[e("部署推荐")]),_:1}),P,e(" 设置以下参数:")]),j,d("p",null,[S,e(" 请根据"),t(a,{to:"/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html"},{default:n(()=>[e("部署推荐")]),_:1}),e("配置合适的通用参数,这些参数在首次配置后即不可修改。")]),G,d("p",null,[e("ConfigNode 的其它配置参数可参考"),M,t(a,{to:"/zh/UserGuide/latest/Reference/ConfigNode-Config-Manual.html"},{default:n(()=>[e("ConfigNode 配置参数")]),_:1}),e("。")]),R,d("p",null,[e("ConfigNode 的其它配置参数可参考"),E,t(a,{to:"/zh/UserGuide/latest/Reference/ConfigNode-Config-Manual.html"},{default:n(()=>[e("ConfigNode 配置参数")]),_:1}),e("。")]),q,d("p",null,[e("DataNode 的其它配置参数可参考"),L,t(a,{to:"/zh/UserGuide/latest/Reference/DataNode-Config-Manual.html"},{default:n(()=>[e("DataNode配置参数")]),_:1}),e(" 。")]),U,d("p",null,[e("若希望通过 Cli 连接生产环境的集群,"),X,e(" 请阅读 "),t(a,{to:"/zh/UserGuide/latest/Tools-System/CLI.html"},{default:n(()=>[e("Cli 使用手册")]),_:1}),e("。")]),K,d("p",null,[e("请参考 "),t(a,{to:"/zh/UserGuide/latest/FAQ/Frequently-asked-questions.html#%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2-faq"},{default:n(()=>[e("分布式部署FAQ")]),_:1})])])}const O=r(p,[["render",J],["__file","Cluster-Deployment_timecho.html.vue"]]),V=JSON.parse('{"path":"/zh/UserGuide/latest/Deployment-and-Maintenance/Cluster-Deployment_timecho.html","title":"集群版部署","lang":"zh-CN","frontmatter":{"description":"集群版部署 集群版部署(使用集群管理工具) IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。旨在解决 IoTDB 分布式系统多节点的运维难题,主要包括集群部署、集群启停、弹性扩容、配置更新、数据导出等功能,从而实现对复杂数据库集群的一键式指令下发, 极大降低管理难度。本文档将说明如何用集群管理工具远程部署、配置、启动和停止 IoTDB 集群...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://iotdb.apache.org/UserGuide/latest/Deployment-and-Maintenance/Cluster-Deployment_timecho.html"}],["meta",{"property":"og:url","content":"https://iotdb.apache.org/zh/UserGuide/latest/Deployment-and-Maintenance/Cluster-Deployment_timecho.html"}],["meta",{"property":"og:site_name","content":"IoTDB Website"}],["meta",{"property":"og:title","content":"集群版部署"}],["meta",{"property":"og:description","content":"集群版部署 集群版部署(使用集群管理工具) IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。旨在解决 IoTDB 分布式系统多节点的运维难题,主要包括集群部署、集群启停、弹性扩容、配置更新、数据导出等功能,从而实现对复杂数据库集群的一键式指令下发, 极大降低管理难度。本文档将说明如何用集群管理工具远程部署、配置、启动和停止 IoTDB 集群..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-06-28T09:10:43.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-28T09:10:43.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"集群版部署\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-28T09:10:43.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"集群版部署(使用集群管理工具)","slug":"集群版部署-使用集群管理工具","link":"#集群版部署-使用集群管理工具","children":[{"level":3,"title":"环境准备","slug":"环境准备","link":"#环境准备","children":[]},{"level":3,"title":"部署方法","slug":"部署方法","link":"#部署方法","children":[]},{"level":3,"title":"系统结构","slug":"系统结构","link":"#系统结构","children":[]},{"level":3,"title":"集群配置文件介绍","slug":"集群配置文件介绍","link":"#集群配置文件介绍","children":[]},{"level":3,"title":"使用场景","slug":"使用场景","link":"#使用场景","children":[]},{"level":3,"title":"命令格式","slug":"命令格式","link":"#命令格式","children":[]},{"level":3,"title":"详细命令执行过程","slug":"详细命令执行过程","link":"#详细命令执行过程","children":[]},{"level":3,"title":"集群部署工具样例介绍","slug":"集群部署工具样例介绍","link":"#集群部署工具样例介绍","children":[]}]},{"level":2,"title":"手动部署","slug":"手动部署","link":"#手动部署","children":[{"level":3,"title":"前置检查","slug":"前置检查","link":"#前置检查","children":[]},{"level":3,"title":"安装包获取","slug":"安装包获取","link":"#安装包获取","children":[]},{"level":3,"title":"安装包说明","slug":"安装包说明","link":"#安装包说明","children":[]},{"level":3,"title":"集群安装配置","slug":"集群安装配置","link":"#集群安装配置","children":[]},{"level":3,"title":"集群操作","slug":"集群操作","link":"#集群操作","children":[]},{"level":3,"title":"常见问题","slug":"常见问题","link":"#常见问题","children":[]}]}],"git":{"createdTime":1688958677000,"updatedTime":1719565843000,"contributors":[{"name":"majialin","email":"107627937+mal117@users.noreply.github.com","commits":2}]},"readingTime":{"minutes":32.39,"words":9716},"filePathRelative":"zh/UserGuide/latest/Deployment-and-Maintenance/Cluster-Deployment_timecho.md","localizedDate":"2023年7月10日","autoDesc":true}');export{O as comp,V as data}; |