blob: b229505d61e480711cbb1c20d142f856047609a4 [file] [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.
-->
# 开机自启
## 1.概述
IoTDB 支持通过 `daemon-confignode.sh`、`daemon-datanode.sh`、`daemon-ainode.sh` 三个脚本,将ConfigNode、DataNode、AINode 注册为 Linux 系统服务,结合系统自带的 `systemctl `命令,以守护进程方式管理 IoTDB 集群,实现更便捷的启动、停止、重启及开机自启等操作,提升服务稳定性。
> 注意:该功能从 V2.0.9-beta 版本开始提供。
## 2. 环境要求
| 操作系统 | Linux(支持`systemctl`命令) |
| ---------- |:-----------------------------------------------------:|
| 用户权限 | root 用户 |
| 环境变量 | 部署 ConfigNode 和 DataNode 前需设置`JAVA_HOME` |
## 3. 服务注册
进入 IoTDB 安装目录,执行对应的守护进程脚本:
```Bash
# 注册 ConfigNode 服务
./tools/ops/daemon-confignode.sh
# 注册 DataNode 服务
./tools/ops/daemon-datanode.sh
# 注册 AINode 服务
./tools/ops/daemon-ainode.sh
```
执行脚本时将提示以下两个选择项:
1. 是否本次直接启动对应 IoTDB 服务(iotdb-confignode/iotdb-datanode/iotdb-ainode);
2. 是否将对应服务注册为开机自启服务。
脚本执行完成后,将在 `/etc/systemd/system/` 目录生成对应的服务文件:
* `iotdb-confignode.service`
* `iotdb-datanode.service`
* `iotdb-ainode.service`
## 4. 服务管理
服务注册完成后,可通过 systemctl 命令对 IoTDB 各节点服务进行启动、停止、重启、查看状态及配置开机自启等操作,以下命令均需使用 root 用户执行。
### 4.1 手动启动服务
```bash
# 启动 ConfigNode 服务
systemctl start iotdb-confignode
# 启动 DataNode 服务
systemctl start iotdb-datanode
# 启动 AINode 服务
systemctl start iotdb-ainode
```
### 4.2 手动停止服务
```bash
# 停止 ConfigNode 服务
systemctl stop iotdb-confignode
# 停止 DataNode 服务
systemctl stop iotdb-datanode
# 停止 AINode 服务
systemctl stop iotdb-ainode
```
停止服务后,通过查看服务状态,若显示为 inactive(dead),则说明服务关闭成功;若为其他状态,需查看 IoTDB 日志,分析异常原因。
### 4.3 查看服务状态
```bash
# 查看 ConfigNode 服务状态
systemctl status iotdb-confignode
# 查看 DataNode 服务状态
systemctl status iotdb-datanode
# 查看 AINode 服务状态
systemctl status iotdb-ainode
```
状态说明:
* active(running):服务正在运行,若该状态持续 10 分钟,说明服务启动成功;
* failed:服务启动失败,需查看 IoTDB 日志排查问题。
### 4.4 重启服务
重启服务相当于先执行停止操作,再执行启动操作,命令如下:
```bash
# 重启 ConfigNode 服务
systemctl restart iotdb-confignode
# 重启 DataNode 服务
systemctl restart iotdb-datanode
# 重启 AINode 服务
systemctl restart iotdb-ainode
```
### 4.5 配置开机自启
```bash
# 配置 ConfigNode 开机自启
systemctl enable iotdb-confignode
# 配置 DataNode 开机自启
systemctl enable iotdb-datanode
# 配置 AINode 开机自启
systemctl enable iotdb-ainode
```
### 4.6 取消开机自启
```bash
# 取消 ConfigNode 开机自启
systemctl disable iotdb-confignode
# 取消 DataNode 开机自启
systemctl disable iotdb-datanode
# 取消 AINode 开机自启
systemctl disable iotdb-ainode
```
## 5. 自定义服务配置
### 5.1 自定义方式
#### 5.1.1 方案一:修改脚本
1. 修改 `daemon-xxx.sh` 中的[Unit]、[Service]、[Install]区域配置项,具体配置项的含义参考下一小节
2. 执行 `daemon-xxx.sh` 脚本
#### 5.1.2 方案二:修改服务文件
1. 修改 `/etc/systemd/system` 中的 `xx.service` 文件
2. 执行 `systemctl deamon-reload`
### 5.2 `daemon-xxx.sh` 配置项
#### 5.2.1 [Unit] 部分(服务元信息)
| 配置项 | 说明 |
| --------------- | ---------------------------------- |
| Description | 服务描述 |
| Documentation | 指向 IoTDB 官方文档 |
| After | 确保在网络服务启动后才启动该服务 |
#### 5.2.2 [Service] 部分(服务运行配置)
| 配置项 | 含义 |
| -------------------------------------------- | ---------------------------------------------------------------------- |
| StandardOutput、StandardError | 指定服务标准输出和错误日志的存储路径 |
| LimitNOFILE=65536 | 设置文件描述符上限,默认值为 65536 |
| Type=simple | 服务类型为简单前台进程,systemd 会跟踪服务主进程 |
| User=root、Group=root | 指定服务以 root 用户和 root 组的权限运行 |
| ExecStart/ExecStop | 分别指定服务的启动脚本和停止脚本的路径 |
| Restart=on-failure | 仅在服务异常退出时,自动重启服务 |
| SuccessExitStatus=143 | 将退出码 143(128+15,即 SIGTERM 正常终止)视为成功退出 |
| RestartSec=5 | 服务重启的间隔时间,默认为 5 秒 |
| StartLimitInterval=600s、StartLimitBurst=3 | 10 分钟(600 秒)内,服务最多重启 3 次,防止频繁重启导致系统资源浪费 |
| RestartPreventExitStatus=SIGKILL | 服务被 SIGKILL 信号杀死后,不自动重启,避免无限重启僵尸进程 |
#### 5.2.3 [Install] 部分(安装配置)
| 配置项 | 含义 |
| ---------------------------- | -------------------------------------------- |
| WantedBy=multi-user.target | 指定服务在系统进入多用户模式时,自动启动。 |
### 5.3 .service 文件格式示例
```bash
[Unit]
Description=iotdb-confignode
Documentation=https://iotdb.apache.org/
After=network.target
[Service]
StandardOutput=null
StandardError=null
LimitNOFILE=65536
Type=simple
User=root
Group=root
Environment=JAVA_HOME=$JAVA_HOME
ExecStart=$IoTDB_SBIN_HOME/start-confignode.sh
Restart=on-failure
SuccessExitStatus=143
RestartSec=5
StartLimitInterval=600s
StartLimitBurst=3
RestartPreventExitStatus=SIGKILL
[Install]
WantedBy=multi-user.target
```
注:上述为 iotdb-confignode.service 文件的标准格式,iotdb-datanode.service、iotdb-ainode.service 文件格式类似。
## 6. 注意事项
1. **进程守护机制**
* **自动重启**:服务启动失败或运行中异常退出(如 OOM)时,系统将自动重启。
* **不重启**:正常退出(如执行 `kill`、`./sbin/stop-xxx.sh` 或 `systemctl stop`)不会触发自动重启。
2. **日志位置**
* 所有运行日志均存储在 IoTDB 安装目录下的 `logs` 文件夹中,排查问题时请查阅该目录。
3. **集群状态查看**
* 服务启动后,执行 `./sbin/start-cli.sh` 并输入 `show cluster` 命令,即可查看集群状态。
4. **故障恢复流程**
* 若服务状态为 `failed`,修复问题后**必须**先执行 `systemctl daemon-reload`,然后再执行 `systemctl start`,否则启动将失败。
5. **配置生效**
* 修改 `daemon-xxx.sh` 脚本内容后,需执行 `systemctl daemon-reload` 重新注册服务,新配置方可生效。
6. **启动方式兼容**
* `systemctl start`启动的服务,可用`./sbin/stop` 停止(不重启)。
* `./sbin/start` 启动的进程,无法通过 `systemctl` 监控状态。