blob: ae8ae976be824cf3ab48e5145b54e99d817d612d [file] [log] [blame]
import{_ as r,r as o,o as l,c,a as u,d as e,e as d,b as t,w as i,f as n}from"./app-SFHDkVtH.js";const p={},h=e("h1",{id:"部署指导",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#部署指导","aria-hidden":"true"},"#"),d(" 部署指导")],-1),b=e("h2",{id:"单机版部署",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#单机版部署","aria-hidden":"true"},"#"),d(" 单机版部署")],-1),v=e("h3",{id:"安装环境",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#安装环境","aria-hidden":"true"},"#"),d(" 安装环境")],-1),m=e("p",null,"安装前需要保证设备上配有 JDK>=1.8 的运行环境,并配置好 JAVA_HOME 环境变量。",-1),g=e("p",null,"设置最大文件打开数为 65535。",-1),_=e("h3",{id:"安装步骤",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#安装步骤","aria-hidden":"true"},"#"),d(" 安装步骤")],-1),f=e("p",null,"IoTDB 支持多种安装途径。用户可以使用三种方式对 IoTDB 进行安装——下载二进制可运行程序、使用源码、使用 docker 镜像。",-1),N=e("li",null,[e("p",null,"使用源码:您可以从代码仓库下载源码并编译,具体编译方法见下方。")],-1),x={href:"https://iotdb.apache.org/Download/",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/apache/iotdb/blob/master/docker/src/main",target:"_blank",rel:"noopener noreferrer"},y=n(`<h3 id="软件目录结构" tabindex="-1"><a class="header-anchor" href="#软件目录结构" aria-hidden="true">#</a> 软件目录结构</h3><ul><li>sbin 启动和停止脚本目录</li><li>conf 配置文件目录</li><li>tools 系统工具目录</li><li>lib 依赖包目录</li></ul><h3 id="iotdb-试用" tabindex="-1"><a class="header-anchor" href="#iotdb-试用" aria-hidden="true">#</a> IoTDB 试用</h3><p>用户可以根据以下操作对 IoTDB 进行简单的试用,若以下操作均无误,则说明 IoTDB 安装成功。</p><h4 id="启动-iotdb" tabindex="-1"><a class="header-anchor" href="#启动-iotdb" aria-hidden="true">#</a> 启动 IoTDB</h4><p>IoTDB 是一个基于分布式系统的数据库。要启动 IoTDB ,你可以先启动单机版(一个 ConfigNode 和一个 DataNode)来检查安装。</p><p>用户可以使用 sbin 文件夹下的 start-standalone 脚本启动 IoTDB。</p><p>Linux 系统与 MacOS 系统启动命令如下:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>&gt; bash sbin/start-standalone.sh
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Windows 系统启动命令如下:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>&gt; sbin\\start-standalone.bat
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h2 id="集群版部署-使用集群管理工具" tabindex="-1"><a class="header-anchor" href="#集群版部署-使用集群管理工具" aria-hidden="true">#</a> 集群版部署(使用集群管理工具)</h2><p>IoTDB 集群管理工具是一款易用的运维工具(企业版工具)。旨在解决 IoTDB 分布式系统多节点的运维难题,主要包括集群部署、集群启停、弹性扩容、配置更新、数据导出等功能,从而实现对复杂数据库集群的一键式指令下发,<br> 极大降低管理难度。本文档将说明如何用集群管理工具远程部署、配置、启动和停止 IoTDB 集群实例。</p><h3 id="环境准备" tabindex="-1"><a class="header-anchor" href="#环境准备" aria-hidden="true">#</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="#部署方法" aria-hidden="true">#</a> 部署方法</h3><h4 id="下载安装" tabindex="-1"><a class="header-anchor" href="#下载安装" aria-hidden="true">#</a> 下载安装</h4><p>本工具为TimechoDB(基于IoTDB的企业版数据库)配套工具,您可以联系您的销售获取工具下载方式。</p><p>注意:由于二进制包仅支持GLIBC2.17 及以上版本,因此最低适配Centos7版本</p><ul><li>在iotd目录内输入以下指令后:</li></ul><div class="language-bash line-numbers-mode" data-ext="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"><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直接使用 &lt;iotdbctl absolute path&gt;/sbin/iotdbctl 来执行命令,如检查部署前所需的环境:</li></ul><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token operator">&lt;</span>iotdbctl absolute path<span class="token operator">&gt;</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="#系统结构" aria-hidden="true">#</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="#集群配置文件介绍" aria-hidden="true">#</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>`,33),k=e("thead",null,[e("tr",null,[e("th",null,"参数"),e("th",null,"说明"),e("th",null,"是否必填")])],-1),D=e("tr",null,[e("td",null,"iotdb_zip_dir"),e("td",null,[d("IoTDB 部署分发目录,如果值为空则从"),e("code",null,"iotdb_download_url"),d("指定地址下载")]),e("td",null,"非必填")],-1),S=e("tr",null,[e("td",null,"iotdb_download_url"),e("td",null,[d("IoTDB 下载地址,如果"),e("code",null,"iotdb_zip_dir"),d(" 没有值则从指定地址下载")]),e("td",null,"非必填")],-1),C=e("tr",null,[e("td",null,"jdk_tar_dir"),e("td",null,"jdk 本地目录,可使用该 jdk 路径进行上传部署至目标节点。"),e("td",null,"非必填")],-1),A=e("tr",null,[e("td",null,"jdk_deploy_dir"),e("td",null,[d("jdk 远程机器部署目录,会将 jdk 部署到该目录下面,与下面的"),e("code",null,"jdk_dir_name"),d("参数构成完整的jdk部署目录即 "),e("code",null,"<jdk_deploy_dir>/<jdk_dir_name>")]),e("td",null,"非必填")],-1),B=e("tr",null,[e("td",null,"jdk_dir_name"),e("td",null,"jdk 解压后的目录名称默认是jdk_iotdb"),e("td",null,"非必填")],-1),T=e("tr",null,[e("td",null,"iotdb_lib_dir"),e("td",null,"IoTDB lib 目录或者IoTDB 的lib 压缩包仅支持.zip格式 ,仅用于IoTDB升级,默认处于注释状态,如需升级请打开注释修改路径即可。如果使用zip文件请使用zip 命令压缩iotdb/lib目录例如 zip -r lib.zip apache-iotdb-1.2.0/lib/*"),e("td",null,"非必填")],-1),w=e("tr",null,[e("td",null,"user"),e("td",null,"ssh登陆部署机器的用户名"),e("td",null,"必填")],-1),P=e("tr",null,[e("td",null,"password"),e("td",null,"ssh登录的密码, 如果password未指定使用pkey登陆, 请确保已配置节点之间ssh登录免密钥"),e("td",null,"非必填")],-1),E=e("tr",null,[e("td",null,"pkey"),e("td",null,"密钥登陆如果password有值优先使用password否则使用pkey登陆"),e("td",null,"非必填")],-1),L=e("tr",null,[e("td",null,"ssh_port"),e("td",null,"ssh登录端口"),e("td",null,"必填")],-1),R=e("tr",null,[e("td",null,"deploy_dir"),e("td",null,[d("IoTDB 部署目录,会把 IoTDB 部署到该目录下面与下面的"),e("code",null,"iotdb_dir_name"),d("参数构成完整的IoTDB 部署目录即 "),e("code",null,"<deploy_dir>/<iotdb_dir_name>")]),e("td",null,"必填")],-1),O=e("tr",null,[e("td",null,"iotdb_dir_name"),e("td",null,"IoTDB 解压后的目录名称默认是iotdb"),e("td",null,"非必填")],-1),z={href:"http://datanode-env.sh",target:"_blank",rel:"noopener noreferrer"},M=e("td",null,[d("对应"),e("code",null,"iotdb/config/datanode-env.sh"),d(" ,在"),e("code",null,"global"),d("与"),e("code",null,"confignode_servers"),d("同时配置值时优先使用"),e("code",null,"confignode_servers"),d("中的值")],-1),j=e("td",null,"非必填",-1),W={href:"http://confignode-env.sh",target:"_blank",rel:"noopener noreferrer"},K=e("td",null,[d("对应"),e("code",null,"iotdb/config/confignode-env.sh"),d(",在"),e("code",null,"global"),d("与"),e("code",null,"datanode_servers"),d("同时配置值时优先使用"),e("code",null,"datanode_servers"),d("中的值")],-1),U=e("td",null,"非必填",-1),G=e("tr",null,[e("td",null,"iotdb-common.properties"),e("td",null,[d("对应"),e("code",null,"iotdb/config/iotdb-common.properties")]),e("td",null,"非必填")],-1),q=e("tr",null,[e("td",null,"cn_seed_config_node"),e("td",null,[d("集群配置地址指向存活的ConfigNode,默认指向confignode_x,在"),e("code",null,"global"),d("与"),e("code",null,"confignode_servers"),d("同时配置值时优先使用"),e("code",null,"confignode_servers"),d("中的值,对应"),e("code",null,"iotdb/config/iotdb-confignode.properties"),d("中的"),e("code",null,"cn_seed_config_node")]),e("td",null,"必填")],-1),V=e("tr",null,[e("td",null,"dn_seed_config_node"),e("td",null,[d("集群配置地址指向存活的ConfigNode,默认指向confignode_x,在"),e("code",null,"global"),d("与"),e("code",null,"datanode_servers"),d("同时配置值时优先使用"),e("code",null,"datanode_servers"),d("中的值,对应"),e("code",null,"iotdb/config/iotdb-datanode.properties"),d("中的"),e("code",null,"dn_seed_config_node")]),e("td",null,"必填")],-1),X={href:"http://xn--datanode-env-494s318a.sh",target:"_blank",rel:"noopener noreferrer"},J={href:"http://xn--confignode-env-fq7x.sh",target:"_blank",rel:"noopener noreferrer"},Q={href:"http://xn--datanode-env-5s7sp53cu6a964asz7a58wgp3imd5bqzxa.sh",target:"_blank",rel:"noopener noreferrer"},H={href:"http://xn--confignode-env-fq7x.sh",target:"_blank",rel:"noopener noreferrer"},F=e("br",null,null,-1),Z={href:"http://datanode-env.sh",target:"_blank",rel:"noopener noreferrer"},Y=e("br",null,null,-1),$=e("br",null,null,-1),ee=e("br",null,null,-1),de=n(`<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>name</td><td>Confignode 名称</td><td>必填</td></tr><tr><td>deploy_dir</td><td>IoTDB config node 部署目录</td><td>必填|</td></tr><tr><td>iotdb-confignode.properties</td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>更加详细请参看<code>iotdb-confignode.properties</code>文件说明</td><td>非必填</td></tr><tr><td>cn_internal_address</td><td>对应iotdb/内部通信地址,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_internal_address</code></td><td>必填</td></tr><tr><td>cn_seed_config_node</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>cn_internal_port</td><td>内部通信端口,对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_internal_port</code></td><td>必填</td></tr><tr><td>cn_consensus_port</td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_consensus_port</code></td><td>非必填</td></tr><tr><td>cn_data_dir</td><td>对应<code>iotdb/config/iotdb-confignode.properties</code>中的<code>cn_data_dir</code></td><td>必填</td></tr><tr><td>iotdb-common.properties</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>deploy_dir</td><td>IoTDB data node 部署目录</td><td>必填</td></tr><tr><td>iotdb-datanode.properties</td><td>对应<code>iotdb/config/iotdb-datanode.properties</code>更加详细请参看<code>iotdb-datanode.properties</code>文件说明</td><td>非必填</td></tr><tr><td>dn_rpc_address</td><td>datanode rpc 地址对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_rpc_address</code></td><td>必填</td></tr><tr><td>dn_internal_address</td><td>内部通信地址,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_internal_address</code></td><td>必填</td></tr><tr><td>dn_seed_config_node</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>dn_rpc_port</td><td>datanode rpc端口地址,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_rpc_port</code></td><td>必填</td></tr><tr><td>dn_internal_port</td><td>内部通信端口,对应<code>iotdb/config/iotdb-datanode.properties</code>中的<code>dn_internal_port</code></td><td>必填</td></tr><tr><td>iotdb-common.properties</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>grafana_dir_name</td><td>grafana 解压目录名称</td><td>非必填默认grafana_iotdb</td></tr><tr><td>host</td><td>grafana 部署的服务器ip</td><td>必填</td></tr><tr><td>grafana_port</td><td>grafana 部署机器的端口</td><td>非必填,默认3000</td></tr><tr><td>deploy_dir</td><td>grafana 部署服务器目录</td><td>必填</td></tr><tr><td>grafana_tar_dir</td><td>grafana 压缩包位置</td><td>必填</td></tr><tr><td>dashboards</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>prometheus_dir_name</td><td>prometheus 解压目录名称</td><td>非必填默认prometheus_iotdb</td></tr><tr><td>host</td><td>prometheus 部署的服务器ip</td><td>必填</td></tr><tr><td>prometheus_port</td><td>prometheus 部署机器的端口</td><td>非必填,默认9090</td></tr><tr><td>deploy_dir</td><td>prometheus 部署服务器目录</td><td>必填</td></tr><tr><td>prometheus_tar_dir</td><td>prometheus 压缩包位置</td><td>必填</td></tr><tr><td>storage_tsdb_retention_time</td><td>默认保存数据天数 默认15天</td><td>非必填</td></tr><tr><td>storage_tsdb_retention_size</td><td>指定block可以保存的数据大小默认512M ,注意单位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="#使用场景" aria-hidden="true">#</a> 使用场景</h3><h4 id="清理数据场景" tabindex="-1"><a class="header-anchor" href="#清理数据场景" aria-hidden="true">#</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"><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="#集群销毁场景" aria-hidden="true">#</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"><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="#集群升级场景" aria-hidden="true">#</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"><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="#集群配置文件的热部署场景" aria-hidden="true">#</a> 集群配置文件的热部署场景</h4><ul><li>首先修改在config/xxx.yaml中配置。</li><li>执行分发命令、然后执行热部署命令即可完成集群配置的热部署</li></ul><div class="language-bash line-numbers-mode" data-ext="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="#集群扩容场景" aria-hidden="true">#</a> 集群扩容场景</h4><ul><li>首先修改在config/xxx.yaml中添加一个datanode 或者confignode 节点。</li><li>执行集群扩容命令</li></ul><div class="language-bash line-numbers-mode" data-ext="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="#集群缩容场景" aria-hidden="true">#</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"><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集群-使用集群部署工具场景" aria-hidden="true">#</a> 已有IoTDB集群,使用集群部署工具场景</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"><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-场景" aria-hidden="true">#</a> 一键部署IoTDB、Grafana和Prometheus 场景</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"><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="#命令格式" aria-hidden="true">#</a> 命令格式</h3><p>本工具的基本用法为:</p><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>iotdbctl cluster <span class="token operator">&lt;</span>key<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>cluster name<span class="token operator">&gt;</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"><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="#详细命令执行过程" aria-hidden="true">#</a> 详细命令执行过程</h3><p>下面的命令都是以default_cluster.yaml 为示例执行的,用户可以修改成自己的集群文件来执行</p><h4 id="检查集群部署环境命令" tabindex="-1"><a class="header-anchor" href="#检查集群部署环境命令" aria-hidden="true">#</a> 检查集群部署环境命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#部署集群命令" aria-hidden="true">#</a> 部署集群命令</h4><div class="language-bash line-numbers-mode" data-ext="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"><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"><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="#启动集群命令" aria-hidden="true">#</a> 启动集群命令</h4><div class="language-bash line-numbers-mode" data-ext="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"><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>`,61),te={href:"http://xn--IoTDBstart-confignode-ke17alzdqfz8ct64bxf3fxr5b6z8ethaw98ayr8eembma1591iw2rb1m8bpa.xn--shstart-datanode-yu21a.sh",target:"_blank",rel:"noopener noreferrer"},ae=e("br",null,null,-1),ne=n(`<h4 id="查看iotdb集群状态命令" tabindex="-1"><a class="header-anchor" href="#查看iotdb集群状态命令" aria-hidden="true">#</a> 查看IoTDB集群状态命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#停止集群命令" aria-hidden="true">#</a> 停止集群命令</h4><div class="language-bash line-numbers-mode" data-ext="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"><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"><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),se={href:"http://xn--IoTDBstop-confignode-f545a17cifu6c3y3b0h0fb13bov9ekha509ani6eykbma4878h319a4e7bpa.xn--shstop-datanode-794z.sh",target:"_blank",rel:"noopener noreferrer"},ie=n(`<h4 id="清理集群数据命令" tabindex="-1"><a class="header-anchor" href="#清理集群数据命令" aria-hidden="true">#</a> 清理集群数据命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#重启集群命令" aria-hidden="true">#</a> 重启集群命令</h4><div class="language-bash line-numbers-mode" data-ext="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"><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"><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="#集群缩容命令" aria-hidden="true">#</a> 集群缩容命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#集群扩容命令" aria-hidden="true">#</a> 集群扩容命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#销毁集群命令" aria-hidden="true">#</a> 销毁集群命令</h4><div class="language-bash line-numbers-mode" data-ext="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"><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="#分发集群配置命令" aria-hidden="true">#</a> 分发集群配置命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#热加载集群配置命令" aria-hidden="true">#</a> 热加载集群配置命令</h4><div class="language-bash line-numbers-mode" data-ext="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="#集群节点日志备份" aria-hidden="true">#</a> 集群节点日志备份</h4><div class="language-bash line-numbers-mode" data-ext="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">&#39;2023-04-11&#39;</span> <span class="token parameter variable">-enddate</span> <span class="token string">&#39;2023-04-26&#39;</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">&#39;/iotdb/logs&#39;</span> <span class="token parameter variable">-logs</span> <span class="token string">&#39;/root/data/db/iotdb/logs&#39;</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&lt;=logtime&lt;=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="#集群节点数据备份" aria-hidden="true">#</a> 集群节点数据备份</h4><div class="language-bash line-numbers-mode" data-ext="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">&#39;2023-04-11&#39;</span> <span class="token parameter variable">-enddate</span> <span class="token string">&#39;2023-04-26&#39;</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">&#39;/iotdb/datas&#39;</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>该命令会根据yaml文件获取leader 节点,然后根据起止日期(startdate&lt;=logtime&lt;=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="#集群升级" aria-hidden="true">#</a> 集群升级</h4><div class="language-bash line-numbers-mode" data-ext="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="#集群初始化" aria-hidden="true">#</a> 集群初始化</h4><div class="language-bash line-numbers-mode" data-ext="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="#查看集群进程状态" aria-hidden="true">#</a> 查看集群进程状态</h4><div class="language-bash line-numbers-mode" data-ext="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="#集群授权激活" aria-hidden="true">#</a> 集群授权激活</h4><p>集群激活默认是通过输入激活码激活,也可以通过-op license_path 通过license路径激活</p><ul><li>默认激活方式</li></ul><div class="language-bash line-numbers-mode" data-ext="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"><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"><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"><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"><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"><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="#集群部署工具样例介绍" aria-hidden="true">#</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="#手动部署" aria-hidden="true">#</a> 手动部署</h2><h3 id="前置检查" tabindex="-1"><a class="header-anchor" href="#前置检查" aria-hidden="true">#</a> 前置检查</h3><ol><li>JDK&gt;=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="#安装包获取" aria-hidden="true">#</a> 安装包获取</h3><p>你可以选择下载二进制文件(见 3.1)或从源代码编译(见 3.2)。</p><h4 id="下载二进制文件" tabindex="-1"><a class="header-anchor" href="#下载二进制文件" aria-hidden="true">#</a> 下载二进制文件</h4>`,71),oe={href:"https://iotdb.apache.org/Download/",target:"_blank",rel:"noopener noreferrer"},re=e("li",null,"下载 IoTDB 1.3.0 版本的二进制文件。",-1),le=e("li",null,"解压得到 apache-iotdb-1.3.0-all-bin 目录。",-1),ce=n(`<h4 id="使用源码编译" tabindex="-1"><a class="header-anchor" href="#使用源码编译" aria-hidden="true">#</a> 使用源码编译</h4><h5 id="下载源码" tabindex="-1"><a class="header-anchor" href="#下载源码" aria-hidden="true">#</a> 下载源码</h5><p><strong>Git</strong></p><div class="language-text line-numbers-mode" data-ext="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),ue={href:"https://iotdb.apache.org/Download/",target:"_blank",rel:"noopener noreferrer"},pe=e("li",null,"下载 IoTDB 1.0.0 版本的源码。",-1),he=e("li",null,"解压得到 apache-iotdb-1.3.0 目录。",-1),be=n(`<h5 id="编译源码" tabindex="-1"><a class="header-anchor" href="#编译源码" aria-hidden="true">#</a> 编译源码</h5><p>在 IoTDB 源码根目录下:</p><div class="language-text line-numbers-mode" data-ext="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-SNAPSHOT-all-bin/apache-iotdb-1.3.0-SNAPSHOT-all-bin</strong><br> 找到集群版本的二进制文件。</p><h3 id="安装包说明" tabindex="-1"><a class="header-anchor" href="#安装包说明" aria-hidden="true">#</a> 安装包说明</h3><p>打开 apache-iotdb-1.3.0-SNAPSHOT-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="#集群安装配置" aria-hidden="true">#</a> 集群安装配置</h3><h4 id="集群安装" tabindex="-1"><a class="header-anchor" href="#集群安装" aria-hidden="true">#</a> 集群安装</h4><p><code>apache-iotdb-1.3.0-SNAPSHOT-all-bin</code> 包含 ConfigNode 和 DataNode,<br> 请将安装包部署于你目标集群的所有机器上,推荐将安装包部署于所有服务器的相同目录下。</p>`,10),ve=e("br",null,null,-1),me={href:"https://iotdb.apache.org/zh/UserGuide/Master/QuickStart/ClusterQuickStart.html",target:"_blank",rel:"noopener noreferrer"},ge=n('<h4 id="集群配置" tabindex="-1"><a class="header-anchor" href="#集群配置" aria-hidden="true">#</a> 集群配置</h4><p>接下来需要修改每个服务器上的配置文件,登录服务器,<br> 并将工作路径切换至 <code>apache-iotdb-1.3.0-SNAPSHOT-all-bin</code>,<br> 配置文件在 <code>./conf</code> 目录内。</p><p>对于所有部署 ConfigNode 的服务器,需要修改通用配置(见 5.2.1)和 ConfigNode 配置(见 5.2.2)。</p><p>对于所有部署 DataNode 的服务器,需要修改通用配置(见 5.2.1)和 DataNode 配置(见 5.2.3)。</p><h5 id="通用配置" tabindex="-1"><a class="header-anchor" href="#通用配置" aria-hidden="true">#</a> 通用配置</h5>',5),_e=e("br",null,null,-1),fe=e("br",null,null,-1),Ne=n('<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-配置" aria-hidden="true">#</a> ConfigNode 配置</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>设置为服务器的 IPV4 地址或域名</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-配置" aria-hidden="true">#</a> DataNode 配置</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>设置为服务器的 IPV4 地址或域名</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>设置为服务器的 IPV4 地址或域名</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,可设置多个,用逗号(&quot;,&quot;)隔开</td></tr></tbody></table><p><strong>注意:上述配置项在节点启动后即不可更改,且务必保证所有端口均未被占用,否则节点无法启动。</strong></p><h3 id="集群操作" tabindex="-1"><a class="header-anchor" href="#集群操作" aria-hidden="true">#</a> 集群操作</h3><h4 id="启动集群" tabindex="-1"><a class="header-anchor" href="#启动集群" aria-hidden="true">#</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" aria-hidden="true">#</a> 启动 Seed-ConfigNode</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),xe=e("strong",null,"注意:",-1),Ie=n(`<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>已设置为服务器的 IPV4 地址或域名</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"><pre class="language-text"><code># Linux 前台启动
bash ./sbin/start-confignode.sh
# Linux 后台启动
nohup bash ./sbin/start-confignode.sh &gt;/dev/null 2&gt;&amp;1 &amp;
# 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),ye=e("br",null,null,-1),ke=n(`<h5 id="增加更多-confignode-可选" tabindex="-1"><a class="header-anchor" href="#增加更多-confignode-可选" aria-hidden="true">#</a> 增加更多 ConfigNode(可选)</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>已设置为服务器的 IPV4 地址或域名</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"><pre class="language-text"><code># Linux 前台启动
bash ./sbin/start-confignode.sh
# Linux 后台启动
nohup bash ./sbin/start-confignode.sh &gt;/dev/null 2&gt;&amp;1 &amp;
# 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),De=e("br",null,null,-1),Se=n(`<h5 id="增加-datanode" tabindex="-1"><a class="header-anchor" href="#增加-datanode" aria-hidden="true">#</a> 增加 DataNode</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>已设置为服务器的 IPV4 地址或域名</td></tr><tr><td>dn_rpc_port</td><td>该端口未被占用</td></tr><tr><td>dn_internal_address</td><td>已设置为服务器的 IPV4 地址或域名</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"><pre class="language-text"><code># Linux 前台启动
bash ./sbin/start-datanode.sh
# Linux 后台启动
nohup bash ./sbin/start-datanode.sh &gt;/dev/null 2&gt;&amp;1 &amp;
# 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),Ce=e("br",null,null,-1),Ae=n(`<p><strong>注意:当且仅当集群拥有不少于副本个数(max{schema_replication_factor, data_replication_factor})的 DataNode 后,集群才可以提供服务</strong></p><h4 id="启动-cli" tabindex="-1"><a class="header-anchor" href="#启动-cli" aria-hidden="true">#</a> 启动 Cli</h4><p>若搭建的集群仅用于本地调试,可直接执行 ./sbin 目录下的 Cli 启动脚本:</p><div class="language-text line-numbers-mode" data-ext="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),Be=e("br",null,null,-1),Te=n(`<h4 id="验证集群" tabindex="-1"><a class="header-anchor" href="#验证集群" aria-hidden="true">#</a> 验证集群</h4><p>以在6台服务器上启动的3C3D(3个ConfigNode 和 3个DataNode)集群为例,<br> 这里假设3个ConfigNode的IP地址依次为192.168.1.10、192.168.1.11、192.168.1.12,且3个ConfigNode启动时均使用了默认的端口10710与10720;<br> 3个DataNode的IP地址依次为192.168.1.20、192.168.1.21、192.168.1.22,且3个DataNode启动时均使用了默认的端口6667、10730、10740、10750与10760。</p><p>当按照6.1步骤成功启动集群后,在 Cli 执行 <code>show cluster details</code>,看到的结果应当如下:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; 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
</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-进程" aria-hidden="true">#</a> 停止 IoTDB 进程</h4><p>本小节描述如何手动关闭 IoTDB 的 ConfigNode 或 DataNode 进程。</p><h5 id="使用脚本停止-confignode" tabindex="-1"><a class="header-anchor" href="#使用脚本停止-confignode" aria-hidden="true">#</a> 使用脚本停止 ConfigNode</h5><p>执行停止 ConfigNode 脚本:</p><div class="language-text line-numbers-mode" data-ext="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" aria-hidden="true">#</a> 使用脚本停止 DataNode</h5><p>执行停止 DataNode 脚本:</p><div class="language-text line-numbers-mode" data-ext="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="#停止节点进程" aria-hidden="true">#</a> 停止节点进程</h5><p>首先获取节点的进程号:</p><div class="language-text line-numbers-mode" data-ext="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"><pre class="language-text"><code>kill -9 &lt;pid&gt;
</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="#集群缩容" aria-hidden="true">#</a> 集群缩容</h4><p>本小节描述如何将 ConfigNode 或 DataNode 移出集群。</p><h5 id="移除-confignode" tabindex="-1"><a class="header-anchor" href="#移除-confignode" aria-hidden="true">#</a> 移除 ConfigNode</h5><p>在移除 ConfigNode 前,请确保移除后集群至少还有一个活跃的 ConfigNode。<br> 在活跃的 ConfigNode 上执行 remove-confignode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code># Linux
## 根据 confignode_id 移除节点
./sbin/remove-confignode.sh &lt;confignode_id&gt;
## 根据 ConfigNode 内部通讯地址和端口移除节点
./sbin/remove-confignode.sh &lt;cn_internal_address&gt;:&lt;cn_internal_port&gt;
# Windows
## 根据 confignode_id 移除节点
.\\sbin\\remove-confignode.bat &lt;confignode_id&gt;
## 根据 ConfigNode 内部通讯地址和端口移除节点
.\\sbin\\remove-confignode.bat &lt;cn_internal_address&gt;:&lt;cn_internal_port&gt;
</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" aria-hidden="true">#</a> 移除 DataNode</h5><p>在移除 DataNode 前,请确保移除后集群至少还有不少于(数据/元数据)副本个数的 DataNode。<br> 在活跃的 DataNode 上执行 remove-datanode 脚本:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code># Linux
## 根据 datanode_id 移除节点
./sbin/remove-datanode.sh &lt;datanode_id&gt;
## 根据 DataNode RPC 服务地址和端口移除节点
./sbin/remove-datanode.sh &lt;dn_rpc_address&gt;:&lt;dn_rpc_port&gt;
# Windows
## 根据 datanode_id 移除节点
.\\sbin\\remove-datanode.bat &lt;datanode_id&gt;
## 根据 DataNode RPC 服务地址和端口移除节点
.\\sbin\\remove-datanode.bat &lt;dn_rpc_address&gt;:&lt;dn_rpc_port&gt;
</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="#常见问题" aria-hidden="true">#</a> 常见问题</h3>`,28),we=n('<h2 id="ainode-部署" tabindex="-1"><a class="header-anchor" href="#ainode-部署" aria-hidden="true">#</a> AINode 部署</h2><h3 id="安装环境-1" tabindex="-1"><a class="header-anchor" href="#安装环境-1" aria-hidden="true">#</a> 安装环境</h3><h4 id="建议操作系统" tabindex="-1"><a class="header-anchor" href="#建议操作系统" aria-hidden="true">#</a> 建议操作系统</h4><p>Ubuntu, CentOS, MacOS</p><h4 id="运行环境" tabindex="-1"><a class="header-anchor" href="#运行环境" aria-hidden="true">#</a> 运行环境</h4><p>AINode目前要求系统3.8以上的Python,且带有pip和venv工具</p><p>如果是联网的情况,AINode会创建虚拟环境并自动下载运行时的依赖包,不需要额外配置。</p>',7),Pe={href:"https://cloud.tsinghua.edu.cn/d/4c1342f6c272439aa96c/",target:"_blank",rel:"noopener noreferrer"},Ee=n(`<h3 id="安装步骤-1" tabindex="-1"><a class="header-anchor" href="#安装步骤-1" aria-hidden="true">#</a> 安装步骤</h3><p>用户可以下载AINode的软件安装包,下载并解压后即完成AINode的安装。也可以从代码仓库中下载源码并编译来获取安装包。</p><h3 id="软件目录结构-1" tabindex="-1"><a class="header-anchor" href="#软件目录结构-1" aria-hidden="true">#</a> 软件目录结构</h3><p>下载软件安装包并解压后,可以得到如下的目录结构</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>|-- apache-iotdb-AINode-bin
|-- lib # 打包的二进制可执行文件,包含环境依赖
|-- conf # 存放配置文件
- iotdb-AINode.properties
|-- sbin # AINode相关启动脚本
- start-AINode.sh
- start-AINode.bat
- stop-AINode.sh
- stop-AINode.bat
- remove-AINode.sh
- remove-AINode.bat
|-- licenses
- LICENSE
- NOTICE
- README.md
- README_ZH.md
- RELEASE_NOTES.md
</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 class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>**lib:**AINode编译后的二进制可执行文件以及相关的代码依赖</li><li>**conf:**包含AINode的配置项,具体包含以下配置项</li><li>**sbin:**AINode的运行脚本,可以启动,移除和停止AINode</li></ul><h3 id="启动ainode" tabindex="-1"><a class="header-anchor" href="#启动ainode" aria-hidden="true">#</a> 启动AINode</h3><p>在完成Seed-ConfigNode的部署后,可以通过添加AINode节点来支持模型的注册和推理功能。在配置项中指定IoTDB集群的信息后,可以执行相应的指令来启动AINode,加入IoTDB集群。</p><p>注意:启动AINode需要系统环境中含有3.8及以上的Python解释器作为默认解释器,用户在使用前请检查环境变量中是否存在Python解释器且可以通过<code>python</code>指令直接调用。</p><h4 id="直接启动" tabindex="-1"><a class="header-anchor" href="#直接启动" aria-hidden="true">#</a> 直接启动</h4><p>在获得安装包的文件后,用户可以直接进行AINode的初次启动。</p><p>在Linux和MacOS上的启动指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/start-AINode.sh
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>在windows上的启动指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\start-AINode.bat
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>如果首次启动AINode且没有指定解释器路径,那么脚本将在程序根目录使用系统Python解释器新建venv虚拟环境,并在这个环境中自动先后安装AINode的第三方依赖和AINode主程序。<strong>这个过程将产生大小约为1GB的虚拟环境,请预留好安装的空间</strong>。在后续启动时,如果未指定解释器路径,脚本将自动寻找上面新建的venv环境并启动AINode,无需重复安装程序和依赖。</p><p>注意,如果希望在某次启动时强制重新安装AINode本体,可以通过-r激活reinstall,该参数会根据lib下的文件重新安装AINode。</p><p>Linux和MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/start-AINode.sh -r
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Windows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\start-AINode.bat -r
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>例如,用户在lib中更换了更新版本的AINode安装包,但该安装包并不会安装到用户的常用环境中。此时用户即需要在启动时添加-r选项来指示脚本强制重新安装虚拟环境中的AINode主程序,实现版本的更新</p><h4 id="指定自定义虚拟环境" tabindex="-1"><a class="header-anchor" href="#指定自定义虚拟环境" aria-hidden="true">#</a> 指定自定义虚拟环境</h4><p>在启动AINode时,可以通过指定一个虚拟环境解释器路径来将AINode主程序及其依赖安装到特定的位置。具体需要指定参数ain_interpreter_dir的值。</p><p>Linux和MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/start-AINode.sh -i xxx/bin/python
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Windows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\start-AINode.bat -i xxx\\Scripts\\python.exe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>在指定Python解释器的时候请输入虚拟环境中Python解释器的<strong>可执行文件</strong>的地址。目前AINode<strong>支持venv、<strong><strong>conda</strong></strong>等虚拟环境</strong>,<strong>不支持输入系统Python解释器作为安装位置</strong>。为了保证脚本能够正常识别,请<strong>尽可能使用绝对路径</strong></p><h4 id="加入集群" tabindex="-1"><a class="header-anchor" href="#加入集群" aria-hidden="true">#</a> 加入集群</h4><p>AINode启动过程中会自动将新的AINode加入IoTDB集群。启动AINode后可以通过在IoTDB的cli命令行中输入集群查询的SQL来验证节点是否加入成功。</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>IoTDB&gt; show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710|UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730|UNKNOWN|190e303-dev|
| 2| AINode|Running| 127.0.0.1| 10810|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+
IoTDB&gt; show cluster details
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|RpcAddress|RpcPort|MppPort|SchemaConsensusPort|DataConsensusPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710| 10720| | | | | |UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730| | 0.0.0.0| 6667| 10740| 10750| 10760|UNKNOWN|190e303-dev|
| 2| AINode|Running| 127.0.0.1| 10810| | 0.0.0.0| 10810| | | |UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------------------+----------+-------+-------+-------------------+-----------------+-------+-----------+
IoTDB&gt; show AINodes
+------+-------+----------+-------+
|NodeID| Status|RpcAddress|RpcPort|
+------+-------+----------+-------+
| 2|Running| 127.0.0.1| 10810|
+------+-------+----------+-------+
</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 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="移除ainode" tabindex="-1"><a class="header-anchor" href="#移除ainode" aria-hidden="true">#</a> 移除AINode</h3><p>当需要把一个已经连接的AINode移出集群时,可以执行对应的移除脚本。</p><p>在Linux和MacOS上的指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/remove-AINode.sh
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>在windows上的启动指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\remove-AINode.bat
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>移除节点后,将无法查询到节点的相关信息。</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>IoTDB&gt; show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710|UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+
</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></div><p>另外,如果之前自定义了AINode安装的位置,那么在调用remove脚本的时候也需要附带相应的路径作为参数:</p><p>Linux和MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/remove-AINode.sh -i xxx/bin/python
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Windows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\remove-AINode.bat -i 1 xxx\\Scripts\\python.exe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>类似地,在env脚本中持久化修改的脚本参数同样会在执行移除的时候生效。</p><p>如果用户丢失了data文件夹下的文件,可能AINode本地无法主动移除自己,需要用户指定节点号、地址和端口号进行移除,此时我们支持用户按照以下方法输入参数进行删除</p><p>Linux和MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/remove-AINode.sh -t &lt;AINode-id&gt;/&lt;ip&gt;:&lt;rpc-port&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>Windows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\remove-AINode.bat -t &lt;AINode-id&gt;/&lt;ip&gt;:&lt;rpc-port&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="停止ainode" tabindex="-1"><a class="header-anchor" href="#停止ainode" aria-hidden="true">#</a> 停止AINode</h3><p>如果需要停止正在运行的AINode节点,则执行相应的关闭脚本。</p><p>在Linux和MacOS上的指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; bash sbin/stop-AINode.sh
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>在windows上的启动指令如下:</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>&gt; sbin\\stop-AINode.bat
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>此时无法获取节点的具体状态,也就无法使用对应的管理和推理功能。如果需要重新启动该节点,再次执行启动脚本即可。</p><div class="language-Shell line-numbers-mode" data-ext="Shell"><pre class="language-Shell"><code>IoTDB&gt; show cluster
+------+----------+-------+---------------+------------+-------+-----------+
|NodeID| NodeType| Status|InternalAddress|InternalPort|Version| BuildInfo|
+------+----------+-------+---------------+------------+-------+-----------+
| 0|ConfigNode|Running| 127.0.0.1| 10710|UNKNOWN|190e303-dev|
| 1| DataNode|Running| 127.0.0.1| 10730|UNKNOWN|190e303-dev|
| 2| AINode|UNKNOWN| 127.0.0.1| 10790|UNKNOWN|190e303-dev|
+------+----------+-------+---------------+------------+-------+-----------+
</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><h3 id="脚本参数详情" tabindex="-1"><a class="header-anchor" href="#脚本参数详情" aria-hidden="true">#</a> 脚本参数详情</h3><p>AINode启动过程中支持两种参数,其具体的作用如下图所示:</p><table><thead><tr><th><strong>名称</strong></th><th><strong>作用脚本</strong></th><th>标签</th><th><strong>描述</strong></th><th><strong>类型</strong></th><th><strong>默认值</strong></th><th>输入方式</th></tr></thead><tbody><tr><td>ain_interpreter_dir</td><td>start remove env</td><td>-i</td><td>AINode所安装在的虚拟环境的解释器路径,需要使用绝对路径</td><td>String</td><td>默认读取环境变量</td><td>调用时输入+持久化修改</td></tr><tr><td>ain_remove_target</td><td>remove stop</td><td>-t</td><td>AINode关闭时可以指定待移除的目标AINode的Node ID、地址和端口号,格式为<code>&lt;AINode-id&gt;/&lt;ip&gt;:&lt;rpc-port&gt;</code></td><td>String</td><td>无</td><td>调用时输入</td></tr><tr><td>ain_force_reinstall</td><td>start remove env</td><td>-r</td><td>该脚本在检查AINode安装情况的时候是否检查版本,如果检查则在版本不对的情况下会强制安装lib里的whl安装包</td><td>Bool</td><td>false</td><td>调用时输入</td></tr><tr><td>ain_no_dependencies</td><td>start remove env</td><td>-n</td><td>指定在安装AINode的时候是否安装依赖,如果指定则仅安装AINode主程序而不安装依赖。</td><td>Bool</td><td>false</td><td>调用时输入</td></tr></tbody></table><p>除了按照上文所述的方法在执行脚本时传入上述参数外,也可以在<code>conf</code>文件夹下的<code>AINode-env.sh</code>和<code>AINode-env.bat</code>脚本中持久化地修改部分参数。</p><p><code>AINode-env.sh</code>:</p><div class="language-Bash line-numbers-mode" data-ext="Bash"><pre class="language-Bash"><code># The defaulte venv environment is used if ain_interpreter_dir is not set. Please use absolute path without quotation mark
# ain_interpreter_dir=
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><code>AINode-env.bat</code>:</p><div class="language-Plain line-numbers-mode" data-ext="Plain"><pre class="language-Plain"><code>@REM The defaulte venv environment is used if ain_interpreter_dir is not set. Please use absolute path without quotation mark
@REM set ain_interpreter_dir=
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>在写入参数值的后解除对应行的注释并保存即可在下一次执行脚本时生效。</p><h3 id="ainode配置项" tabindex="-1"><a class="header-anchor" href="#ainode配置项" aria-hidden="true">#</a> AINode配置项</h3><p>AINode支持修改一些必要的参数。可以在<code>conf/iotdb-AINode.properties</code>文件中找到下列参数并进行持久化的修改:</p><table><thead><tr><th><strong>名称</strong></th><th><strong>描述</strong></th><th><strong>类型</strong></th><th><strong>默认值</strong></th><th><strong>改后生效方式</strong></th></tr></thead><tbody><tr><td>ain_target_config_node_list</td><td>AINode启动时注册的ConfigNode地址</td><td>String</td><td>10710</td><td>仅允许在第一次启动服务前修改</td></tr><tr><td>ain_inference_rpc_address</td><td>AINode提供服务与通信的地址</td><td>String</td><td>127.0.0.1</td><td>重启后生效</td></tr><tr><td>ain_inference_rpc_port</td><td>AINode提供服务与通信的端口</td><td>String</td><td>10810</td><td>重启后生效</td></tr><tr><td>ain_system_dir</td><td>AINode元数据存储路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。</td><td>String</td><td>data/AINode/system</td><td>重启后生效</td></tr><tr><td>ain_models_dir</td><td>AINode存储模型文件的路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。</td><td>String</td><td>data/AINode/models</td><td>重启后生效</td></tr><tr><td>ain_logs_dir</td><td>AINode存储日志的路径,相对路径的起始目录与操作系统相关,建议使用绝对路径。</td><td>String</td><td>logs/AINode</td><td>重启后生效</td></tr></tbody></table><h3 id="常见问题解答" tabindex="-1"><a class="header-anchor" href="#常见问题解答" aria-hidden="true">#</a> 常见问题解答</h3><ol><li><strong>启动AINode时出现找不到venv模块的报错</strong></li></ol><p>当使用默认方式启动AINode时,会在安装包目录下创建一个python虚拟环境并安装依赖,因此要求安装venv模块。通常来说python3.8及以上的版本会自带venv,但对于一些系统自带的python环境可能并不满足这一要求。出现该报错时有两种解决方案(二选一):</p><ul><li>在本地安装venv模块,以ubuntu为例,可以通过运行以下命令来安装python自带的venv模块。或者从python官网安装一个自带venv的python版本</li></ul><div class="language-SQL line-numbers-mode" data-ext="SQL"><pre class="language-SQL"><code>apt-get install python3.8-venv
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>在运行启动脚本时通过-i指定已有的python解释器路径作为AINode的运行环境,这样就不再需要创建一个新的虚拟环境。</li></ul><ol start="2"><li><strong>在CentOS7中编译python环境</strong></li></ol><p>在centos7的新环境中(自带python3.6)不满足启动mlnode的要求,需要自行编译python3.8+(python在centos7中未提供二进制包)</p><ul><li>安装OpenSSL</li></ul><blockquote><p>Currently Python versions 3.6 to 3.9 are compatible with OpenSSL 1.0.2, 1.1.0, and 1.1.1.</p></blockquote>`,81),Le={href:"https://stackoverflow.com/questions/56552390/how-to-fix-ssl-module-in-python-is-not-available-in-centos",target:"_blank",rel:"noopener noreferrer"},Re=n(`<ul><li>安装编译python</li></ul><p>使用以下指定从官网下载安装包并解压</p><div class="language-SQL line-numbers-mode" data-ext="SQL"><pre class="language-SQL"><code>wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar -zxvf Python-3.8.1.tgz
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>编译安装对应的python包</p><div class="language-SQL line-numbers-mode" data-ext="SQL"><pre class="language-SQL"><code>./configure prefix=/usr/local/python3 -with-openssl=/usr/local/openssl
make &amp;&amp; make install
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><ol start="3"><li><strong>windows下出现类似“error:Microsoft Visual</strong> <strong>C++</strong> <strong>14.0 or greater is required...”的编译问题</strong></li></ol>`,6),Oe={href:"https://stackoverflow.com/questions/44951456/pip-error-microsoft-visual-c-14-0-is-required%E4%B8%AD%E6%9F%A5%E6%89%BE%E9%80%82%E5%90%88%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E3%80%82",target:"_blank",rel:"noopener noreferrer"};function ze(Me,je){const s=o("RouterLink"),a=o("ExternalLinkIcon");return l(),c("div",null,[u(`
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
`),h,b,e("p",null,[d("本文将介绍关于 IoTDB 使用的基本流程,如果需要更多信息,请浏览我们官网的 "),t(s,{to:"/zh/UserGuide/latest/IoTDB-Introduction/What-is-IoTDB.html"},{default:i(()=>[d("指引")]),_:1}),d(".")]),v,m,g,_,f,e("ul",null,[N,e("li",null,[e("p",null,[d("二进制可运行程序:请从 "),e("a",x,[d("下载"),t(a)]),d(" 页面下载最新的安装包,解压后即完成安装。")])]),e("li",null,[e("p",null,[d("使用 Docker 镜像:dockerfile 文件位于"),e("a",I,[d("github"),t(a)])])])]),y,e("table",null,[k,e("tbody",null,[D,S,C,A,B,T,w,P,E,L,R,O,e("tr",null,[e("td",null,[e("a",z,[d("datanode-env.sh"),t(a)])]),M,j]),e("tr",null,[e("td",null,[e("a",W,[d("confignode-env.sh"),t(a)])]),K,U]),G,q,V])]),e("p",null,[e("a",X,[d("其中datanode-env.sh"),t(a)]),d(),e("a",J,[d("和confignode-env.sh"),t(a)]),d(" 可以配置额外参数extra_opts,"),e("a",Q,[d("当该参数配置后会在datanode-env.sh"),t(a)]),d(),e("a",H,[d("和confignode-env.sh"),t(a)]),d(" 后面追加对应的值,可参考default_cluster.yaml,配置示例如下:"),F,e("a",Z,[d("datanode-env.sh"),t(a)]),d(":"),Y,d(" extra_opts: |"),$,d(' IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+UseG1GC"'),ee,d(' IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:MaxGCPauseMillis=200"')]),de,e("p",null,[d("说明:"),e("a",te,[d("由于集群部署工具仅是调用了IoTDB集群中的start-confignode.sh和start-datanode.sh"),t(a)]),d(" 脚本,"),ae,d(" 在实际输出结果失败时有可能是集群还未正常启动,建议使用status命令进行查看当前集群状态(iotdbctl cluster status xxx)")]),ne,e("p",null,[d("说明:"),e("a",se,[d("由于集群部署工具仅是调用了IoTDB集群中的stop-confignode.sh和stop-datanode.sh"),t(a)]),d(" 脚本,在某些情况下有可能iotdb集群并未停止。")]),ie,e("ol",null,[e("li",null,[d("打开官网"),e("a",oe,[d("Download Page"),t(a)]),d("。")]),re,le]),ce,e("ol",null,[e("li",null,[d("打开官网"),e("a",ue,[d("Download Page"),t(a)]),d("。")]),pe,he]),be,e("p",null,[d("如果你希望先在一台服务器上尝试部署 IoTDB 集群,请参考"),ve,e("a",me,[d("Cluster Quick Start"),t(a)]),d("。")]),ge,e("p",null,[d("打开通用配置文件 ./conf/iotdb-common.properties,"),_e,d(" 可根据 "),t(s,{to:"/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html"},{default:i(()=>[d("部署推荐")]),_:1}),fe,d(" 设置以下参数:")]),Ne,e("p",null,[xe,d(" 请根据"),t(s,{to:"/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html"},{default:i(()=>[d("部署推荐")]),_:1}),d("配置合适的通用参数,这些参数在首次配置后即不可修改。")]),Ie,e("p",null,[d("ConfigNode 的其它配置参数可参考"),ye,t(s,{to:"/zh/UserGuide/latest/Reference/ConfigNode-Config-Manual.html"},{default:i(()=>[d("ConfigNode 配置参数")]),_:1}),d("。")]),ke,e("p",null,[d("ConfigNode 的其它配置参数可参考"),De,t(s,{to:"/zh/UserGuide/latest/Reference/ConfigNode-Config-Manual.html"},{default:i(()=>[d("ConfigNode 配置参数")]),_:1}),d("。")]),Se,e("p",null,[d("DataNode 的其它配置参数可参考"),Ce,t(s,{to:"/zh/UserGuide/latest/Reference/DataNode-Config-Manual.html"},{default:i(()=>[d("DataNode配置参数")]),_:1}),d(" 。")]),Ae,e("p",null,[d("若希望通过 Cli 连接生产环境的集群,"),Be,d(" 请阅读 "),t(s,{to:"/zh/UserGuide/latest/Tools-System/CLI.html"},{default:i(()=>[d("Cli 使用手册")]),_:1}),d(" 。")]),Te,e("p",null,[d("请参考 "),t(s,{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:i(()=>[d("分布式部署FAQ")]),_:1})]),we,e("p",null,[d("如果是非联网的环境,可以从 "),e("a",Pe,[d("https://cloud.tsinghua.edu.cn/d/4c1342f6c272439aa96c/"),t(a)]),d(" 中获取安装所需要的依赖包并离线安装。")]),Ee,e("p",null,[d("Python要求我们的系统上安装有OpenSSL,具体安装方法可见"),e("a",Le,[d("https://stackoverflow.com/questions/56552390/how-to-fix-ssl-module-in-python-is-not-available-in-centos"),t(a)])]),Re,e("p",null,[d("出现对应的报错,通常是c++版本或是setuptools版本不足,可以在"),e("a",Oe,[d("https://stackoverflow.com/questions/44951456/pip-error-microsoft-visual-c-14-0-is-required中查找适合的解决方案。"),t(a)])])])}const Ke=r(p,[["render",ze],["__file","Deployment-Guide_timecho.html.vue"]]);export{Ke as default};