| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| # Cluster Quick Start |
| |
| The purpose of this article is to show how to start, expand, and shrink an IoTDB cluster in an easy way. |
| |
| See also: |
| [FAQ](../FAQ/Frequently-asked-questions.md) |
| |
| |
| ## 1. Installation and deployment |
| |
| As an example, we'd like to start an IoTDB cluster with 3 ConfigNodes and 3 DataNodes(3C3D) with minimum modifications. Thus, |
| - the cluster name is defaultCluster |
| - data/schema replica is 1 |
| - the max heap size of ConfigNode take the 1/4 of the computer |
| - the max heap size of DataNode take the 1/4 of the computer |
| |
| Suppose there are 3 computers(3 nodes we called here) with Linux OS and JDK installed(detail see [Prerequisites](../QuickStart/QuickStart.md)) and IoTDB working directory is `/data/iotdb`. |
| IP address and configurations is like below: |
| |
| | Node IP | 192.168.132.10 | 192.168.132.11 | 192.168.132.12 | |
| |--------|:---------------|:---------------|:---------------| |
| | service | ConfigNode | ConfigNode | ConfigNode | |
| | service | DataNode | DataNode | DataNode | |
| |
| Port: |
| |
| | Service | ConfigNode | DataNode | |
| |---|---|---| |
| |port| 10710, 10720 | 6667, 10730, 10740, 10750, 10760 | |
| |
| **illustration:** |
| - We could use IP address or hostname/domain to set up an IoTDB cluster, then we would take IP address. If using hostname/domain, `/etc/hosts` must be set well. |
| - JVM memory configuration: `MAX_HEAP_SIZE` in `confignode-env.sh` and `datanode-env.sh`, equal to or greater than 1G is recommended. It's enough for ConfigNode taking 1~2G. The memory taking of DataNode is decided by the inputing and querying data. |
| |
| ### 1.1 download |
| In every computer, [Download](https://iotdb.apache.org/Download/) the IoTDB install package and extract it to working directory of `/data/iotdb`. |
| Then get the directory tree: |
| ```shell |
| /data/iotdb/ |
| ├── conf # configuration files |
| ├── lib # jar library |
| ├── sbin # start/stop shell etc. |
| └── tools # other tools |
| ``` |
| |
| ### 1.2. configuration |
| |
| Configuration files are in `/data/iotdb/conf`. |
| Modify the specified configuration file according to the table below: |
| |
| | Configuration| Configuration Option | IP:192.168.132.10 | IP:192.168.132.11 | IP:192.168.132.12 | |
| |------------|:-------------------------------|----------------------|----------------------|:---------------------| |
| | iotdb-confignode.properties | cn\_internal\_address | 192.168.132.10 | 192.168.132.11 | 192.168.132.12 | |
| | | cn\_target\_config\_node\_list | 192.168.132.10:10710 | 192.168.132.10:10710 | 192.168.132.10:10710 | |
| | iotdb-datanode.properties | dn\_rpc\_address | 192.168.132.10 | 192.168.132.11 | 192.168.132.12 | |
| | | dn\_internal\_address | 192.168.132.10 | 192.168.132.11 | 192.168.132.12 | |
| | | dn\_target\_config\_node\_list | 192.168.132.10:10710 | 192.168.132.10:10710 | 192.168.132.10:10710 | |
| |
| **Notice:** |
| It's recommended that the configurations of iotdb-common.properties and the heap size of JVM in all nodes are the same. |
| |
| ### 1.3. start IoTDB cluster |
| Before starting the IoTDB cluster, make sure the configurations are correct and there is no any data in the working directory. |
| |
| #### 1.3.1. start the first node |
| That is `cn_target_config_node_list` in above configuration table. |
| Execute these commands below in node of `192.168.132.10`. |
| ```shell |
| cd /data/iotdb |
| # start ConfigNode and DataNode services |
| sbin/start-standalone.sh |
| |
| # check DataNode logs to see whether starting successfully or not |
| tail -f logs/log_datanode_all.log |
| # expecting statements like below |
| # 2023-07-21 20:26:01,881 [main] INFO o.a.i.db.service.DataNode:192 - Congratulation, IoTDB DataNode is set up successfully. Now, enjoy yourself! |
| ``` |
| If there is no such logs mentioned abolve or there are some `Exception`s in log files, it's failed. Then please check `log_confignode_all.log` and `log_datanode_all.log` in directory of `/data/iotdb/logs`. |
| |
| **Notice**: |
| - Make sure the first node, especially the first ConfigNode that `cn_target_config_node_list` specified, starting successfully, and then start the other services. |
| - If starting failed,it's necessary to do [cleanup](#【reference】cleanup) before starting again. |
| - How to start service ConfigNode or DataNode alone: |
| ```shell |
| # start ConfigNode alone in daemon |
| sbin/start-confignode.sh -d |
| # start DataNode alone in daemon |
| sbin/start-datanode.sh -d |
| ``` |
| |
| #### 1.3.2. start service ConfigNode and DataNode in other nodes |
| Execute commands below in both 192.168.132.11 and 192.168.132.12: |
| ```shell |
| cd /data/iotdb |
| # start service ConfigNode and DataNode |
| sbin/start-standalone.sh |
| ``` |
| If starting failed, it's necessary to do [cleanup](#【reference】cleanup) in all nodes, and then doging all again from starting the first node. |
| |
| #### 1.3.3. check the cluster status |
| If everything goes well, the cluster will start successfully. Then, we can start the Cli for verification. |
| ```shell |
| /data/iotdb/sbin/start-cli.sh -h 192.168.132.10 |
| IoTDB>show cluster; |
| # example result: |
| +------+----------+-------+---------------+------------+-------+---------+ |
| |NodeID| NodeType| Status|InternalAddress|InternalPort|Version|BuildInfo| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| | 0|ConfigNode|Running| 192.168.132.10| 10710|1.x.x | xxxxxxx| |
| | 1| DataNode|Running| 192.168.132.10| 10730|1.x.x | xxxxxxx| |
| | 2|ConfigNode|Running| 192.168.132.11| 10710|1.x.x | xxxxxxx| |
| | 3| DataNode|Running| 192.168.132.11| 10730|1.x.x | xxxxxxx| |
| | 4|ConfigNode|Running| 192.168.132.12| 10710|1.x.x | xxxxxxx| |
| | 5| DataNode|Running| 192.168.132.12| 10730|1.x.x | xxxxxxx| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| ``` |
| **illustration:** |
| The IP address of `start-cli.sh -h` could be any IP address of DataNode service. |
| |
| |
| ### 【reference】Cleanup |
| Execute commands in every node: |
| 1. End processes of ConfigNode and DataNode |
| ```shell |
| # 1. Stop services ConfigNode and DataNode |
| sbin/stop-standalone.sh |
| |
| # 2. Check whether there are IoTDB processes left or not |
| jps |
| # 或者 |
| ps -ef|gerp iotdb |
| |
| # 3. If there is any IoTDB process left, kill it |
| kill -9 <pid> |
| # If there is only 1 IoTDB instance, execue command below to remove all IoTDB process |
| ps -ef|grep iotdb|grep -v grep|tr -s ' ' ' ' |cut -d ' ' -f2|xargs kill -9 |
| ``` |
| |
| 2. Remove directories of data and logs |
| ```shell |
| cd /data/iotdb |
| rm -rf data logs |
| ``` |
| **illustration:** |
| It's necessary to remove directory of `data` but it's not necessary to remove directory of `logs`, only for convenience. |
| |
| |
| ## 2. Expand |
| `Expand` means add services of ConfigNode or DataNode into an existing IoTDB cluster. |
| |
| It's the same as starting the other nodes mentioned above. That is downloading IoTDB install package, extracting, configurating and then starting. The new node here is `192.168.132.13`. |
| **Notice** |
| - It's must be cleaned up, in other words doing [cleanup](#cleanup) in it. |
| - `cluster_name` of `iotdb-common.properties` must be the same to the cluster. |
| - `cn_target_config_node_list` and `dn_target_config_node_list` must be the same to the cluster. |
| - The old data wouldn't be moved to the new node but the new data would be. |
| |
| ### 2.1. configuration |
| Modify the specified configuration file according to the table below: |
| |
| | Configuration | Configuration Option| IP:192.168.132.13 | |
| |------------|:-------------------------------|:---------------------| |
| | iotdb-confignode.properties | cn\_internal\_address | 192.168.132.13 | |
| | | cn\_target\_config\_node\_list | 192.168.132.10:10710 | |
| | iotdb-datanode.properties | dn\_rpc\_address | 192.168.132.13 | |
| | | dn\_internal\_address | 192.168.132.13 | |
| | | dn\_target\_config\_node\_list | 192.168.132.10:10710 | |
| |
| ### 2.2. expand |
| Execute commands below in new node of `192.168.132.13`: |
| ```shell |
| cd /data/iotdb |
| # start service ConfigNode and DataNode |
| sbin/start-standalone.sh |
| ``` |
| |
| ### 2.3. check the result |
| Execute `show cluster` through Cli and the result like below: |
| ```shell |
| /data/iotdb/sbin/start-cli.sh -h 192.168.132.10 |
| IoTDB>show cluster; |
| # example result: |
| +------+----------+-------+---------------+------------+-------+---------+ |
| |NodeID| NodeType| Status|InternalAddress|InternalPort|Version|BuildInfo| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| | 0|ConfigNode|Running| 192.168.132.10| 10710|1.x.x | xxxxxxx| |
| | 1| DataNode|Running| 192.168.132.10| 10730|1.x.x | xxxxxxx| |
| | 2|ConfigNode|Running| 192.168.132.11| 10710|1.x.x | xxxxxxx| |
| | 3| DataNode|Running| 192.168.132.11| 10730|1.x.x | xxxxxxx| |
| | 4|ConfigNode|Running| 192.168.132.12| 10710|1.x.x | xxxxxxx| |
| | 5| DataNode|Running| 192.168.132.12| 10730|1.x.x | xxxxxxx| |
| | 6|ConfigNode|Running| 192.168.132.13| 10710|1.x.x | xxxxxxx| |
| | 7| DataNode|Running| 192.168.132.13| 10730|1.x.x | xxxxxxx| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| ``` |
| |
| |
| ## 3. Remove service |
| `Shrink` means removing a service from the IoTDB cluster. |
| **Notice:** |
| - `Shrink` could be done in any node within the cluster |
| - Any service could be shrinked within cluster. But the DataNode service of the cluster must greater than the data replica of iotdb-common.properties. |
| - Be patient to wait for the end of shrinking, and then read the guide in logs carefully. |
| |
| ### 3.1 shrink service ConfigNode |
| ```shell |
| cd /data/iotdb |
| # way 1: shrink with ip:port |
| sbin/remove-confignode.sh 192.168.132.13:10710 |
| |
| # way 2: shrink with NodeID of `show cluster` |
| sbin/remove-confignode.sh 6 |
| ``` |
| |
| ### 3.2 shrink service DataNode |
| ```shell |
| cd /data/iotdb |
| # way 1: shrink with ip:port |
| sbin/remove-datanode.sh 192.168.132.13:6667 |
| |
| # way 2: shrink with NodeID of `show cluster` |
| sbin/remove-confignode.sh 7 |
| ``` |
| |
| ### 3.3 check the result |
| |
| Execute `show cluster` through Cli, the result is like below: |
| ```shell |
| +------+----------+-------+---------------+------------+-------+---------+ |
| |NodeID| NodeType| Status|InternalAddress|InternalPort|Version|BuildInfo| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| | 0|ConfigNode|Running| 192.168.132.10| 10710|1.x.x | xxxxxxx| |
| | 1| DataNode|Running| 192.168.132.10| 10730|1.x.x | xxxxxxx| |
| | 2|ConfigNode|Running| 192.168.132.11| 10710|1.x.x | xxxxxxx| |
| | 3| DataNode|Running| 192.168.132.11| 10730|1.x.x | xxxxxxx| |
| | 4|ConfigNode|Running| 192.168.132.12| 10710|1.x.x | xxxxxxx| |
| | 5| DataNode|Running| 192.168.132.12| 10730|1.x.x | xxxxxxx| |
| +------+----------+-------+---------------+------------+-------+---------+ |
| ``` |