blob: 3403bd84964f0565332dff4ecdf5cf5f0bcfc16f [file] [log] [blame] [view]
<!--
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|
+------+----------+-------+---------------+------------+-------+---------+
```