blob: 47ae8e568ebff83b70d02c74adc691c2d3bdb577 [file] [log] [blame]
<!doctype html>
<html lang="en-US" data-theme="light">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="generator" content="VuePress 2.0.0-rc.9" />
<meta name="theme" content="VuePress Theme Hope 2.0.0-rc.34" />
<style>
html {
background: var(--bg-color, #fff);
}
html[data-theme="dark"] {
background: var(--bg-color, #1d1e1f);
}
body {
background: var(--bg-color);
}
</style>
<script>
const userMode = localStorage.getItem("vuepress-theme-hope-scheme");
const systemDarkMode =
window.matchMedia &&
window.matchMedia("(prefers-color-scheme: dark)").matches;
if (userMode === "dark" || (userMode !== "light" && systemDarkMode)) {
document.documentElement.setAttribute("data-theme", "dark");
}
</script>
<link rel="alternate" hreflang="zh-cn" href="https://iotdb.apache.org/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html"><meta property="og:url" content="https://iotdb.apache.org/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html"><meta property="og:site_name" content="IoTDB Website"><meta property="og:title" content="Deployment Guide"><meta property="og:description" content="Deployment Guide Stand-Alone Deployment This short guide will walk you through the basic process of using IoTDB. For a more-complete guide, please visit our website's . Prerequi..."><meta property="og:type" content="article"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="zh-CN"><meta property="og:updated_time" content="2024-03-29T10:15:18.000Z"><meta property="article:modified_time" content="2024-03-29T10:15:18.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Deployment Guide","image":[""],"dateModified":"2024-03-29T10:15:18.000Z","author":[]}</script><link rel="icon" href="/favicon.ico"><meta name="Description" content="Apache IoTDB: Time Series Database for IoT"><meta name="Keywords" content="TSDB, time series, time series database, IoTDB, IoT database, IoT data management,时序数据库, 时间序列管理, IoTDB, 物联网数据库, 实时数据库, 物联网数据管理, 物联网数据"><meta name="baidu-site-verification" content="wfKETzB3OT"><meta name="google-site-verification" content="mZWAoRY0yj_HAr-s47zHCGHzx5Ju-RVm5wDbPnwQYFo"><script type="text/javascript">
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(["setDoNotTrack", true]);
_paq.push(["disableCookies"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '56']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script><title>Deployment Guide | IoTDB Website</title><meta name="description" content="Deployment Guide Stand-Alone Deployment This short guide will walk you through the basic process of using IoTDB. For a more-complete guide, please visit our website's . Prerequi...">
<link rel="preload" href="/assets/style-DnEHAOmf.css" as="style"><link rel="stylesheet" href="/assets/style-DnEHAOmf.css">
<link rel="modulepreload" href="/assets/app-DrPcRZG6.js"><link rel="modulepreload" href="/assets/Deployment-Guide_timecho.html-D99dFnB0.js">
</head>
<body>
<div id="app"><!--[--><!--[--><!--[--><span tabindex="-1"></span><a href="#main-content" class="vp-skip-link sr-only">Skip to main content</a><!--]--><!--[--><div class="theme-container has-toc"><!--[--><header id="navbar" class="vp-navbar hide-icon"><div class="vp-navbar-start"><button type="button" class="vp-toggle-sidebar-button" title="Toggle Sidebar"><span class="icon"></span></button><!--[--><!----><!--]--><!--[--><a class="route-link vp-brand" href="/"><img class="vp-nav-logo" src="/logo.png" alt><!----><span class="vp-site-name hide-in-pad">IoTDB Website</span></a><!--]--><!--[--><!----><!--]--></div><div class="vp-navbar-center"><!--[--><!----><!--]--><!--[--><!--]--><!--[--><!----><!--]--></div><div class="vp-navbar-end"><!--[--><!----><!--]--><!--[--><!--[--><div id="docsearch-container" style="display:none;"></div><div><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"><svg width="15" height="15" class="DocSearch-Control-Key-Icon"><path d="M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953" stroke-width="1.2" stroke="currentColor" fill="none" stroke-linecap="square"></path></svg></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--><nav class="vp-nav-links"><div class="vp-nav-item hide-in-mobile"><div class="dropdown-wrapper"><button type="button" class="dropdown-title" aria-label="Documentation"><span class="title"><!---->Documentation</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a class="route-link nav-link" href="/UserGuide/latest/QuickStart/QuickStart.html" aria-label="v1.3.x"><!---->v1.3.x<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/UserGuide/V1.2.x/QuickStart/QuickStart.html" aria-label="v1.2.x"><!---->v1.2.x<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/UserGuide/V1.1.x/QuickStart/QuickStart.html" aria-label="v1.1.x"><!---->v1.1.x<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/UserGuide/V1.0.x/QuickStart/QuickStart.html" aria-label="v1.0.x"><!---->v1.0.x<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/UserGuide/V0.13.x/QuickStart/QuickStart.html" aria-label="v0.13.x"><!---->v0.13.x<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><a href="https://cwiki.apache.org/confluence/display/IOTDB/System+Design" rel="noopener noreferrer" target="_blank" aria-label="Design" class="nav-link"><!---->Design<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div><div class="vp-nav-item hide-in-mobile"><a class="route-link nav-link" href="/Download/" aria-label="Download"><!---->Download<!----></a></div><div class="vp-nav-item hide-in-mobile"><div class="dropdown-wrapper"><button type="button" class="dropdown-title" aria-label="Community"><span class="title"><!---->Community</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a class="route-link nav-link" href="/Community/About.html" aria-label="About"><!---->About<!----></a></li><li class="dropdown-item"><a href="https://cwiki.apache.org/confluence/display/iotdb" rel="noopener noreferrer" target="_blank" aria-label="Wiki" class="nav-link"><!---->Wiki<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Community/Community-Project-Committers.html" aria-label="People"><!---->People<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Community/Community-Powered-By.html" aria-label="Powered By"><!---->Powered By<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Community/Materials.html" aria-label="Resources"><!---->Resources<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Community/Feedback.html" aria-label="Feedback"><!---->Feedback<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><div class="dropdown-wrapper"><button type="button" class="dropdown-title" aria-label="Development"><span class="title"><!---->Development</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a class="route-link nav-link" href="/Development/VoteRelease.html" aria-label="How to vote"><!---->How to vote<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/HowToCommit.html" aria-label="How to Commit"><!---->How to Commit<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/HowToJoin.html" aria-label="Become a Contributor"><!---->Become a Contributor<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/Committer.html" aria-label="Become a Committer"><!---->Become a Committer<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/ContributeGuide.html" aria-label="ContributeGuide"><!---->ContributeGuide<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/HowtoContributeCode.html" aria-label="How to Contribute Code"><!---->How to Contribute Code<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/format-changelist.html" aria-label="Changelist of TsFile"><!---->Changelist of TsFile<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/Development/rpc-changelist.html" aria-label="Changelist of RPC"><!---->Changelist of RPC<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><div class="dropdown-wrapper"><button type="button" class="dropdown-title" aria-label="ASF"><span class="title"><!---->ASF</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a href="https://www.apache.org/" rel="noopener noreferrer" target="_blank" aria-label="Foundation" class="nav-link"><!---->Foundation<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://www.apache.org/licenses/" rel="noopener noreferrer" target="_blank" aria-label="License" class="nav-link"><!---->License<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://www.apache.org/security/" rel="noopener noreferrer" target="_blank" aria-label="Security" class="nav-link"><!---->Security<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://www.apache.org/foundation/sponsorship.html" rel="noopener noreferrer" target="_blank" aria-label="Sponsorship" class="nav-link"><!---->Sponsorship<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://www.apache.org/foundation/thanks.html" rel="noopener noreferrer" target="_blank" aria-label="Thanks" class="nav-link"><!---->Thanks<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://www.apache.org/events/current-event" rel="noopener noreferrer" target="_blank" aria-label="Current Events" class="nav-link"><!---->Current Events<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li><li class="dropdown-item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html" rel="noopener noreferrer" target="_blank" aria-label="Privacy" class="nav-link"><!---->Privacy<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></li></ul></button></div></div></nav><div class="vp-nav-item"><div class="dropdown-wrapper"><button type="button" class="dropdown-title" aria-label="Select language"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon i18n-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="i18n icon" style="width:1rem;height:1rem;vertical-align:middle;"><path d="M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z"></path></svg><!--]--><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a class="route-link nav-link active" href="/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html" aria-label="English"><!---->English<!----></a></li><li class="dropdown-item"><a class="route-link nav-link" href="/zh/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html" aria-label="简体中文"><!---->简体中文<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><button type="button" id="appearance-switch"><svg xmlns="http://www.w3.org/2000/svg" class="icon auto-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="auto icon" style="display:none;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon dark-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="dark icon" style="display:none;"><path d="M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon light-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="light icon" style="display:block;"><path d="M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"></path></svg></button></div><div class="vp-nav-item vp-action"><a class="vp-action-link" href="https://github.com/apache/iotdb" target="_blank" rel="noopener noreferrer" aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" class="icon github-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="github icon" style="width:1.25rem;height:1.25rem;vertical-align:middle;"><path d="M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"></path></svg></a></div><!--]--><!--[--><!----><!--]--><button type="button" class="vp-toggle-navbar-button" aria-label="Toggle Navbar" aria-expanded="false" aria-controls="nav-screen"><span><span class="vp-top"></span><span class="vp-middle"></span><span class="vp-bottom"></span></span></button></div></header><!----><!--]--><!----><div class="toggle-sidebar-wrapper"><span class="arrow start"></span></div><aside id="sidebar" class="vp-sidebar"><!--[--><!----><!--]--><ul class="vp-sidebar-links"><li><section class="vp-sidebar-group"><p class="vp-sidebar-header"><!----><span class="vp-sidebar-title">IoTDB User Guide (V1.3.x)</span><!----></p><ul class="vp-sidebar-links"></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">About IoTDB</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Quick Start</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Basic Concept</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Deployment &amp; Maintenance</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">User Manual</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Tools System</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">API</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Ecosystem Integration</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">SQL Manual</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">FAQ</span><span class="vp-arrow end"></span></button><!----></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><!----><span class="vp-sidebar-title">Reference</span><span class="vp-arrow end"></span></button><!----></section></li></ul><!--[--><!----><!--]--></aside><!--[--><main id="main-content" class="vp-page"><!--[--><!--[--><!----><!--]--><!----><nav class="vp-breadcrumb disable"></nav><div class="vp-page-title"><h1><!---->Deployment Guide</h1><div class="page-info"><!----><!----><span class="page-date-info" aria-label="Writing Date"><svg xmlns="http://www.w3.org/2000/svg" class="icon calendar-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="calendar icon"><path d="M716.4 110.137c0-18.753-14.72-33.473-33.472-33.473-18.753 0-33.473 14.72-33.473 33.473v33.473h66.993v-33.473zm-334.87 0c0-18.753-14.72-33.473-33.473-33.473s-33.52 14.72-33.52 33.473v33.473h66.993v-33.473zm468.81 33.52H716.4v100.465c0 18.753-14.72 33.473-33.472 33.473a33.145 33.145 0 01-33.473-33.473V143.657H381.53v100.465c0 18.753-14.72 33.473-33.473 33.473a33.145 33.145 0 01-33.473-33.473V143.657H180.6A134.314 134.314 0 0046.66 277.595v535.756A134.314 134.314 0 00180.6 947.289h669.74a134.36 134.36 0 00133.94-133.938V277.595a134.314 134.314 0 00-133.94-133.938zm33.473 267.877H147.126a33.145 33.145 0 01-33.473-33.473c0-18.752 14.72-33.473 33.473-33.473h736.687c18.752 0 33.472 14.72 33.472 33.473a33.145 33.145 0 01-33.472 33.473z"></path></svg><span><!----></span><meta property="datePublished" content="2023-07-10T03:11:17.000Z"></span><span class="page-pageview-info" aria-label="Page views"><svg xmlns="http://www.w3.org/2000/svg" class="icon eye-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="eye icon"><path d="M992 512.096c0-5.76-.992-10.592-1.28-11.136-.192-2.88-1.152-8.064-2.08-10.816-.256-.672-.544-1.376-.832-2.08-.48-1.568-1.024-3.104-1.6-4.32C897.664 290.112 707.104 160 512 160c-195.072 0-385.632 130.016-473.76 322.592-1.056 2.112-1.792 4.096-2.272 5.856a55.512 55.512 0 00-.64 1.6c-1.76 5.088-1.792 8.64-1.632 7.744-.832 3.744-1.568 11.168-1.568 11.168-.224 2.272-.224 4.032.032 6.304 0 0 .736 6.464 1.088 7.808.128 1.824.576 4.512 1.12 6.976h-.032c.448 2.08 1.12 4.096 1.984 6.08.48 1.536.992 2.976 1.472 4.032C126.432 733.856 316.992 864 512 864c195.136 0 385.696-130.048 473.216-321.696 1.376-2.496 2.24-4.832 2.848-6.912.256-.608.48-1.184.672-1.728 1.536-4.48 1.856-8.32 1.728-8.32l-.032.032c.608-3.104 1.568-7.744 1.568-13.28zM512 672c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160-71.776 160-160 160z"></path></svg><span id="ArtalkPV" class="vp-pageview waline-pageview-count" data-path="/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html" data-page-key="/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.html">...</span></span><span class="page-reading-time-info" aria-label="Reading Time"><svg xmlns="http://www.w3.org/2000/svg" class="icon timer-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="timer icon"><path d="M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"></path></svg><span>About 32 min</span><meta property="timeRequired" content="PT32M"></span><!----><!----></div><hr></div><div class="vp-toc-placeholder"><aside id="toc"><!--[--><!----><!--]--><div class="vp-toc-header">On This Page<button type="button" class="print-button" title="Print"><svg xmlns="http://www.w3.org/2000/svg" class="icon print-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="print icon"><path d="M819.2 364.8h-44.8V128c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v236.8h-44.8C145.067 364.8 96 413.867 96 473.6v192c0 59.733 49.067 108.8 108.8 108.8h44.8V896c0 17.067 14.933 32 32 32h460.8c17.067 0 32-14.933 32-32V774.4h44.8c59.733 0 108.8-49.067 108.8-108.8v-192c0-59.733-49.067-108.8-108.8-108.8zM313.6 160h396.8v204.8H313.6V160zm396.8 704H313.6V620.8h396.8V864zM864 665.6c0 25.6-19.2 44.8-44.8 44.8h-44.8V588.8c0-17.067-14.933-32-32-32H281.6c-17.067 0-32 14.933-32 32v121.6h-44.8c-25.6 0-44.8-19.2-44.8-44.8v-192c0-25.6 19.2-44.8 44.8-44.8h614.4c25.6 0 44.8 19.2 44.8 44.8v192z"></path></svg></button><div class="arrow end"></div></div><div class="vp-toc-wrapper"><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#stand-alone-deployment">Stand-Alone Deployment</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#prerequisites">Prerequisites</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#installation">Installation</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#download">Download</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#configurations">Configurations</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#start">Start</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#cluster-deployment-cluster-management-tool">Cluster deployment(Cluster management tool)</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#environment-dependence">Environment dependence</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#deployment-method">Deployment method</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#introduction-to-cluster-configuration-files">Introduction to cluster configuration files</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#scenes-to-be-used">scenes to be used</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#command">Command</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#detailed-command-execution-process">Detailed command execution process</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#introduction-to-cluster-deployment-tool-samples">Introduction to Cluster Deployment Tool Samples</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#manual-deployment">Manual Deployment</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#prerequisites-1">Prerequisites</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#get-the-installation-package">Get the Installation Package</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#binary-distribution-content">Binary Distribution Content</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#cluster-installation-and-configuration">Cluster Installation and Configuration</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#cluster-operation">Cluster Operation</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#faq">FAQ</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#ainode-deployment">AINode deployment</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#installation-environment">Installation environment</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#installation-steps">Installation steps</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#software-directory-structure">Software directory structure</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#start-ainode">Start AINode</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#remove-ainode">Remove AINode</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#stop-ainode">Stop AINode</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#script-parameter-details">Script parameter details</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#ainode-configuration-items">AINode configuration items</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#frequently-asked-questions">Frequently Asked Questions</a></li><!----><!--]--></ul></li><!--]--></ul><div class="vp-toc-marker" style="top:-1.7rem;"></div></div><!--[--><!----><!--]--></aside></div><!--[--><!----><!--]--><div class="theme-hope-content"><h1 id="deployment-guide" tabindex="-1"><a class="header-anchor" href="#deployment-guide"><span>Deployment Guide</span></a></h1><h2 id="stand-alone-deployment" tabindex="-1"><a class="header-anchor" href="#stand-alone-deployment"><span>Stand-Alone Deployment</span></a></h2><p>This short guide will walk you through the basic process of using IoTDB. For a more-complete guide, please visit our website&#39;s <a class="route-link" href="/UserGuide/latest/IoTDB-Introduction/What-is-IoTDB.html">User Guide</a>.</p><h3 id="prerequisites" tabindex="-1"><a class="header-anchor" href="#prerequisites"><span>Prerequisites</span></a></h3><p>To use IoTDB, you need to have:</p><ol><li>Java &gt;= 1.8 (Please make sure the environment path has been set)</li><li>Set the max open files num as 65535 to avoid &quot;too many open files&quot; problem.</li></ol><h3 id="installation" tabindex="-1"><a class="header-anchor" href="#installation"><span>Installation</span></a></h3><p>IoTDB provides you three installation methods, you can refer to the following suggestions, choose one of them:</p><ul><li>Installation from source code. If you need to modify the code yourself, you can use this method.</li><li>Installation from binary files. Download the binary files from the official website. This is the recommended method, in which you will get a binary released package which is out-of-the-box.</li><li>Using Docker:The path to the dockerfile is <a href="https://github.com/apache/iotdb/blob/master/docker/src/main" target="_blank" rel="noopener noreferrer">github<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></li></ul><h3 id="download" tabindex="-1"><a class="header-anchor" href="#download"><span>Download</span></a></h3><p>You can download the binary file from:<br><a href="https://iotdb.apache.org/Download/" target="_blank" rel="noopener noreferrer">Download Page<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><h3 id="configurations" tabindex="-1"><a class="header-anchor" href="#configurations"><span>Configurations</span></a></h3><p>Configuration files are under &quot;conf&quot; folder</p><ul><li>environment config module (<code>datanode-env.bat</code>, <code>datanode-env.sh</code>),</li><li>system config module (<code>iotdb-datanode.properties</code>)</li><li>log config module (<code>logback.xml</code>).</li></ul><p>For more, see <a class="route-link" href="/UserGuide/latest/Reference/DataNode-Config-Manual.html">Config</a> in detail.</p><h3 id="start" tabindex="-1"><a class="header-anchor" href="#start"><span>Start</span></a></h3><p>You can go through the following step to test the installation, if there is no error after execution, the installation is completed.</p><h4 id="start-iotdb" tabindex="-1"><a class="header-anchor" href="#start-iotdb"><span>Start IoTDB</span></a></h4><p>IoTDB is a database based on distributed system. To launch IoTDB, you can first start standalone mode (i.e. 1 ConfigNode and 1 DataNode) to check.</p><p>Users can start IoTDB standalone mode by the start-standalone script under the sbin folder.</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Unix/OS X
&gt; bash sbin/start-standalone.sh
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Windows
&gt; sbin\start-standalone.bat
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="cluster-deployment-cluster-management-tool" tabindex="-1"><a class="header-anchor" href="#cluster-deployment-cluster-management-tool"><span>Cluster deployment(Cluster management tool)</span></a></h2><p>The IoTDB cluster management tool is an easy-to-use operation and maintenance tool (enterprise version tool).<br> It is designed to solve the operation and maintenance problems of multiple nodes in the IoTDB distributed system.<br> It mainly includes cluster deployment, cluster start and stop, elastic expansion, configuration update, data export and other functions, thereby realizing one-click command issuance for complex database clusters, which greatly Reduce management difficulty.<br> This document will explain how to remotely deploy, configure, start and stop IoTDB cluster instances with cluster management tools.</p><h3 id="environment-dependence" tabindex="-1"><a class="header-anchor" href="#environment-dependence"><span>Environment dependence</span></a></h3><p>This tool is a supporting tool for TimechoDB(Enterprise Edition based on IoTDB). You can contact your sales representative to obtain the tool download method.</p><p>The machine where IoTDB is to be deployed needs to rely on jdk 8 and above, lsof, netstat, and unzip functions. If not, please install them yourself. You can refer to the installation commands required for the environment in the last section of the document.</p><p>Tip: The IoTDB cluster management tool requires an account with root privileges</p><h3 id="deployment-method" tabindex="-1"><a class="header-anchor" href="#deployment-method"><span>Deployment method</span></a></h3><h4 id="download-and-install" tabindex="-1"><a class="header-anchor" href="#download-and-install"><span>Download and install</span></a></h4><p>This tool is a supporting tool for TimechoDB(Enterprise Edition based on IoTDB). You can contact your salesperson to obtain the tool download method.</p><p>Note: Since the binary package only supports GLIBC2.17 and above, the minimum version is Centos7.</p><ul><li>After entering the following commands in the iotdb-opskit directory:</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>The iotdbctl keyword can be activated in the subsequent shell, such as checking the environment instructions required before deployment as follows:</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>You can also directly use &lt;iotdbctl absolute path&gt;/sbin/iotdbctl without activating iotdbctl to execute commands, such as checking the environment required before deployment:</li></ul><div class="language-bash line-numbers-mode" data-ext="sh" data-title="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="introduction-to-cluster-configuration-files" tabindex="-1"><a class="header-anchor" href="#introduction-to-cluster-configuration-files"><span>Introduction to cluster configuration files</span></a></h3><ul><li>There is a cluster configuration yaml file in the <code>iotdbctl/config</code> directory. The yaml file name is the cluster name. There can be multiple yaml files. In order to facilitate users to configure yaml files, a <code>default_cluster.yaml</code> example is provided under the iotdbctl/config directory.</li><li>The yaml file configuration consists of five major parts: <code>global</code>, <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana_server</code>, and <code>prometheus_server</code></li><li><code>global</code> is a general configuration that mainly configures machine username and password, IoTDB local installation files, Jdk configuration, etc. A <code>default_cluster.yaml</code> sample data is provided in the <code>iotdbctl/config</code> directory,<br> Users can copy and modify it to their own cluster name and refer to the instructions inside to configure the IoTDB cluster. In the <code>default_cluster.yaml</code> sample, all uncommented items are required, and those that have been commented are non-required.</li></ul><p>例如要执行<code>default_cluster.yaml</code>检查命令则需要执行命令<code>iotdbctl cluster check default_cluster</code>即可,<br> 更多详细命令请参考下面命令列表。</p><table><thead><tr><th>parameter name</th><th>parameter describe</th><th>required</th></tr></thead><tbody><tr><td>iotdb_zip_dir</td><td>IoTDB deployment distribution directory, if the value is empty, it will be downloaded from the address specified by <code>iotdb_download_url</code></td><td>NO</td></tr><tr><td>iotdb_download_url</td><td>IoTDB download address, if <code>iotdb_zip_dir</code> has no value, download from the specified address</td><td>NO</td></tr><tr><td>jdk_tar_dir</td><td>jdk local directory, you can use this jdk path to upload and deploy to the target node.</td><td>NO</td></tr><tr><td>jdk_deploy_dir</td><td>jdk remote machine deployment directory, jdk will be deployed to this directory, and the following <code>jdk_dir_name</code> parameter forms a complete jdk deployment directory, that is, <code>&lt;jdk_deploy_dir&gt;/&lt;jdk_dir_name&gt;</code></td><td>NO</td></tr><tr><td>jdk_dir_name</td><td>The directory name after jdk decompression defaults to jdk_iotdb</td><td>NO</td></tr><tr><td>iotdb_lib_dir</td><td>The IoTDB lib directory or the IoTDB lib compressed package only supports .zip format and is only used for IoTDB upgrade. It is in the comment state by default. If you need to upgrade, please open the comment and modify the path. If you use a zip file, please use the zip command to compress the iotdb/lib directory, such as zip -r lib.zip apache-iotdb-1.2.0/lib/* d</td><td>NO</td></tr><tr><td>user</td><td>User name for ssh login deployment machine</td><td>YES</td></tr><tr><td>password</td><td>The password for ssh login. If the password does not specify the use of pkey to log in, please ensure that the ssh login between nodes has been configured without a key.</td><td>NO</td></tr><tr><td>pkey</td><td>Key login: If password has a value, password is used first, otherwise pkey is used to log in.</td><td>NO</td></tr><tr><td>ssh_port</td><td>ssh port</td><td>YES</td></tr><tr><td>deploy_dir</td><td>IoTDB deployment directory, IoTDB will be deployed to this directory and the following <code>iotdb_dir_name</code> parameter will form a complete IoTDB deployment directory, that is, <code>&lt;deploy_dir&gt;/&lt;iotdb_dir_name&gt;</code></td><td>YES</td></tr><tr><td>iotdb_dir_name</td><td>The directory name after decompression of IoTDB is iotdb by default.</td><td>NO</td></tr><tr><td><a href="http://datanode-env.sh" target="_blank" rel="noopener noreferrer">datanode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></td><td>Corresponding to <code>iotdb/config/datanode-env.sh</code>, when <code>global</code> and <code>confignode_servers</code> are configured at the same time, the value in <code>confignode_servers</code> is used first</td><td>NO</td></tr><tr><td><a href="http://confignode-env.sh" target="_blank" rel="noopener noreferrer">confignode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></td><td>Corresponding to <code>iotdb/config/confignode-env.sh</code>, the value in <code>datanode_servers</code> is used first when <code>global</code> and <code>datanode_servers</code> are configured at the same time</td><td>NO</td></tr><tr><td>iotdb-common.properties</td><td>Corresponds to <code>&lt;iotdb path&gt;/config/iotdb-common.properties</code></td><td>NO</td></tr><tr><td>cn_internal_address</td><td>The cluster configuration address points to the surviving ConfigNode, and it points to confignode_x by default. When <code>global</code> and <code>confignode_servers</code> are configured at the same time, the value in <code>confignode_servers</code> is used first, corresponding to <code>cn_internal_address</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>YES</td></tr><tr><td>dn_internal_address</td><td>The cluster configuration address points to the surviving ConfigNode, and points to confignode_x by default. When configuring values for <code>global</code> and <code>datanode_servers</code> at the same time, the value in <code>datanode_servers</code> is used first, corresponding to <code>dn_internal_address</code> in <code>iotdb/config/iotdb-datanode.properties</code></td><td>YES</td></tr></tbody></table><p>Among them, <a href="http://datanode-env.sh" target="_blank" rel="noopener noreferrer">datanode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> and <a href="http://confignode-env.sh" target="_blank" rel="noopener noreferrer">confignode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> can be configured with extra parameters extra_opts. When this parameter is configured, corresponding values will be appended after <a href="http://datanode-env.sh" target="_blank" rel="noopener noreferrer">datanode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> and <a href="http://confignode-env.sh" target="_blank" rel="noopener noreferrer">confignode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>. Refer to default_cluster.yaml for configuration examples as follows:<br><a href="http://datanode-env.sh" target="_blank" rel="noopener noreferrer">datanode-env.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>:<br> extra_opts: |<br> IOTDB_JMX_OPTS=&quot;$IOTDB_JMX_OPTS -XX:+UseG1GC&quot;<br> IOTDB_JMX_OPTS=&quot;$IOTDB_JMX_OPTS -XX:MaxGCPauseMillis=200&quot;</p><ul><li><code>confignode_servers</code> is the configuration for deploying IoTDB Confignodes, in which multiple Confignodes can be configured<br> By default, the first started ConfigNode node node1 is regarded as the Seed-ConfigNode</li></ul><table><thead><tr><th>parameter name</th><th>parameter describe</th><th>required</th></tr></thead><tbody><tr><td>name</td><td>Confignode name</td><td>YES</td></tr><tr><td>deploy_dir</td><td>IoTDB config node deployment directory</td><td>YES</td></tr><tr><td>iotdb-confignode.properties</td><td>Corresponding to <code>iotdb/config/iotdb-confignode.properties</code>, please refer to the <code>iotdb-confignode.properties</code> file description for more details.</td><td>NO</td></tr><tr><td>cn_internal_address</td><td>Corresponds to iotdb/internal communication address, corresponding to <code>cn_internal_address</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>YES</td></tr><tr><td>cn_internal_address</td><td>The cluster configuration address points to the surviving ConfigNode, and it points to confignode_x by default. When <code>global</code> and <code>confignode_servers</code> are configured at the same time, the value in <code>confignode_servers</code> is used first, corresponding to <code>cn_internal_address</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>YES</td></tr><tr><td>cn_internal_port</td><td>Internal communication port, corresponding to <code>cn_internal_port</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>YES</td></tr><tr><td>cn_consensus_port</td><td>Corresponds to <code>cn_consensus_port</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>NO</td></tr><tr><td>cn_data_dir</td><td>Corresponds to <code>cn_consensus_port</code> in <code>iotdb/config/iotdb-confignode.properties</code> Corresponds to <code>cn_data_dir</code> in <code>iotdb/config/iotdb-confignode.properties</code></td><td>YES</td></tr><tr><td>iotdb-common.properties</td><td>Corresponding to <code>iotdb/config/iotdb-common.properties</code>, when configuring values in <code>global</code> and <code>confignode_servers</code> at the same time, the value in confignode_servers will be used first.</td><td>NO</td></tr></tbody></table><ul><li>datanode_servers 是部署IoTDB Datanodes配置,里面可以配置多个Datanode</li></ul><table><thead><tr><th>parameter name</th><th>parameter describe</th><th>required</th></tr></thead><tbody><tr><td>name</td><td>Datanode name</td><td>YES</td></tr><tr><td>deploy_dir</td><td>IoTDB data node deployment directory</td><td>YES</td></tr><tr><td>iotdb-datanode.properties</td><td>Corresponding to <code>iotdb/config/iotdb-datanode.properties</code>, please refer to the <code>iotdb-datanode.properties</code> file description for more details.</td><td>NO</td></tr><tr><td>dn_rpc_address</td><td>The datanode rpc address corresponds to <code>dn_rpc_address</code> in <code>iotdb/config/iotdb-datanode.properties</code></td><td>YES</td></tr><tr><td>dn_internal_address</td><td>Internal communication address, corresponding to <code>dn_internal_address</code> in <code>iotdb/config/iotdb-datanode.properties</code></td><td>YES</td></tr><tr><td>dn_seed_config_node</td><td>The cluster configuration address points to the surviving ConfigNode, and points to confignode_x by default. When configuring values for <code>global</code> and <code>datanode_servers</code> at the same time, the value in <code>datanode_servers</code> is used first, corresponding to <code>dn_seed_config_node</code> in <code>iotdb/config/iotdb-datanode.properties</code>.</td><td>YES</td></tr><tr><td>dn_rpc_port</td><td>Datanode rpc port address, corresponding to <code>dn_rpc_port</code> in <code>iotdb/config/iotdb-datanode.properties</code></td><td>YES</td></tr><tr><td>dn_internal_port</td><td>Internal communication port, corresponding to <code>dn_internal_port</code> in <code>iotdb/config/iotdb-datanode.properties</code></td><td>YES</td></tr><tr><td>iotdb-common.properties</td><td>Corresponding to <code>iotdb/config/iotdb-common.properties</code>, when configuring values in <code>global</code> and <code>datanode_servers</code> at the same time, the value in <code>datanode_servers</code> will be used first.</td><td>NO</td></tr></tbody></table><ul><li>grafana_server is the configuration related to deploying Grafana</li></ul><table><thead><tr><th>parameter name</th><th>parameter describe</th><th>required</th></tr></thead><tbody><tr><td>grafana_dir_name</td><td>Grafana decompression directory name(default grafana_iotdb)</td><td>NO</td></tr><tr><td>host</td><td>Server ip deployed by grafana</td><td>YES</td></tr><tr><td>grafana_port</td><td>The port of grafana deployment machine, default 3000</td><td>NO</td></tr><tr><td>deploy_dir</td><td>grafana deployment server directory</td><td>YES</td></tr><tr><td>grafana_tar_dir</td><td>Grafana compressed package location</td><td>YES</td></tr><tr><td>dashboards</td><td>dashboards directory</td><td>NO</td></tr></tbody></table><ul><li>prometheus_server 是部署Prometheus 相关配置</li></ul><table><thead><tr><th>parameter name</th><th>parameter describe</th><th>required</th></tr></thead><tbody><tr><td>prometheus_dir_name</td><td>prometheus decompression directory name, default prometheus_iotdb</td><td>NO</td></tr><tr><td>host</td><td>Server IP deployed by prometheus</td><td>YES</td></tr><tr><td>prometheus_port</td><td>The port of prometheus deployment machine, default 9090</td><td>NO</td></tr><tr><td>deploy_dir</td><td>prometheus deployment server directory</td><td>YES</td></tr><tr><td>prometheus_tar_dir</td><td>prometheus compressed package path</td><td>YES</td></tr><tr><td>storage_tsdb_retention_time</td><td>The number of days to save data is 15 days by default</td><td>NO</td></tr><tr><td>storage_tsdb_retention_size</td><td>The data size that can be saved by the specified block defaults to 512M. Please note the units are KB, MB, GB, TB, PB, and EB.</td><td>NO</td></tr></tbody></table><p>If metrics are configured in <code>iotdb-datanode.properties</code> and <code>iotdb-confignode.properties</code> of config/xxx.yaml, the configuration will be automatically put into promethues without manual modification.</p><p>Note: How to configure the value corresponding to the yaml key to contain special characters such as: etc. It is recommended to use double quotes for the entire value, and do not use paths containing spaces in the corresponding file paths to prevent abnormal recognition problems.</p><h3 id="scenes-to-be-used" tabindex="-1"><a class="header-anchor" href="#scenes-to-be-used"><span>scenes to be used</span></a></h3><h4 id="clean-data" tabindex="-1"><a class="header-anchor" href="#clean-data"><span>Clean data</span></a></h4><ul><li>Cleaning up the cluster data scenario will delete the data directory in the IoTDB cluster and <code>cn_system_dir</code>, <code>cn_consensus_dir</code>, <code>cn_consensus_dir</code> configured in the yaml file<br><code>dn_data_dirs</code>, <code>dn_consensus_dir</code>, <code>dn_system_dir</code>, <code>logs</code> and <code>ext</code> directories.</li><li>First execute the stop cluster command, and then execute the cluster cleanup command.</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="cluster-destruction" tabindex="-1"><a class="header-anchor" href="#cluster-destruction"><span>Cluster destruction</span></a></h4><ul><li>The cluster destruction scenario will delete <code>data</code>, <code>cn_system_dir</code>, <code>cn_consensus_dir</code>, in the IoTDB cluster<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> deployment directory,<br> grafana deployment directory and prometheus deployment directory.</li><li>First execute the stop cluster command, and then execute the cluster destruction command.</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="cluster-upgrade" tabindex="-1"><a class="header-anchor" href="#cluster-upgrade"><span>Cluster upgrade</span></a></h4><ul><li>To upgrade the cluster, you first need to configure <code>iotdb_lib_dir</code> in config/xxx.yaml as the directory path where the jar to be uploaded to the server is located (for example, iotdb/lib).</li><li>If you use zip files to upload, please use the zip command to compress the iotdb/lib directory, such as zip -r lib.zip apache-iotdb-1.2.0/lib/*</li><li>Execute the upload command and then execute the restart IoTDB cluster command to complete the cluster upgrade.</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="hot-deployment" tabindex="-1"><a class="header-anchor" href="#hot-deployment"><span>hot deployment</span></a></h4><ul><li>First modify the configuration in config/xxx.yaml.</li><li>Execute the distribution command, and then execute the hot deployment command to complete the hot deployment of the cluster configuration</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="cluster-expansion" tabindex="-1"><a class="header-anchor" href="#cluster-expansion"><span>Cluster expansion</span></a></h4><ul><li>First modify and add a datanode or confignode node in config/xxx.yaml.</li><li>Execute the cluster expansion command</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="cluster-scaling" tabindex="-1"><a class="header-anchor" href="#cluster-scaling"><span>Cluster scaling</span></a></h4><ul><li>First find the node name or ip+port to shrink in config/xxx.yaml (where confignode port is cn_internal_port, datanode port is rpc_port)</li><li>Execute cluster shrink command</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="using-cluster-management-tools-to-manipulate-existing-iotdb-clusters" tabindex="-1"><a class="header-anchor" href="#using-cluster-management-tools-to-manipulate-existing-iotdb-clusters"><span>Using cluster management tools to manipulate existing IoTDB clusters</span></a></h4><ul><li>Configure the server&#39;s <code>user</code>, <code>passwod</code> or <code>pkey</code>, <code>ssh_port</code></li><li>Modify the IoTDB deployment path in config/xxx.yaml, <code>deploy_dir</code> (IoTDB deployment directory), <code>iotdb_dir_name</code> (IoTDB decompression directory name, the default is iotdb)<br> For example, if the full path of IoTDB deployment is <code>/home/data/apache-iotdb-1.1.1</code>, you need to modify the yaml files <code>deploy_dir:/home/data/</code> and <code>iotdb_dir_name:apache-iotdb-1.1.1</code></li><li>If the server is not using java_home, modify <code>jdk_deploy_dir</code> (jdk deployment directory) and <code>jdk_dir_name</code> (the directory name after jdk decompression, the default is jdk_iotdb). If java_home is used, there is no need to modify the configuration.<br> For example, the full path of jdk deployment is <code>/home/data/jdk_1.8.2</code>, you need to modify the yaml files <code>jdk_deploy_dir:/home/data/</code>, <code>jdk_dir_name:jdk_1.8.2</code></li><li>Configure <code>cn_internal_address</code>, <code>dn_internal_address</code></li><li>Configure <code>cn_internal_address</code>, <code>cn_internal_port</code>, <code>cn_consensus_port</code>, <code>cn_system_dir</code>, in <code>iotdb-confignode.properties</code> in <code>confignode_servers</code><br> If the values in <code>cn_consensus_dir</code> and <code>iotdb-common.properties</code> are not the default for IoTDB, they need to be configured, otherwise there is no need to configure them.</li><li>Configure <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> and <code>iotdb-common.properties</code> in <code>iotdb-datanode.properties</code> in <code>datanode_servers</code></li><li>Execute initialization command</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="deploy-iotdb-grafana-and-prometheus" tabindex="-1"><a class="header-anchor" href="#deploy-iotdb-grafana-and-prometheus"><span>Deploy IoTDB, Grafana and Prometheus</span></a></h4><ul><li>Configure <code>iotdb-datanode.properties</code>, <code>iotdb-confignode.properties</code> to open the metrics interface</li><li>Configure the Grafana configuration. If there are multiple <code>dashboards</code>, separate them with commas. The names cannot be repeated or they will be overwritten.</li><li>Configure the Prometheus configuration. If the IoTDB cluster is configured with metrics, there is no need to manually modify the Prometheus configuration. The Prometheus configuration will be automatically modified according to which node is configured with metrics.</li><li>Start the cluster</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>For more detailed parameters, please refer to the cluster configuration file introduction above</p><h3 id="command" tabindex="-1"><a class="header-anchor" href="#command"><span>Command</span></a></h3><p>The basic usage of this tool is:</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">&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 indicates a specific command.</p></li><li><p>cluster name indicates the cluster name (that is, the name of the yaml file in the <code>iotdbctl/config</code> file).</p></li><li><p>params indicates the required parameters of the command (optional).</p></li><li><p>For example, the command format to deploy the default_cluster cluster is:</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>The functions and parameters of the cluster are listed as follows:</li></ul><table><thead><tr><th>command</th><th>description</th><th>parameter</th></tr></thead><tbody><tr><td>check</td><td>check whether the cluster can be deployed</td><td>Cluster name list</td></tr><tr><td>clean</td><td>cleanup-cluster</td><td>cluster-name</td></tr><tr><td>deploy</td><td>deploy cluster</td><td>Cluster name, -N, module name (optional for iotdb, grafana, prometheus), -op force (optional)</td></tr><tr><td>list</td><td>cluster status list</td><td>None</td></tr><tr><td>start</td><td>start cluster</td><td>Cluster name, -N, node name (nodename, grafana, prometheus optional)</td></tr><tr><td>stop</td><td>stop cluster</td><td>Cluster name, -N, node name (nodename, grafana, prometheus optional), -op force (nodename, grafana, prometheus optional)</td></tr><tr><td>restart</td><td>restart cluster</td><td>Cluster name, -N, node name (nodename, grafana, prometheus optional), -op force (nodename, grafana, prometheus optional)</td></tr><tr><td>show</td><td>view cluster information. The details field indicates the details of the cluster information.</td><td>Cluster name, details (optional)</td></tr><tr><td>destroy</td><td>destroy cluster</td><td>Cluster name, -N, module name (iotdb, grafana, prometheus optional)</td></tr><tr><td>scaleout</td><td>cluster expansion</td><td>Cluster name</td></tr><tr><td>scalein</td><td>cluster shrink</td><td>Cluster name, -N, cluster node name or cluster node ip+port</td></tr><tr><td>reload</td><td>hot loading of cluster configuration files</td><td>Cluster name</td></tr><tr><td>distribute</td><td>cluster configuration file distribution</td><td>Cluster name</td></tr><tr><td>dumplog</td><td>Back up specified cluster logs</td><td>Cluster name, -N, cluster node name -h Back up to target machine ip -pw Back up to target machine password -p Back up to target machine port -path Backup directory -startdate Start time -enddate End time -loglevel Log type -l transfer speed</td></tr><tr><td>dumpdata</td><td>Backup cluster data</td><td>Cluster name, -h backup to target machine ip -pw backup to target machine password -p backup to target machine port -path backup directory -startdate start time -enddate end time -l transmission speed</td></tr><tr><td>upgrade</td><td>lib package upgrade</td><td>Cluster name</td></tr><tr><td>init</td><td>When an existing cluster uses the cluster deployment tool, initialize the cluster configuration</td><td>Cluster name</td></tr><tr><td>status</td><td>View process status</td><td>Cluster name</td></tr><tr><td>activate</td><td>Activate cluster</td><td>Cluster name</td></tr></tbody></table><h3 id="detailed-command-execution-process" tabindex="-1"><a class="header-anchor" href="#detailed-command-execution-process"><span>Detailed command execution process</span></a></h3><p>The following commands are executed using default_cluster.yaml as an example, and users can modify them to their own cluster files to execute</p><h4 id="check-cluster-deployment-environment-commands" tabindex="-1"><a class="header-anchor" href="#check-cluster-deployment-environment-commands"><span>Check cluster deployment environment commands</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Verify that the target node is able to log in via SSH</p></li><li><p>Verify whether the JDK version on the corresponding node meets IoTDB jdk1.8 and above, and whether the server is installed with unzip, lsof, and netstat.</p></li><li><p>If you see the following prompt <code>Info:example check successfully!</code>, it proves that the server has already met the installation requirements.<br> If <code>Error:example check fail!</code> is output, it proves that some conditions do not meet the requirements. You can check the Error log output above (for example: <code>Error:Server (ip:172.20.31.76) iotdb port(10713) is listening</code>) to make repairs. ,<br> If the jdk check does not meet the requirements, we can configure a jdk1.8 or above version in the yaml file ourselves for deployment without affecting subsequent use.<br> If checking lsof, netstat or unzip does not meet the requirements, you need to install it on the server yourself.</p></li></ul><h4 id="deploy-cluster-command" tabindex="-1"><a class="header-anchor" href="#deploy-cluster-command"><span>Deploy cluster command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Upload IoTDB compressed package and jdk compressed package according to the node information in <code>confignode_servers</code> and <code>datanode_servers</code> (if <code>jdk_tar_dir</code> and <code>jdk_deploy_dir</code> values ​​are configured in yaml)</p></li><li><p>Generate and upload <code>iotdb-common.properties</code>, <code>iotdb-confignode.properties</code>, <code>iotdb-datanode.properties</code> according to the yaml file node configuration information</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>Note: This command will force the deployment, and the specific process will delete the existing deployment directory and redeploy</p><p><em>deploy a single module</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment"># Deploy grafana module</span>
iotdbctl cluster deploy default_cluster <span class="token parameter variable">-N</span> grafana
<span class="token comment"># Deploy the prometheus module</span>
iotdbctl cluster deploy default_cluster <span class="token parameter variable">-N</span> prometheus
<span class="token comment"># Deploy the iotdb module</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="start-cluster-command" tabindex="-1"><a class="header-anchor" href="#start-cluster-command"><span>Start cluster command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Start confignode, start sequentially according to the order in <code>confignode_servers</code> in the yaml configuration file and check whether the confignode is normal according to the process id, the first confignode is seek config</p></li><li><p>Start the datanode in sequence according to the order in <code>datanode_servers</code> in the yaml configuration file and check whether the datanode is normal according to the process id.</p></li><li><p>After checking the existence of the process according to the process id, check whether each service in the cluster list is normal through the cli. If the cli link fails, retry every 10s until it succeeds and retry up to 5 times</p></li><li></li></ul><p>Start a single node command*</p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#Start according to the IoTDB node name</span>
iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> datanode_1
<span class="token comment">#Start according to IoTDB cluster ip+port, where port corresponds to cn_internal_port of confignode and rpc_port of datanode.</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">#Start grafana</span>
iotdbctl cluster start default_cluster <span class="token parameter variable">-N</span> grafana
<span class="token comment">#Start 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>Find the yaml file in the default location based on cluster-name</p></li><li><p>Find the node location information based on the provided node name or ip:port. If the started node is <code>data_node</code>, the ip uses <code>dn_rpc_address</code> in the yaml file, and the port uses <code>dn_rpc_port</code> in datanode_servers in the yaml file.<br> If the started node is <code>config_node</code>, the ip uses <code>cn_internal_address</code> in confignode_servers in the yaml file, and the port uses <code>cn_internal_port</code></p></li><li><p>start the node</p></li></ul><p>Note: Since the cluster deployment tool only calls the <a href="http://start-confignode.sh" target="_blank" rel="noopener noreferrer">start-confignode.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> and <a href="http://start-datanode.sh" target="_blank" rel="noopener noreferrer">start-datanode.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> scripts in the IoTDB cluster,<br> When the actual output result fails, it may be that the cluster has not started normally. It is recommended to use the status command to check the current cluster status (iotdbctl cluster status xxx)</p><h4 id="view-iotdb-cluster-status-command" tabindex="-1"><a class="header-anchor" href="#view-iotdb-cluster-status-command"><span>View IoTDB cluster status command</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">#View IoTDB cluster details</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Execute <code>show cluster details</code> through cli on datanode in turn. If one node is executed successfully, it will not continue to execute cli on subsequent nodes and return the result directly.</p></li></ul><h4 id="stop-cluster-command" tabindex="-1"><a class="header-anchor" href="#stop-cluster-command"><span>Stop cluster command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>According to the datanode node information in <code>datanode_servers</code>, stop the datanode nodes in order according to the configuration.</p></li><li><p>Based on the confignode node information in <code>confignode_servers</code>, stop the confignode nodes in sequence according to the configuration</p></li></ul><p><em>force stop cluster command</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>Will directly execute the kill -9 pid command to forcibly stop the cluster</p><p><em>Stop single node command</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#Stop by IoTDB node name</span>
iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> datanode_1
<span class="token comment">#Stop according to IoTDB cluster ip+port (ip+port is to get the only node according to ip+dn_rpc_port in datanode or ip+cn_internal_port in confignode to get the only node)</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">#Stop grafana</span>
iotdbctl cluster stop default_cluster <span class="token parameter variable">-N</span> grafana
<span class="token comment">#Stop 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>Find the yaml file in the default location based on cluster-name</p></li><li><p>Find the corresponding node location information based on the provided node name or ip:port. If the stopped node is <code>data_node</code>, the ip uses <code>dn_rpc_address</code> in the yaml file, and the port uses <code>dn_rpc_port</code> in datanode_servers in the yaml file.<br> If the stopped node is <code>config_node</code>, the ip uses <code>cn_internal_address</code> in confignode_servers in the yaml file, and the port uses <code>cn_internal_port</code></p></li><li><p>stop the node</p></li></ul><p>Note: Since the cluster deployment tool only calls the <a href="http://stop-confignode.sh" target="_blank" rel="noopener noreferrer">stop-confignode.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> and <a href="http://stop-datanode.sh" target="_blank" rel="noopener noreferrer">stop-datanode.sh<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> scripts in the IoTDB cluster, in some cases the iotdb cluster may not be stopped.</p><h4 id="clean-cluster-data-command" tabindex="-1"><a class="header-anchor" href="#clean-cluster-data-command"><span>Clean cluster data command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Based on the information in <code>confignode_servers</code> and <code>datanode_servers</code>, check whether there are still services running,<br> If any service is running, the cleanup command will not be executed.</p></li><li><p>Delete the data directory in the IoTDB cluster and the <code>cn_system_dir</code>, <code>cn_consensus_dir</code>, configured in the yaml file<br><code>dn_data_dirs</code>, <code>dn_consensus_dir</code>, <code>dn_system_dir</code>, <code>logs</code> and <code>ext</code> directories.</p></li></ul><h4 id="restart-cluster-command" tabindex="-1"><a class="header-anchor" href="#restart-cluster-command"><span>Restart cluster command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana</code> and <code>prometheus</code></p></li><li><p>Execute the above stop cluster command (stop), and then execute the start cluster command (start). For details, refer to the above start and stop commands.</p></li></ul><p><em>Force restart cluster command</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>Will directly execute the kill -9 pid command to force stop the cluster, and then start the cluster</p><p><em>Restart a single node command</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment">#Restart datanode_1 according to the IoTDB node name</span>
iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> datanode_1
<span class="token comment">#Restart confignode_1 according to the IoTDB node name</span>
iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> confignode_1
<span class="token comment">#Restart grafana</span>
iotdbctl cluster restart default_cluster <span class="token parameter variable">-N</span> grafana
<span class="token comment">#Restart 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="cluster-shrink-command" tabindex="-1"><a class="header-anchor" href="#cluster-shrink-command"><span>Cluster shrink command</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">#Scale down by node name</span>
iotdbctl cluster scalein default_cluster <span class="token parameter variable">-N</span> nodename
<span class="token comment">#Scale down according to ip+port (ip+port obtains the only node according to ip+dn_rpc_port in datanode, and obtains the only node according to ip+cn_internal_port in confignode)</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Determine whether there is only one confignode node and datanode to be reduced. If there is only one left, the reduction cannot be performed.</p></li><li><p>Then get the node information to shrink according to ip:port or nodename, execute the shrink command, and then destroy the node directory. If the shrink node is <code>data_node</code>, use <code>dn_rpc_address</code> in the yaml file for ip, and use <code>dn_rpc_address</code> in the port. <code>dn_rpc_port</code> in datanode_servers in yaml file.<br> If the shrinking node is <code>config_node</code>, the ip uses <code>cn_internal_address</code> in confignode_servers in the yaml file, and the port uses <code>cn_internal_port</code></p></li></ul><p>Tip: Currently, only one node scaling is supported at a time</p><h4 id="cluster-expansion-command" tabindex="-1"><a class="header-anchor" href="#cluster-expansion-command"><span>Cluster expansion command</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>Modify the config/xxx.yaml file to add a datanode node or confignode node</p></li><li><p>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Find the node to be expanded, upload the IoTDB compressed package and jdb package (if the <code>jdk_tar_dir</code> and <code>jdk_deploy_dir</code> values ​​are configured in yaml) and decompress it</p></li><li><p>Generate and upload <code>iotdb-common.properties</code>, <code>iotdb-confignode.properties</code> or <code>iotdb-datanode.properties</code> according to the yaml file node configuration information</p></li><li><p>Execute the command to start the node and verify whether the node is started successfully</p></li></ul><p>Tip: Currently, only one node expansion is supported at a time</p><h4 id="destroy-cluster-command" tabindex="-1"><a class="header-anchor" href="#destroy-cluster-command"><span>destroy cluster command</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 finds the yaml file in the default location</p></li><li><p>Check whether the node is still running based on the node node information in <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana</code>, and <code>prometheus</code>.<br> Stop the destroy command if any node is running</p></li><li><p>Delete <code>data</code> in the IoTDB cluster and <code>cn_system_dir</code>, <code>cn_consensus_dir</code> configured in the yaml file<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> deployment directory,<br> grafana deployment directory and prometheus deployment directory</p></li></ul><p><em>Destroy a single module</em></p><div class="language-bash line-numbers-mode" data-ext="sh" data-title="sh"><pre class="language-bash"><code><span class="token comment"># Destroy grafana module</span>
iotdbctl cluster destroy default_cluster <span class="token parameter variable">-N</span> grafana
<span class="token comment"># Destroy prometheus module</span>
iotdbctl cluster destroy default_cluster <span class="token parameter variable">-N</span> prometheus
<span class="token comment"># Destroy iotdb module</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="distribute-cluster-configuration-commands" tabindex="-1"><a class="header-anchor" href="#distribute-cluster-configuration-commands"><span>Distribute cluster configuration commands</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana</code> and <code>prometheus</code></p></li><li><p>Generate and upload <code>iotdb-common.properties</code>, <code>iotdb-confignode.properties</code>, <code>iotdb-datanode.properties</code> to the specified node according to the node configuration information of the yaml file</p></li></ul><h4 id="hot-load-cluster-configuration-command" tabindex="-1"><a class="header-anchor" href="#hot-load-cluster-configuration-command"><span>Hot load cluster configuration command</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Execute <code>load configuration</code> in the cli according to the node configuration information of the yaml file.</p></li></ul><h4 id="cluster-node-log-backup" tabindex="-1"><a class="header-anchor" href="#cluster-node-log-backup"><span>Cluster node log backup</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">&#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>Find the yaml file in the default location based on cluster-name</p></li><li><p>This command will verify the existence of datanode_1 and confignode_1 according to the yaml file, and then back up the log data of the specified node datanode_1 and confignode_1 to the specified service <code>192.168.9.48</code> port 36000 according to the configured start and end dates (startdate&lt;=logtime&lt;=enddate) The data backup path is <code>/iotdb/logs</code>, and the IoTDB log storage path is <code>/root/data/db/iotdb/logs</code> (not required, if you do not fill in -logs xxx, the default is to backup logs from the IoTDB installation path /logs )</p></li></ul><table><thead><tr><th>command</th><th>description</th><th>required</th></tr></thead><tbody><tr><td>-h</td><td>backup data server ip</td><td>NO</td></tr><tr><td>-u</td><td>backup data server username</td><td>NO</td></tr><tr><td>-pw</td><td>backup data machine password</td><td>NO</td></tr><tr><td>-p</td><td>backup data machine port(default 22)</td><td>NO</td></tr><tr><td>-path</td><td>path to backup data (default current path)</td><td>NO</td></tr><tr><td>-loglevel</td><td>Log levels include all, info, error, warn (default is all)</td><td>NO</td></tr><tr><td>-l</td><td>speed limit (default 1024 speed limit range 0 to 104857601 unit Kbit/s)</td><td>NO</td></tr><tr><td>-N</td><td>multiple configuration file cluster names are separated by commas.</td><td>YES</td></tr><tr><td>-startdate</td><td>start time (including default 1970-01-01)</td><td>NO</td></tr><tr><td>-enddate</td><td>end time (included)</td><td>NO</td></tr><tr><td>-logs</td><td>IoTDB log storage path, the default is ({iotdb}/logs))</td><td>NO</td></tr></tbody></table><h4 id="cluster-data-backup" tabindex="-1"><a class="header-anchor" href="#cluster-data-backup"><span>Cluster data backup</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">&#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>This command will obtain the leader node based on the yaml file, and then back up the data to the /iotdb/datas directory on the 192.168.9.48 service based on the start and end dates (startdate&lt;=logtime&lt;=enddate)</li></ul><table><thead><tr><th>command</th><th>description</th><th>required</th></tr></thead><tbody><tr><td>-h</td><td>backup data server ip</td><td>NO</td></tr><tr><td>-u</td><td>backup data server username</td><td>NO</td></tr><tr><td>-pw</td><td>backup data machine password</td><td>NO</td></tr><tr><td>-p</td><td>backup data machine port(default 22)</td><td>NO</td></tr><tr><td>-path</td><td>path to backup data (default current path)</td><td>NO</td></tr><tr><td>-granularity</td><td>partition</td><td>YES</td></tr><tr><td>-l</td><td>speed limit (default 1024 speed limit range 0 to 104857601 unit Kbit/s)</td><td>NO</td></tr><tr><td>-startdate</td><td>start time (including default 1970-01-01)</td><td>YES</td></tr><tr><td>-enddate</td><td>end time (included)</td><td>YES</td></tr></tbody></table><h4 id="cluster-upgrade-1" tabindex="-1"><a class="header-anchor" href="#cluster-upgrade-1"><span>Cluster upgrade</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code> and <code>datanode_servers</code></p></li><li><p>Upload lib package</p></li></ul><p>Note that after performing the upgrade, please restart IoTDB for it to take effect.</p><h4 id="cluster-initialization" tabindex="-1"><a class="header-anchor" href="#cluster-initialization"><span>Cluster initialization</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana</code> and <code>prometheus</code></li><li>Initialize cluster configuration</li></ul><h4 id="view-cluster-process-status" tabindex="-1"><a class="header-anchor" href="#view-cluster-process-status"><span>View cluster process status</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>Find the yaml file in the default location according to cluster-name and obtain the configuration information of <code>confignode_servers</code>, <code>datanode_servers</code>, <code>grafana</code> and <code>prometheus</code></li><li>Display the survival status of each node in the cluster</li></ul><h4 id="cluster-authorization-activation" tabindex="-1"><a class="header-anchor" href="#cluster-authorization-activation"><span>Cluster authorization activation</span></a></h4><p>Cluster activation is activated by entering the activation code by default, or by using the - op license_path activated through license path</p><ul><li>Default activation method</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>Find the yaml file in the default location based on <code>cluster-name</code> and obtain the <code>confignode_servers</code> configuration information</li><li>Obtain the machine code inside</li><li>Waiting for activation code input</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>Activate a node</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>Activate through license path</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>Find the yaml file in the default location based on <code>cluster-name</code> and obtain the <code>confignode_servers</code> configuration information</li><li>Obtain the machine code inside</li><li>Waiting for activation code input</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>Activate a node</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="introduction-to-cluster-deployment-tool-samples" tabindex="-1"><a class="header-anchor" href="#introduction-to-cluster-deployment-tool-samples"><span>Introduction to Cluster Deployment Tool Samples</span></a></h3><p>In the cluster deployment tool installation directory config/example, there are three yaml examples. If necessary, you can copy them to config and modify them.</p><table><thead><tr><th>name</th><th>description</th></tr></thead><tbody><tr><td>default_1c1d.yaml</td><td>1 confignode and 1 datanode configuration example</td></tr><tr><td>default_3c3d.yaml</td><td>3 confignode and 3 datanode configuration samples</td></tr><tr><td>default_3c3d_grafa_prome</td><td>3 confignode and 3 datanode, Grafana, Prometheus configuration examples</td></tr></tbody></table><h2 id="manual-deployment" tabindex="-1"><a class="header-anchor" href="#manual-deployment"><span>Manual Deployment</span></a></h2><h3 id="prerequisites-1" tabindex="-1"><a class="header-anchor" href="#prerequisites-1"><span>Prerequisites</span></a></h3><ol><li>JDK&gt;=1.8.</li><li>Max open file 65535.</li><li>Disable the swap memory.</li><li>Ensure that data/confignode directory has been cleared when starting ConfigNode for the first time,<br> and data/datanode directory has been cleared when starting DataNode for the first time</li><li>Turn off the firewall of the server if the entire cluster is in a trusted environment.</li><li>By default, IoTDB Cluster will use ports 10710, 10720 for the ConfigNode and<br> 6667, 10730, 10740, 10750 and 10760 for the DataNode.<br> Please make sure those ports are not occupied, or you will modify the ports in configuration files.</li></ol><h3 id="get-the-installation-package" tabindex="-1"><a class="header-anchor" href="#get-the-installation-package"><span>Get the Installation Package</span></a></h3><p>You can either download the binary release files (see Chap 3.1) or compile with source code (see Chap 3.2).</p><h4 id="download-the-binary-distribution" tabindex="-1"><a class="header-anchor" href="#download-the-binary-distribution"><span>Download the binary distribution</span></a></h4><ol><li>Open our website <a href="https://iotdb.apache.org/Download/" target="_blank" rel="noopener noreferrer">Download Page<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</li><li>Download the binary distribution.</li><li>Decompress to get the apache-iotdb-1.0.0-all-bin directory.</li></ol><h4 id="compile-with-source-code" tabindex="-1"><a class="header-anchor" href="#compile-with-source-code"><span>Compile with source code</span></a></h4><h5 id="download-the-source-code" tabindex="-1"><a class="header-anchor" href="#download-the-source-code"><span>Download the source code</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.0.0
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Website</strong></p><ol><li>Open our website <a href="https://iotdb.apache.org/Download/" target="_blank" rel="noopener noreferrer">Download Page<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</li><li>Download the source code.</li><li>Decompress to get the apache-iotdb-1.0.0 directory.</li></ol><h5 id="compile-source-code" tabindex="-1"><a class="header-anchor" href="#compile-source-code"><span>Compile source code</span></a></h5><p>Under the source root folder:</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>Then you will get the binary distribution under<br><strong>distribution/target/apache-iotdb-1.0.0-SNAPSHOT-all-bin/apache-iotdb-1.0.0-SNAPSHOT-all-bin</strong>.</p><h3 id="binary-distribution-content" tabindex="-1"><a class="header-anchor" href="#binary-distribution-content"><span>Binary Distribution Content</span></a></h3><table><thead><tr><th><strong>Folder</strong></th><th><strong>Description</strong></th></tr></thead><tbody><tr><td>conf</td><td>Configuration files folder, contains configuration files of ConfigNode, DataNode, JMX and logback</td></tr><tr><td>data</td><td>Data files folder, contains data files of ConfigNode and DataNode</td></tr><tr><td>lib</td><td>Jar files folder</td></tr><tr><td>licenses</td><td>Licenses files folder</td></tr><tr><td>logs</td><td>Logs files folder, contains logs files of ConfigNode and DataNode</td></tr><tr><td>sbin</td><td>Shell files folder, contains start/stop/remove shell of ConfigNode and DataNode, cli shell</td></tr><tr><td>tools</td><td>System tools</td></tr></tbody></table><h3 id="cluster-installation-and-configuration" tabindex="-1"><a class="header-anchor" href="#cluster-installation-and-configuration"><span>Cluster Installation and Configuration</span></a></h3><h4 id="cluster-installation" tabindex="-1"><a class="header-anchor" href="#cluster-installation"><span>Cluster Installation</span></a></h4><p><code>apache-iotdb-1.0.0-SNAPSHOT-all-bin</code> contains both the ConfigNode and the DataNode.<br> Please deploy the files to all servers of your target cluster.<br> A best practice is deploying the files into the same directory in all servers.</p><p>If you want to try the cluster mode on one server, please read<br><a href="https://iotdb.apache.org/UserGuide/Master/QuickStart/ClusterQuickStart.html" target="_blank" rel="noopener noreferrer">Cluster Quick Start<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><h4 id="cluster-configuration" tabindex="-1"><a class="header-anchor" href="#cluster-configuration"><span>Cluster Configuration</span></a></h4><p>We need to modify the configurations on each server.<br> Therefore, login each server and switch the working directory to <code>apache-iotdb-1.0.0-SNAPSHOT-all-bin</code>.<br> The configuration files are stored in the <code>./conf</code> directory.</p><p>For all ConfigNode servers, we need to modify the common configuration (see Chap 5.2.1)<br> and ConfigNode configuration (see Chap 5.2.2).</p><p>For all DataNode servers, we need to modify the common configuration (see Chap 5.2.1)<br> and DataNode configuration (see Chap 5.2.3).</p><h5 id="common-configuration" tabindex="-1"><a class="header-anchor" href="#common-configuration"><span>Common configuration</span></a></h5><p>Open the common configuration file ./conf/iotdb-common.properties,<br> and set the following parameters base on the<br><a class="route-link" href="/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html">Deployment Recommendation</a>:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Description</strong></th><th><strong>Default</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>Cluster name for which the Node to join in</td><td>defaultCluster</td></tr><tr><td>config_node_consensus_protocol_class</td><td>Consensus protocol of ConfigNode</td><td>org.apache.iotdb.consensus.ratis.RatisConsensus</td></tr><tr><td>schema_replication_factor</td><td>Schema replication factor, no more than DataNode number</td><td>1</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>Consensus protocol of schema replicas</td><td>org.apache.iotdb.consensus.ratis.RatisConsensus</td></tr><tr><td>data_replication_factor</td><td>Data replication factor, no more than DataNode number</td><td>1</td></tr><tr><td>data_region_consensus_protocol_class</td><td>Consensus protocol of data replicas. Note that RatisConsensus currently does not support multiple data directories</td><td>org.apache.iotdb.consensus.iot.IoTConsensus</td></tr></tbody></table><p><strong>Notice: The preceding configuration parameters cannot be changed after the cluster is started. Ensure that the common configurations of all Nodes are the same. Otherwise, the Nodes cannot be started.</strong></p><h5 id="confignode-configuration" tabindex="-1"><a class="header-anchor" href="#confignode-configuration"><span>ConfigNode configuration</span></a></h5><p>Open the ConfigNode configuration file ./conf/iotdb-confignode.properties,<br> and set the following parameters based on the IP address and available port of the server or VM:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Description</strong></th><th><strong>Default</strong></th><th><strong>Usage</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>Internal rpc service address of ConfigNode</td><td>127.0.0.1</td><td>Set to the IPV4 address or domain name of the server</td></tr><tr><td>cn_internal_port</td><td>Internal rpc service port of ConfigNode</td><td>10710</td><td>Set to any unoccupied port</td></tr><tr><td>cn_consensus_port</td><td>ConfigNode replication consensus protocol communication port</td><td>10720</td><td>Set to any unoccupied port</td></tr><tr><td>cn_seed_config_node</td><td>ConfigNode address to which the node is connected when it is registered to the cluster. Note that Only one ConfigNode can be configured.</td><td>127.0.0.1:10710</td><td>For Seed-ConfigNode, set to its own cn_internal_address:cn_internal_port; For other ConfigNodes, set to other one running ConfigNode&#39;s cn_internal_address:cn_internal_port</td></tr></tbody></table><p><strong>Notice: The preceding configuration parameters cannot be changed after the node is started. Ensure that all ports are not occupied. Otherwise, the Node cannot be started.</strong></p><h5 id="datanode-configuration" tabindex="-1"><a class="header-anchor" href="#datanode-configuration"><span>DataNode configuration</span></a></h5><p>Open the DataNode configuration file ./conf/iotdb-datanode.properties,<br> and set the following parameters based on the IP address and available port of the server or VM:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Description</strong></th><th><strong>Default</strong></th><th><strong>Usage</strong></th></tr></thead><tbody><tr><td>dn_rpc_address</td><td>Client RPC Service address</td><td>127.0.0.1</td><td>Set to the IPV4 address or domain name of the server</td></tr><tr><td>dn_rpc_port</td><td>Client RPC Service port</td><td>6667</td><td>Set to any unoccupied port</td></tr><tr><td>dn_internal_address</td><td>Control flow address of DataNode inside cluster</td><td>127.0.0.1</td><td>Set to the IPV4 address or domain name of the server</td></tr><tr><td>dn_internal_port</td><td>Control flow port of DataNode inside cluster</td><td>10730</td><td>Set to any unoccupied port</td></tr><tr><td>dn_mpp_data_exchange_port</td><td>Data flow port of DataNode inside cluster</td><td>10740</td><td>Set to any unoccupied port</td></tr><tr><td>dn_data_region_consensus_port</td><td>Data replicas communication port for consensus</td><td>10750</td><td>Set to any unoccupied port</td></tr><tr><td>dn_schema_region_consensus_port</td><td>Schema replicas communication port for consensus</td><td>10760</td><td>Set to any unoccupied port</td></tr><tr><td>dn_seed_config_node</td><td>Running ConfigNode of the Cluster</td><td>127.0.0.1:10710</td><td>Set to any running ConfigNode&#39;s cn_internal_address:cn_internal_port. You can set multiple values, separate them with commas(&quot;,&quot;)</td></tr></tbody></table><p><strong>Notice: The preceding configuration parameters cannot be changed after the node is started. Ensure that all ports are not occupied. Otherwise, the Node cannot be started.</strong></p><h3 id="cluster-operation" tabindex="-1"><a class="header-anchor" href="#cluster-operation"><span>Cluster Operation</span></a></h3><h4 id="starting-the-cluster" tabindex="-1"><a class="header-anchor" href="#starting-the-cluster"><span>Starting the cluster</span></a></h4><p>This section describes how to start a cluster that includes several ConfigNodes and DataNodes.<br> The cluster can provide services only by starting at least one ConfigNode<br> and no less than the number of data/schema_replication_factor DataNodes.</p><p>The total process are three steps:</p><ul><li>Start the Seed-ConfigNode</li><li>Add ConfigNode (Optional)</li><li>Add DataNode</li></ul><h5 id="start-the-seed-confignode" tabindex="-1"><a class="header-anchor" href="#start-the-seed-confignode"><span>Start the Seed-ConfigNode</span></a></h5><p><strong>The first Node started in the cluster must be ConfigNode. The first started ConfigNode must follow the tutorial in this section.</strong></p><p>The first ConfigNode to start is the Seed-ConfigNode, which marks the creation of the new cluster.<br> Before start the Seed-ConfigNode, please open the common configuration file ./conf/iotdb-common.properties and check the following parameters:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>Is set to the expected name</td></tr><tr><td>config_node_consensus_protocol_class</td><td>Is set to the expected consensus protocol</td></tr><tr><td>schema_replication_factor</td><td>Is set to the expected schema replication count</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>Is set to the expected consensus protocol</td></tr><tr><td>data_replication_factor</td><td>Is set to the expected data replication count</td></tr><tr><td>data_region_consensus_protocol_class</td><td>Is set to the expected consensus protocol</td></tr></tbody></table><p><strong>Notice:</strong> Please set these parameters carefully based on the <a class="route-link" href="/UserGuide/latest/Deployment-and-Maintenance/Deployment-Recommendation.html">Deployment Recommendation</a>.<br> These parameters are not modifiable after the Node first startup.</p><p>Then open its configuration file ./conf/iotdb-confignode.properties and check the following parameters:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>Is set to the IPV4 address or domain name of the server</td></tr><tr><td>cn_internal_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>cn_consensus_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>cn_seed_config_node</td><td>Is set to its own internal communication address, which is cn_internal_address:cn_internal_port</td></tr></tbody></table><p>After checking, you can run the startup script on the server:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux foreground
bash ./sbin/start-confignode.sh
# Linux background
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><p>For more details about other configuration parameters of ConfigNode, see the<br><a href="https://iotdb.apache.org/UserGuide/Master/Reference/ConfigNode-Config-Manual.html" target="_blank" rel="noopener noreferrer">ConfigNode Configurations<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><h5 id="add-more-confignodes-optional" tabindex="-1"><a class="header-anchor" href="#add-more-confignodes-optional"><span>Add more ConfigNodes (Optional)</span></a></h5><p><strong>The ConfigNode who isn&#39;t the first one started must follow the tutorial in this section.</strong></p><p>You can add more ConfigNodes to the cluster to ensure high availability of ConfigNodes.<br> A common configuration is to add extra two ConfigNodes to make the cluster has three ConfigNodes.</p><p>Ensure that all configuration parameters in the ./conf/iotdb-common.properites are the same as those in the Seed-ConfigNode;<br> otherwise, it may fail to start or generate runtime errors.<br> Therefore, please check the following parameters in common configuration file:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>Is consistent with the Seed-ConfigNode</td></tr><tr><td>config_node_consensus_protocol_class</td><td>Is consistent with the Seed-ConfigNode</td></tr><tr><td>schema_replication_factor</td><td>Is consistent with the Seed-ConfigNode</td></tr><tr><td>schema_region_consensus_protocol_class</td><td>Is consistent with the Seed-ConfigNode</td></tr><tr><td>data_replication_factor</td><td>Is consistent with the Seed-ConfigNode</td></tr><tr><td>data_region_consensus_protocol_class</td><td>Is consistent with the Seed-ConfigNode</td></tr></tbody></table><p>Then, please open its configuration file ./conf/iotdb-confignode.properties and check the following parameters:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>cn_internal_address</td><td>Is set to the IPV4 address or domain name of the server</td></tr><tr><td>cn_internal_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>cn_consensus_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>cn_seed_config_node</td><td>Is set to the internal communication address of an other running ConfigNode. The internal communication address of the seed ConfigNode is recommended.</td></tr></tbody></table><p>After checking, you can run the startup script on the server:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux foreground
bash ./sbin/start-confignode.sh
# Linux background
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><p>For more details about other configuration parameters of ConfigNode, see the<br><a href="https://iotdb.apache.org/UserGuide/Master/Reference/ConfigNode-Config-Manual.html" target="_blank" rel="noopener noreferrer">ConfigNode Configurations<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><h5 id="start-datanode" tabindex="-1"><a class="header-anchor" href="#start-datanode"><span>Start DataNode</span></a></h5><p><strong>Before adding DataNodes, ensure that there exists at least one ConfigNode is running in the cluster.</strong></p><p>You can add any number of DataNodes to the cluster.<br> Before adding a new DataNode,</p><p>please open its common configuration file ./conf/iotdb-common.properties and check the following parameters:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>cluster_name</td><td>Is consistent with the Seed-ConfigNode</td></tr></tbody></table><p>Then open its configuration file ./conf/iotdb-datanode.properties and check the following parameters:</p><table><thead><tr><th><strong>Configuration</strong></th><th><strong>Check</strong></th></tr></thead><tbody><tr><td>dn_rpc_address</td><td>Is set to the IPV4 address or domain name of the server</td></tr><tr><td>dn_rpc_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>dn_internal_address</td><td>Is set to the IPV4 address or domain name of the server</td></tr><tr><td>dn_internal_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>dn_mpp_data_exchange_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>dn_data_region_consensus_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>dn_schema_region_consensus_port</td><td>The port isn&#39;t occupied</td></tr><tr><td>dn_seed_config_node</td><td>Is set to the internal communication address of other running ConfigNodes. The internal communication address of the seed ConfigNode is recommended.</td></tr></tbody></table><p>After checking, you can run the startup script on the server:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux foreground
bash ./sbin/start-datanode.sh
# Linux background
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><p>For more details about other configuration parameters of DataNode, see the<br><a href="https://iotdb.apache.org/UserGuide/Master/Reference/DataNode-Config-Manual.html" target="_blank" rel="noopener noreferrer">DataNode Configurations<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><p><strong>Notice: The cluster can provide services only if the number of its DataNodes is no less than the number of replicas(max{schema_replication_factor, data_replication_factor}).</strong></p><h4 id="start-cli" tabindex="-1"><a class="header-anchor" href="#start-cli"><span>Start Cli</span></a></h4><p>If the cluster is in local environment, you can directly run the Cli startup script in the ./sbin directory:</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><p>If you want to use the Cli to connect to a cluster in the production environment,<br> Please read the <a href="https://iotdb.apache.org/UserGuide/Master/QuickStart/Command-Line-Interface.html" target="_blank" rel="noopener noreferrer">Cli manual<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><h4 id="verify-cluster" tabindex="-1"><a class="header-anchor" href="#verify-cluster"><span>Verify Cluster</span></a></h4><p>Use a 3C3D(3 ConfigNodes and 3 DataNodes) as an example.<br> Assumed that the IP addresses of the 3 ConfigNodes are 192.168.1.10, 192.168.1.11 and 192.168.1.12, and the default ports 10710 and 10720 are used.<br> Assumed that the IP addresses of the 3 DataNodes are 192.168.1.20, 192.168.1.21 and 192.168.1.22, and the default ports 6667, 10730, 10740, 10750 and 10760 are used.</p><p>After starting the cluster successfully according to chapter 6.1, you can run the <code>show cluster details</code> command on the Cli, and you will see the following results:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="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>If the status of all Nodes is <strong>Running</strong>, the cluster deployment is successful.<br> Otherwise, read the run logs of the Node that fails to start and<br> check the corresponding configuration parameters.</p><h4 id="stop-iotdb" tabindex="-1"><a class="header-anchor" href="#stop-iotdb"><span>Stop IoTDB</span></a></h4><p>This section describes how to manually shut down the ConfigNode or DataNode process of the IoTDB.</p><h5 id="stop-confignode-by-script" tabindex="-1"><a class="header-anchor" href="#stop-confignode-by-script"><span>Stop ConfigNode by script</span></a></h5><p>Run the stop ConfigNode script:</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="stop-datanode-by-script" tabindex="-1"><a class="header-anchor" href="#stop-datanode-by-script"><span>Stop DataNode by script</span></a></h5><p>Run the stop DataNode script:</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="kill-node-process" tabindex="-1"><a class="header-anchor" href="#kill-node-process"><span>Kill Node process</span></a></h5><p>Get the process number of the Node:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code>jps
# or
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>Kill the process:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="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>Notice Some ports require root access, in which case use sudo</strong></p><h4 id="shrink-the-cluster" tabindex="-1"><a class="header-anchor" href="#shrink-the-cluster"><span>Shrink the Cluster</span></a></h4><p>This section describes how to remove ConfigNode or DataNode from the cluster.</p><h5 id="remove-confignode" tabindex="-1"><a class="header-anchor" href="#remove-confignode"><span>Remove ConfigNode</span></a></h5><p>Before removing a ConfigNode, ensure that there is at least one active ConfigNode in the cluster after the removal.<br> Run the remove-confignode script on an active ConfigNode:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux
# Remove the ConfigNode with confignode_id
./sbin/remove-confignode.sh &lt;confignode_id&gt;
# Remove the ConfigNode with address:port
./sbin/remove-confignode.sh &lt;cn_internal_address&gt;:&lt;cn_internal_port&gt;
# Windows
# Remove the ConfigNode with confignode_id
.\sbin\remove-confignode.bat &lt;confignode_id&gt;
# Remove the ConfigNode with address:port
.\sbin\remove-confignode.bat &lt;cn_internal_address&gt;:&lt;cn_internal_portcn_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="remove-datanode" tabindex="-1"><a class="header-anchor" href="#remove-datanode"><span>Remove DataNode</span></a></h5><p>Before removing a DataNode, ensure that the cluster has at least the number of data/schema replicas DataNodes.<br> Run the remove-datanode script on an active DataNode:</p><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><pre class="language-text"><code># Linux
# Remove the DataNode with datanode_id
./sbin/remove-datanode.sh &lt;datanode_id&gt;
# Remove the DataNode with rpc address:port
./sbin/remove-datanode.sh &lt;dn_rpc_address&gt;:&lt;dn_rpc_port&gt;
# Windows
# Remove the DataNode with datanode_id
.\sbin\remove-datanode.bat &lt;datanode_id&gt;
# Remove the DataNode with rpc address:port
.\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="faq" tabindex="-1"><a class="header-anchor" href="#faq"><span>FAQ</span></a></h3><p>See <a href="https://iotdb.apache.org/UserGuide/Master/FAQ/FAQ-for-cluster-setup.html" target="_blank" rel="noopener noreferrer">FAQ<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>.</p><h2 id="ainode-deployment" tabindex="-1"><a class="header-anchor" href="#ainode-deployment"><span>AINode deployment</span></a></h2><h3 id="installation-environment" tabindex="-1"><a class="header-anchor" href="#installation-environment"><span>Installation environment</span></a></h3><h4 id="recommended-operating-system" tabindex="-1"><a class="header-anchor" href="#recommended-operating-system"><span>Recommended Operating System</span></a></h4><p>Ubuntu, CentOS, MacOS</p><h4 id="runtime-environment" tabindex="-1"><a class="header-anchor" href="#runtime-environment"><span>Runtime Environment</span></a></h4><p>AINode currently requires Python 3.8 or higher with pip and venv tools.</p><p>For networked environments, AINode creates a virtual environment and downloads runtime dependencies automatically, no additional configuration is needed.</p><p>In case of a non-networked environment, you can download it from <a href="https://cloud.tsinghua.edu.cn/d/4c1342f6c272439aa96c/to" target="_blank" rel="noopener noreferrer">https://cloud.tsinghua.edu.cn/d/4c1342f6c272439aa96c/to<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> get the required dependencies and install them offline.</p><h3 id="installation-steps" tabindex="-1"><a class="header-anchor" href="#installation-steps"><span>Installation steps</span></a></h3><p>Users can download the AINode software installation package, download and unzip it to complete the installation of AINode. You can also download the source code from the code repository and compile it to get the installation package.</p><h3 id="software-directory-structure" tabindex="-1"><a class="header-anchor" href="#software-directory-structure"><span>Software directory structure</span></a></h3><p>After downloading and extracting the software package, you can get the following directory structure</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="Shell"><pre class="language-Shell"><code>|-- apache-iotdb-AINode-bin
|-- lib # package binary executable with environment dependencies
|-- conf # store configuration files
- iotdb-AINode.properties
|-- sbin # AINode related startup scripts
- 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><strong>lib:</strong> AINode&#39;s compiled binary executable and related code dependencies.</li><li><strong>conf:</strong> contains AINode&#39;s configuration items, specifically the following configuration items</li><li><strong>sbin:</strong> AINode&#39;s runtime script, which can start, remove and stop AINode.</li></ul><h3 id="start-ainode" tabindex="-1"><a class="header-anchor" href="#start-ainode"><span>Start AINode</span></a></h3><p>After completing the deployment of Seed-ConfigNode, you can add an AINode node to support the model registration and inference functions. After specifying the information of IoTDB cluster in the configuration item, you can execute the corresponding commands to start AINode and join the IoTDB cluster.</p><p>Note: Starting AINode requires that the system environment contains a Python interpreter of 3.8 or above as the default interpreter, so users should check whether the Python interpreter exists in the environment variables and can be directly invoked through the <code>python</code> command before using it.</p><h4 id="direct-start" tabindex="-1"><a class="header-anchor" href="#direct-start"><span>Direct Start</span></a></h4><p>After obtaining the installation package files, you can directly start AINode for the first time.</p><p>The startup commands on Linux and MacOS are as follows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>The startup command on windows is as follows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>If start AINode for the first time and do not specify the path to the interpreter, the script will create a new venv virtual environment in the root directory of the program using the system Python interpreter, and install the third-party dependencies of AINode and the main program of AINode in this environment automatically and successively. <strong>This process will generate a virtual environment of about 1GB in size, so please reserve space for installation</strong>. On subsequent startups, if the path to the interpreter is not specified, the script will automatically look for the newly created venv environment above and start AINode without having to install the program and dependencies repeatedly.</p><p>Note that it is possible to activate reinstall with -r if you wish to force a reinstall of AINode proper on a certain startup, this parameter will reinstall AINode based on the files under lib.</p><p>Linux和MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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" data-title="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>For example, a user replaces a newer version of the AINode installer in the lib, but the installer is not installed in the user&#39;s usual environment. In this case, you need to add the -r option at startup to instruct the script to force a reinstallation of the main AINode program in the virtual environment to update the version.</p><h4 id="specify-a-customized-virtual-environment" tabindex="-1"><a class="header-anchor" href="#specify-a-customized-virtual-environment"><span>Specify a customized virtual environment</span></a></h4><p>When starting AINode, you can specify a virtual environment interpreter path to install the AINode main program and its dependencies to a specific location. Specifically, you need to specify the value of the parameter ain_interpreter_dir.</p><p>Linux and MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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" data-title="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>When specifying the Python interpreter please enter the address of the <strong>executable file</strong> of the Python interpreter in the virtual environment. Currently AINode <strong>supports virtual environments such as venv, <strong><strong>conda</strong></strong>, etc.</strong> <strong>Inputting the system Python interpreter as the installation location</strong> is not supported. In order to ensure that scripts are recognized properly, please <strong>use absolute paths whenever possible</strong>!</p><h4 id="join-the-cluster" tabindex="-1"><a class="header-anchor" href="#join-the-cluster"><span>Join the cluster</span></a></h4><p>The AINode startup process automatically adds the new AINode to the IoTDB cluster. After starting the AINode you can verify that the node was joined successfully by entering the SQL for the cluster query in IoTDB&#39;s cli command line.</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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="remove-ainode" tabindex="-1"><a class="header-anchor" href="#remove-ainode"><span>Remove AINode</span></a></h3><p>When it is necessary to move an already connected AINode out of the cluster, the corresponding removal script can be executed.</p><p>The commands on Linux and MacOS are as follows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>The startup command on windows is as follows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>After removing the node, information about the node will not be available.</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>In addition, if the location of the AINode installation was previously customized, then the remove script should be called with the corresponding path as an argument:</p><p>Linux and MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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" data-title="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>Similarly, script parameters that are persistently modified in the env script will also take effect when the removal is performed.</p><p>If a user loses a file in the data folder, AINode may not be able to remove itself locally, and requires the user to specify the node number, address and port number for removal, in which case we support the user to enter parameters for removal as follows</p><p>Linux and MacOS:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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" data-title="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="stop-ainode" tabindex="-1"><a class="header-anchor" href="#stop-ainode"><span>Stop AINode</span></a></h3><p>If you need to stop a running AINode node, execute the appropriate shutdown script.</p><p>The commands on Linux and MacOS are as follows:</p><div class="language-Shell. line-numbers-mode" data-ext="Shell." data-title="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>The startup command on windows is as follows:</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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>At this point the exact state of the node is not available and the corresponding management and reasoning functions cannot be used. If you need to restart the node, just execute the startup script again.</p><div class="language-Shell line-numbers-mode" data-ext="Shell" data-title="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="script-parameter-details" tabindex="-1"><a class="header-anchor" href="#script-parameter-details"><span>Script parameter details</span></a></h3><p>Two parameters are supported during AINode startup, and their specific roles are shown below:</p><table><thead><tr><th><strong>Name</strong></th><th><strong>Action Script</strong></th><th>Tag</th><th><strong>Description</strong></th><th><strong>Type</strong></th><th><strong>Default Value</strong></th><th>Input Method</th></tr></thead><tbody><tr><td>ain_interpreter_dir</td><td>start remove env</td><td>-i</td><td>The path to the interpreter of the virtual environment in which AINode is installed; absolute paths are required.</td><td>String</td><td>Read environment variables by default</td><td>Input on call + persistent modifications</td></tr><tr><td>ain_remove_target</td><td>remove stop</td><td>-t</td><td>AINode shutdown can specify the Node ID, address, and port number of the target AINode to be removed, in the format of <code>&lt;AINode-id&gt;/&lt;ip&gt;:&lt;rpc-port&gt;</code></td><td>String</td><td>Null</td><td>Input on call</td></tr><tr><td>ain_force_reinstall</td><td>start remove env</td><td>-r</td><td>This script checks the version of the AINode installation, and if it does, it forces the installation of the whl package in lib if the version is not correct.</td><td>Bool</td><td>false</td><td>Input on call</td></tr><tr><td>ain_no_dependencies</td><td>start remove env</td><td>-n</td><td>Specifies whether to install dependencies when installing AINode, if so only the main AINode program will be installed without dependencies.</td><td>Bool</td><td>false</td><td>Input on call</td></tr></tbody></table><p>Besides passing in the above parameters when executing the script as described above, it is also possible to modify some of the parameters persistently in the <code>AINode-env.sh</code> and <code>AINode-env.bat</code> scripts in the <code>conf</code> folder.</p><p><code>AINode-env.sh</code></p><div class="language-Bash line-numbers-mode" data-ext="Bash" data-title="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" data-title="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>Uncomment the corresponding line after writing the parameter value and save it to take effect the next time you execute the script.</p><h3 id="ainode-configuration-items" tabindex="-1"><a class="header-anchor" href="#ainode-configuration-items"><span>AINode configuration items</span></a></h3><p>AINode supports modifying some necessary parameters. The following parameters can be found in the <code>conf/iotdb-AINode.properties</code> file and modified for persistence:</p><table><thead><tr><th><strong>Name</strong></th><th><strong>Description</strong></th><th><strong>Type</strong></th><th><strong>Default Value</strong></th><th><strong>Modified Mode of Effect</strong></th></tr></thead><tbody><tr><td>ain_seed_config_node</td><td>ConfigNode address registered at AINode startup</td><td>String</td><td>10710</td><td>Only allow to modify before the first startup</td></tr><tr><td>ain_inference_rpc_address</td><td>Addresses where AINode provides services and communications</td><td>String</td><td>127.0.0.1</td><td>Effective after reboot</td></tr><tr><td>ain_inference_rpc_port</td><td>AINode provides services and communication ports</td><td>String</td><td>10810</td><td>Effective after reboot</td></tr><tr><td>ain_system_dir</td><td>AINode metadata storage path, the starting directory of the relative path is related to the operating system, it is recommended to use the absolute path.</td><td>String</td><td>data/AINode/system</td><td>Effective after reboot</td></tr><tr><td>ain_models_dir</td><td>AINode stores the path to the model file. The starting directory of the relative path is related to the operating system, and an absolute path is recommended.</td><td>String</td><td>data/AINode/models</td><td>Effective after reboot</td></tr><tr><td>ain_logs_dir</td><td>The path where AINode stores the logs. The starting directory of the relative path is related to the operating system, and it is recommended to use the absolute path.</td><td>String</td><td>logs/AINode</td><td>Effective after reboot</td></tr></tbody></table><h3 id="frequently-asked-questions" tabindex="-1"><a class="header-anchor" href="#frequently-asked-questions"><span>Frequently Asked Questions</span></a></h3><ol><li><strong>Not found venv module error when starting AINode</strong></li></ol><p>When starting AINode using the default method, a python virtual environment is created in the installation package directory and dependencies are installed, thus requiring the installation of the venv module. Generally speaking, python 3.8 and above will come with venv, but for some systems that come with python environment may not fulfill this requirement. There are two solutions when this error occurs (either one or the other):</p><ul><li>Install venv module locally, take ubuntu as an example, you can run the following command to install the venv module that comes with python. Or install a version of python that comes with venv from the python website.</li></ul><div class="language-SQL line-numbers-mode" data-ext="SQL" data-title="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>Specify the path to an existing python interpreter as the AINode runtime environment via -i when running the startup script, so that you no longer need to create a new virtual environment.</li></ul><ol start="2"><li><strong>Compiling the python environment in CentOS7</strong></li></ol><p>The new environment in centos7 (comes with python3.6) does not meet the requirements to start mlnode, you need to compile python3.8+ by yourself (python is not provided as a binary package in centos7)</p><ul><li>Install 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><p>Python requires that we have OpenSSL installed on our system, which can be found at <a href="https://stackoverflow.com/questions/56552390/how-to-fix-ssl-module-in-python-is-not-available-in-centos" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/56552390/how-to-fix-ssl-module-in-python-is-not-available-in-centos<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><ul><li>Installation and compilation of python</li></ul><p>Download the installation package from the official website and extract it using the following specifications</p><div class="language-SQL line-numbers-mode" data-ext="SQL" data-title="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>Compile and install the corresponding python packages.</p><div class="language-SQL line-numbers-mode" data-ext="SQL" data-title="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><li><strong>Windows compilation problem like &quot;error: Microsoft Visual</strong> <strong>C++</strong> <strong>14.0 or greater is required...&quot; compilation problem</strong> on windows.</li></ol><p>The corresponding error is usually caused by an insufficient version of c++ or setuptools, you can find the appropriate solution at <a href="https://stackoverflow.com/questions/44951456/pip-error-microsoft-visual-c-14-0-is-required" target="_blank" rel="noopener noreferrer">https://stackoverflow.com/questions/44951456/pip-error-microsoft-visual-c-14-0-is-required<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a><br> you can find a suitable solution there.</p></div><!--[--><!----><!--]--><footer class="vp-page-meta"><div class="vp-meta-item edit-link"><a href="https://github.com/apache/iotdb-docs/edit/main/src/UserGuide/latest/Deployment-and-Maintenance/Deployment-Guide_timecho.md" rel="noopener noreferrer" target="_blank" aria-label="Found Error? Edit this page on GitHub" class="nav-link vp-meta-label"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon edit-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="edit icon"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></svg><!--]-->Found Error? Edit this page on GitHub<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div><div class="vp-meta-item git-info"><div class="update-time"><span class="vp-meta-label">Last update: </span><!----></div><!----></div></footer><!----><!----><!--[--><!----><!--]--><!--]--></main><!--]--><footer style="padding-bottom:2rem;"><span id="doc-version" style="display:none;">latest</span><p style="text-align:center;color:#909399;font-size:12px;margin:0 30px;">Copyright © 2024 The Apache Software Foundation.<br> Apache and the Apache feather logo are trademarks of The Apache Software Foundation</p><p style="text-align:center;margin-top:10px;color:#909399;font-size:12px;margin:0 30px;"><strong>Have a question?</strong> Connect with us on QQ, WeChat, or Slack. <a href="https://github.com/apache/iotdb/issues/1995">Join the community</a> now.</p></footer></div><!--]--><!--]--><!--[--><!----><!--]--><!--]--></div>
<script type="module" src="/assets/app-DrPcRZG6.js" defer></script>
</body>
</html>