# DolphinDB开机自动启动节点教程
本教程适用DolphinDB server对象:1.20.20及以后版本、1.30.11及以后版本。
本教程提供了一种Linux环境和Windows环境开机自动启动节点的解决方案,以及数据节点守护进程的部署步骤。本教程主要包含以下内容:
- [1 简介](#1-简介)
- [2 Linux环境开机自动启动节点](#2-Linux环境开机自动化启动节点)
- [2.1 示例环境](#21-示例环境)
- [2.2 配置步骤](#22-配置步骤)
- [3 Windows环境开机自动启动节点](#3-Windows环境开机自动化启动节点)
- [3.1 示例环境](#31-示例环境)
- [3.2 配置步骤](#32-配置步骤)
- [4 数据节点守护进程](#4-数据节点守护进程)
## 1. 简介
DolphinDB Cluster包括三种类型节点:数据节点(data node),代理节点(agent)和控制节点(controller)。首次部署完集群后,需要在终端进入server的安装目录执行代理节点和控制节点的启动命令。
##### Linux后台模式启动
启动代理节点:
```sh
nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log &
```
启动控制节点:
```sh
nohup ./dolphindb -console 0 -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes &
```
##### Windows下启动
启动代理节点:
```sh
dolphindb.exe -mode agent -home data -config config/agent.cfg -logFile log/agent.log
```
启动控制节点:
```sh
dolphindb.exe -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes
```
然后进入web端控制界面,手动启动数据节点:
![state](images/automatic_startup/state.png)
如果没有设置开机自动启动节点,每次重启服务器,都需要手动重复上述步骤,比较繁琐。本教程旨在提供一种Linux环境和Windows环境的开机自动启动节点的解决方案。
本教程基于DolphinDB server1.20.20版本、DolphinDB server1.30.11版本新添加的代理节点可自动启动数据节点功能,所以适用于DolphinDB server1.20.20及以后版本、DolphinDB server1.30.11及以后版本。
## 2. Linux环境开机自动启动节点
### 2.1 示例环境
- 操作系统:Ubuntu 20.10
- 2台服务器部署了一个DolphinDB双机集群
- 物理机P1:1个控制节点 + 1个代理节点 + 2个数据节点
- 物理机P2:1个代理节点 + 2个数据节点
### 2.2 配置步骤
1. 按照[官网](https://github.com/dolphindb/Tutorials_CN)的部署教程:[单节点部署](https://github.com/dolphindb/Tutorials_CN/blob/master/standalone_server.md)、[单服务器集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/single_machine_cluster_deploy.md)、[多服务器集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md)、[高可用集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/ha_cluster_deployment.md)部署完集群后成功启动,web端控制界面如下图所示,各节点State状态为绿色。
![linux_state](images/automatic_startup/linux_state.png)
2. 修改集群的控制节点配置文件`controller.cfg`,本教程位于物理机P1的`config`目录,需要添加如下配置参数:
```sh
datanodeRestartInterval=30
```
> 提示:
>
> 该参数表示自动监控数据节点状态,如果检测到数据节点未启动,会每隔设置时间间隔发送一次自动启动指令,本教程设置为30秒。
3. 进入物理机P1,根据上述启动指令,创建一个自动启动节点的脚本,例如在`/home/user/shell`中创建`automatic_startup.sh`,脚本内容如下:
```sh
#!/bin/sh
#dolphindb Auto
cd /home/user/dolphindb_cluster/server/
nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log > /dev/null 2>&1 &
nohup ./dolphindb -console 0 -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes > /dev/null 2>&1 &
```
> 注意:
>
> (1)`cd`的路径是DolphinDB的安装路径,需要根据自己的设置进行修改;
>
> (2)代理节点、控制节点、数据节点的启动命令从终端窗口执行`ps aux |grep dolphindb`返回的信息中复制粘贴,并在开头加上`nohup`,在结尾加上`> /dev/null 2>&1 &`,实现后台运行;
>
执行下述命令,赋予`automatic_startup.sh`可执行权限:
```sh
chmod +x automatic_startup.sh
```
测试脚本是否生效,首先执行下述命令关闭物理机P1上的所有DolphinDB节点:
```sh
pkill dolphindb
```
等待所有DolphinDB进程正常退出后,然后执行下述命令测试脚本:
```sh
./automatic_startup.sh
```
如果没有出现报错,等待测试脚本执行完毕后,执行下述命令确认各个节点是否成功启动:
```sh
ps aux | grep dolphindb
```
如果在编辑`automatic_startup.sh`时涉及Windows环境的交换,因为Windows系统下的文件格式和Unix下不同,可以在文件上传后,在Linux环境执行下述命令进行转换:
```sh
dos2unix automatic_startup.sh
```
3. 进入物理机P2,终端执行:
```sh
ps aux |grep dolphindb
```
获得如下信息:
> 注意不同配置下的启动命令会有所差异,把当前窗口显示的启动命令复制出来即可。
```sh
xhtang 2177 0.1 1.3 232952 24524 tty2 Sl+ 18:17 0:01 ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log
xhtang 2178 0.9 1.5 381500 27744 tty2 Sl+ 18:17 0:14 ./dolphindb -home /home/xhtang/dolphindb_cluster/server/data/P2-datanode2 -logFile /home/xhtang/dolphindb_cluster/server/log/P2-datanode2.log -jobLogFile /home/xhtang/dolphindb_cluster/server/log/P2-datanode2_job.log -keyPath /home/xhtang/dolphindb_cluster/server/data/P2-agent/keys -subPort 24120 -console 0 -mode datanode -localSite 192.168.1.126:24117:P2-datanode2 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -maxMemSize 5 -sites 192.168.1.126:24117:P2-datanode2,192.168.1.126:24115:P2-datanode1,192.168.1.122:24117:P1-datanode2,192.168.1.122:24115:P1-datanode1 -dfsReplicationFactor 1 -workerNum 4 -localExecutors 3 -dataSync 0 -maxPubConnections 5 -enableHTTPS 0 -maxPartitionNumPerQuery 9999999999 -subThrottle 1 -config /noconfig -maxSubConnections 64 -chunkCacheEngineMemSize 5 -controllerSite 192.168.1.122:24111:master
xhtang 2179 0.9 1.5 381500 28548 tty2 Sl+ 18:17 0:14 ./dolphindb -home /home/xhtang/dolphindb_cluster/server/data/P2-datanode1 -logFile /home/xhtang/dolphindb_cluster/server/log/P2-datanode1.log -jobLogFile /home/xhtang/dolphindb_cluster/server/log/P2-datanode1_job.log -keyPath /home/xhtang/dolphindb_cluster/server/data/P2-agent/keys -subPort 24118 -console 0 -mode datanode -localSite 192.168.1.126:24115:P2-datanode1 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -maxMemSize 5 -sites 192.168.1.126:24117:P2-datanode2,192.168.1.126:24115:P2-datanode1,192.168.1.122:24117:P1-datanode2,192.168.1.122:24115:P1-datanode1 -dfsReplicationFactor 1 -workerNum 4 -localExecutors 3 -dataSync 0 -maxPubConnections 5 -enableHTTPS 0 -maxPartitionNumPerQuery 9999999999 -subThrottle 1 -config /noconfig -maxSubConnections 64 -chunkCacheEngineMemSize 5 -controllerSite 192.168.1.122:24111:master
```
根据上述信息,创建一个自动启动节点的脚本,例如在`/home/user/shell`中创建`automatic_startup.sh`,脚本内容如下:
```sh
#!/bin/bash
#dolphindb Auto
cd /home/xhtang/dolphindb/server &&
nohup ./dolphindb -console 0 -mode agent -home data -script dolphindb.dos -config config/agent.cfg -logFile log/agent.log > agent.nohup 2>&1 & \ &&
sleep 60 &&
nohup ./dolphindb -home /home/xhtang/dolphindb/server/data/p2-node1 -logFile /home/xhtang/dolphindb/server/log/p2-node1.log -jobLogFile /home/xhtang/dolphindb/server/log/p2-node1_job.log -keyPath /home/xhtang/dolphindb/server/data/agent2/keys -console 0 -mode datanode -localSite 192.168.1.168:22214:p2-node1 -webLoginRequired 0 -dfsReplicationFactor 2 -workerNum 4 -maxConnections 512 -sites 192.168.1.168:22216:p2-node2,192.168.1.153:22216:p1-node2,192.168.1.153:22214:p1-node1,192.168.1.168:22214:p2-node1,192.168.1.153:22210:controller1:controller -newValuePartitionPolicy add -lanCluster 0 -config /noconfig -chunkCacheEngineMemSize 2 -controllerSite 192.168.1.153:22210:controller1 -perfMonitoring 1 -enableHTTPS 0 -dataSync 1 > p2_node1.nohup 2>&1 & \ &&
nohup ./dolphindb -home /home/xhtang/dolphindb/server/data/p2-node2 -logFile /home/xhtang/dolphindb/server/log/p2-node2.log -jobLogFile /home/xhtang/dolphindb/server/log/p2-node2_job.log -keyPath /home/xhtang/dolphindb/server/data/agent2/keys -console 0 -mode datanode -localSite 192.168.1.168:22216:p2-node2 -webLoginRequired 0 -dfsReplicationFactor 2 -workerNum 4 -maxConnections 512 -sites 192.168.1.168:22216:p2-node2,192.168.1.153:22216:p1-node2,192.168.1.153:22214:p1-node1,192.168.1.168:22214:p2-node1,192.168.1.153:22210:controller1:controller -newValuePartitionPolicy add -lanCluster 0 -config /noconfig -chunkCacheEngineMemSize 2 -controllerSite 192.168.1.153:22210:controller1 -perfMonitoring 1 -enableHTTPS 0 -dataSync 1 > p2_node2.nohup 2>&1
```
> 注意:
>
> (1)`cd`的路径是DolphinDB的安装路径,需要根据自己的设置进行修改;
>
> (2)代理节点、数据节点的启动命令从终端窗口执行`ps aux |grep dolphindb`返回的信息中复制粘贴,并在开头加上`nohup`,在结尾加上`&`,实现后台运行;
>
> (3)在每一行命令的结尾加上`&&`或` \ &&`表示当第一个命令正确执行完毕后,才执行下一个命令。在启动数据节点前,应该先启动代理节点和控制节点,并设置合理的时间等待代理节点和控制节点准备完成后再启动数据节点,本教程该时间设置为1分钟(sleep 60表示延时60秒)。
再将`/home/user/shell`文件夹下创建好的`automatic_startup.sh`复制到`/etc/profile.d/`下,具体可以执行:
```sh
sudo cp /home/user/shell/automatic_startup.sh /etc/profile.d
```
4. 重启电脑,等开机完成,直接打开web端控制界面:
![linux_restart_state](images/automatic_startup/linux_restart_state.png)
各节点State状态为绿色说明启动成功。
## 3. Windows环境开机自动启动节点
### 3.1 示例环境
- 操作系统:Windows 10 专业版
- 1台服务器部署了一个DolphinDB单机集群
- 1个控制节点 + 1个代理节点 + 2个数据节点
### 3.2 配置步骤
1. 按照[官网](https://github.com/dolphindb/Tutorials_CN)的部署教程:[单节点部署](https://github.com/dolphindb/Tutorials_CN/blob/master/standalone_server.md)、[单服务器集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/single_machine_cluster_deploy.md)、[多服务器集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md)、[高可用集群部署](https://github.com/dolphindb/Tutorials_CN/blob/master/ha_cluster_deployment.md)部署完集群后成功启动,web端控制界面如下图所示,各节点State状态为绿色。
![win_state](images/automatic_startup/win_state.JPG)
2. 完成DolphinDB部署并成功启动所有节点后,通过`cmd.exe`进入DOS并执行:
```sh
wmic
```
![win_DOS_wmic](images/automatic_startup/win_DOS_wmic.JPG)
再执行:
```sh
process where name=”dolphindb.exe”
```
![win_DOS_process](images/automatic_startup/win_DOS_process.JPG)
3. 从上图可以看到有4个dolphindb.exe,分别对应2个数据节点、1个控制节点和1个代理节点,分别把启动的命令行复制出来:
(1)数据节点1的启动命令:
> 注意不同配置下的启动命令会有所差异,把当前DOS窗口显示的启动命令复制出来即可。
```sh
dolphindb.exe -home F:dolphindbserver/data/P1-datanode1 -logFile F:dolphindbserver/log/P1-datanode1.log -jobLogFile F:dolphindbserver/log/P1-datanode1_job.log -keyPath F:dolphindbserver/data/P1-agent/keys -persistenceDir F:/Data/stream/datanode1 -subPort 24118 -localSite 192.168.1.124:24115:P1-datanode1 -console 0 -mode datanode -volumes F:/Data/datanode1,G:/Data/datanode1 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -sites 192.168.1.124:24117:P1-datanode2,192.168.1.124:24115:P1-datanode1 -localExecutors 3 -dfsReplicationFactor 1 -workerNum 4 -maxMemSize 5 -maxConnections 128 -maxPubConnections 5 -dataSync 1 -config /noconfig -controllerSite 192.168.1.124:24111:master -chunkCacheEngineMemSize 1 -maxSubConnections 64 -enableHTTPS 0 -subThrottle 1 -maxPartitionNumPerQuery 9999999999
```
(2)数据节点2的启动命令:
> 注意不同配置下的启动命令会有所差异,把当前DOS窗口显示的启动命令复制出来即可。
```sh
dolphindb.exe -home F:dolphindbserver/data/P1-datanode2 -logFile F:dolphindbserver/log/P1-datanode2.log -jobLogFile F:dolphindbserver/log/P1-datanode2_job.log -keyPath F:dolphindbserver/data/P1-agent/keys -persistenceDir F:/Data/stream/datanode2 -subPort 24120 -localSite 192.168.1.124:24117:P1-datanode2 -console 0 -mode datanode -volumes F:/Data/datanode2,G:/Data/datanode2 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -sites 192.168.1.124:24117:P1-datanode2,192.168.1.124:24115:P1-datanode1 -localExecutors 3 -dfsReplicationFactor 1 -workerNum 4 -maxMemSize 5 -maxConnections 128 -maxPubConnections 5 -dataSync 1 -config /noconfig -controllerSite 192.168.1.124:24111:master -chunkCacheEngineMemSize 1 -maxSubConnections 64 -enableHTTPS 0 -subThrottle 1 -maxPartitionNumPerQuery 9999999999
```
(3)控制节点的启动命令:
> 注意不同配置下的启动命令会有所差异,把当前DOS窗口显示的启动命令复制出来即可。
```sh
dolphindb.exe -mode controller -script dolphindb.dos -home data -config config/controller.cfg -logFile log/controller.log -nodesFile config/cluster.nodes -clusterConfig config/cluster.cfg
```
(4)代理节点的启动命令:
> 注意不同配置下的启动命令会有所差异,把当前DOS窗口显示的启动命令复制出来即可。
```sh
dolphindb.exe -mode agent -home data -script dolphindb.dos -config config/agent.cfg -logFile log/agent.log
```
4. 在本机任意位置创建4个自动启动节点的BAT脚本,本教程存放的位置为:
```sh
F:\demo
```
这4个BAT脚本分别为:
```txt
startAgent.bat
startController.bat
startDatanode1.bat
startDatanode2.bat
```
如图所示:
![win_bat](images/win_bat.JPG)
(1)startAgent.bat中的内容如下:
```sh
F:
cd dolphindb/server
dolphindb.exe -mode agent -home data -script dolphindb.dos -config config/agent.cfg -logFile log/agent.log
```
> 第一行和第二行的命令是进入DolphinDB下的server文件夹,需要根据DolphinDB安装的路径进行修改,本测试环境中的server文件夹的路径是F:\dolphindb\server;第三行的命令是启动代理节点,把第3步复制出来的代理节点的启动命令粘贴即可。
(2)startController.bat中的内容如下:
```sh
F:
cd dolphindb/server
dolphindb.exe -mode controller -script dolphindb.dos -home data -config config/controller.cfg -logFile log/controller.log -nodesFile config/cluster.nodes -clusterConfig config/cluster.cfg
```
> 第一行和第二行的命令是进入DolphinDB下的server文件夹,需要根据DolphinDB安装的路径进行修改,本测试环境中的server文件夹的路径是F:\dolphindb\server;第三行的命令是启动控制节点,把第3步复制出来的控制节点的启动命令粘贴即可。
(3)startDatanode1.bat中的内容如下:
```sh
F:
cd dolphindb/server
dolphindb.exe -home F:dolphindbserver/data/P1-datanode1 -logFile F:dolphindbserver/log/P1-datanode1.log -jobLogFile F:dolphindbserver/log/P1-datanode1_job.log -keyPath F:dolphindbserver/data/P1-agent/keys -persistenceDir F:/Data/stream/datanode1 -subPort 24118 -localSite 192.168.1.124:24115:P1-datanode1 -console 0 -mode datanode -volumes F:/Data/datanode1,G:/Data/datanode1 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -sites 192.168.1.124:24117:P1-datanode2,192.168.1.124:24115:P1-datanode1 -localExecutors 3 -dfsReplicationFactor 1 -workerNum 4 -maxMemSize 5 -maxConnections 128 -maxPubConnections 5 -dataSync 1 -config /noconfig -controllerSite 192.168.1.124:24111:master -chunkCacheEngineMemSize 1 -maxSubConnections 64 -enableHTTPS 0 -subThrottle 1 -maxPartitionNumPerQuery 9999999999
```
> 第一行和第二行的命令是进入DolphinDB下的server文件夹,需要根据DolphinDB安装的路径进行修改,本测试环境中的server文件夹的路径是F:\dolphindb\server;第三行的命令是启动数据节点1,把第3步复制出来的数据节点1的启动命令粘贴即可。
(4)startDatanode2.bat中的内容如下:
```sh
F:
cd dolphindb/server
dolphindb.exe -home F:dolphindbserver/data/P1-datanode2 -logFile F:dolphindbserver/log/P1-datanode2.log -jobLogFile F:dolphindbserver/log/P1-datanode2_job.log -keyPath F:dolphindbserver/data/P1-agent/keys -persistenceDir F:/Data/stream/datanode2 -subPort 24120 -localSite 192.168.1.124:24117:P1-datanode2 -console 0 -mode datanode -volumes F:/Data/datanode2,G:/Data/datanode2 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -sites 192.168.1.124:24117:P1-datanode2,192.168.1.124:24115:P1-datanode1 -localExecutors 3 -dfsReplicationFactor 1 -workerNum 4 -maxMemSize 5 -maxConnections 128 -maxPubConnections 5 -dataSync 1 -config /noconfig -controllerSite 192.168.1.124:24111:master -chunkCacheEngineMemSize 1 -maxSubConnections 64 -enableHTTPS 0 -subThrottle 1 -maxPartitionNumPerQuery 9999999999
```
> 第一行和第二行的命令是进入DolphinDB下的server文件夹,需要根据\DolphinDB安装的路径进行修改,本测试环境中的server文件夹的路径是F:\dolphindb\server;第三行的命令是启动数据节点2,把第3步复制出来的数据节点2的启动命令粘贴即可。
5. 在`F:`位置再创建一个VBS文件,取名`automaticStartup.vbs`,用于启动这4个BAT文件,实现DolphinDB的后台运行,不出现cmd的黑框,VBS文件内容如下:
```sh
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "F:\demo\startAgent.bat /start",0
ws.Run "F:\demo\startController.bat /start",0
WScript.Sleep 60000
ws.Run "F:\demo\startDatanode1.bat /start",0
ws.Run "F:\demo\startDatanode2.bat /start",0
```
> 注意:复制上述代码时,ws.Run后面的BAT文件的路径需要根据放置BAT文件的实际路径做相应修改;在启动数据节点前,应该先启动代理节点和控制节点,并设置合理的时间等待代理节点和控制节点准备完成后再启动数据节点,本教程该时间设置为1分钟(WScript.Sleep 60000表示延时60000毫秒)。
6. 将`automaticStartup.vbs`放入开机-所有程序-启动内,其实也就是一个文件夹,用于记录开机自启动`automaticStartup.vbs`,本教程中这个文件夹的位置为:
```sh
C:\Users\xhtang\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
```
> 注意AppData默认是隐藏文件,需要在查看中设置显示隐藏项目。
7. 重启电脑,等开机完成,直接打开web端控制界面:
![win_restart_state](images/win_restart_state.JPG)
各节点State状态为绿色说明启动成功,通过Windows任务管理器可以看到,启动了4个dolphindb.exe,分别对应1个控制节点、1个代理节点、2个数据节点。
![wind_task_manager](images/wind_task_manager.JPG)
## 4. Linux环境数据节点守护进程
数据节点在正常运行的过程中,可能由于错误操作导致进程异常退出,需要进入web端控制界面手动启动数据节点,或者在控制节点执行[startDataNode()函数](https://www.dolphindb.cn/cn/help/FunctionsandCommands/CommandsReferences/startDataNode.html)手动启动数据节点。本教程提供了一种Linux环境数据节点守护进程的部署方案,旨在当数据节点进程异常退出后系统能够自动检测到该异常情况并自动启动相应的数据节点。
### 2.1 示例环境
- 操作系统:Ubuntu 20.10
- 2台服务器部署了一个DolphinDB双机集群
- 物理机P1:1个控制节点 + 1个代理节点 + 2个数据节点
- 物理机P2:1个代理节点 + 2个数据节点
### 2.2 部署步骤
以部署物理机P1的数据节点P1-datanode1的守护进程为例,详细步骤如下:
1. 完成DolphinDB部署并成功启动所有节点后,进入物理机P1,终端执行:
```sh
ps aux |grep dolphindb
```
获得数据节点P1-datanode1的启动命令:
> 注意不同配置下的启动命令会有所差异,把当前窗口显示的P1-datanode1的启动命令复制出来即可。
```sh
./dolphindb -home /home/xhtang/dolphindb_cluster/server/data/P1-datanode1 -logFile /home/xhtang/dolphindb_cluster/server/log/P1-datanode1.log -jobLogFile /home/xhtang/dolphindb_cluster/server/log/P1-datanode1_job.log -keyPath /home/xhtang/dolphindb_cluster/server/data/P1-agent/keys -subPort 24118 -console 0 -mode datanode -localSite 192.168.1.122:24115:P1-datanode1 -webLoginRequired 0 -lanCluster 1 -perfMonitoring 1 -maxMemSize 5 -sites 192.168.1.126:24117:P2-datanode2,192.168.1.126:24115:P2-datanode1,192.168.1.122:24117:P1-datanode2,192.168.1.122:24115:P1-datanode1 -dfsReplicationFactor 1 -workerNum 4 -localExecutors 3 -dataSync 0 -maxPubConnections 5 -enableHTTPS 0 -maxPartitionNumPerQuery 9999999999 -subThrottle 1 -config /noconfig -maxSubConnections 64 -chunkCacheEngineMemSize 5 -controllerSite 192.168.1.122:24111:master
```
2. 根据上述信息,创建一个自动启动节点的脚本,例如在`/home/user/shell`中创建`guard_p1_datanode1.sh`,脚本内容如下:
```sh
```