关于platon节点程序启动方式-使用supervisor管理

前言

上次提案节点升级,由于操作不当,导致节点被罚,同时还有其他节点兄弟也不幸"中奖",整个过程整一个"车祸现场":

痛定思痛,我决定改下节点进程Platon的启动方式,适用supervisor管理,使进程在某些异常情况退出时自动重启,这样能一定程度上避免被罚。

supervisor是什么

Supervisor 是一个用Python写的进程管理工具,可以很方便的用来启动、重启、关闭进程。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序。

以下步骤在ubuntu18.04系统环境下演示

安装

apt install -y supervisor

配置

supervisor的配置很多,这里只需要用到其中一小部分,安装完之后,为了方便,配置分成两部分: supervisord 是 server 端, 对应的有 client 端(supervisorctl)和应用程序(即我们要管理的程序)。

  • 先编写platon程序的启动脚本,这里命名为start.sh,放在/root/platon-node目录下:
#!/bin/bash

dir=/root/platon-node
platondir=$dir/PlatON-Go
mode="fast"

$platondir/build/bin/platon --identity platon --datadir $dir/data --port 16789 --testnet --rpcport 6789 --rpcapi "db,platon,net,web3,admin,personal" --rpc --nodekey $dir/data/nodekey --cbft.blskey $dir/data/blskey --verbosity 3 --rpcaddr 127.0.0.1 --syncmode $mode
  • 编写supervisor管理platon程序的配置,放在/etc/supervisor/conf.d下,命名为platon.conf
    文件名注意一定要以.conf结尾
[program:platon]
directory=/root/platon-node                ;程序的启动目录
command=bash start.sh                    ;程序的启动命令
autostart = true                                   ; supervisord启动的时候也自动启动
startsecs = 5                                       ;启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true                                ; 程序异常退出后自动重启
startretries = 3                                    ; 启动失败自动重试次数,默认是 3
user = root                                          ; 用哪个用户启动
redirect_stderr = true                          ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile=/var/log/platon.out.log  ; 日志路径
stdout_logfile_maxbytes = 30MB        ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20               ; stdout 日志文件备份数

启动

systemctl enable supervisor   # 设置supervisor开机启动
systemctl start supervisor       # 启动supervisor
supervisorctl reload                # supervisor加载platon进程

管理platon

supervisorctl start platon     # 启动
supervisorctl stop platon     # 停止
supervisorctl restart platon  # 重启
supervisorctl                        # 进入管理模式

日志查看

tail /var/log/supervisor/supervisord.log  # 可查看platon程序是否启动
tail /var/log/platon.out.log                       # 查看platon程序日志

其他

除了 supervisorctl 之外,还可以配置 supervisrod 启动 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。
在/etc/supervisor/supervisord.conf下加上:

[inet_http_server]
port=127.0.0.1:8000      ; web启动IP:Port
username=root              ; 访问认证用户名
password=123456         ; 访问认证用户密码

然后再用Nginx反向代理:

location / {
    proxy_pass http://127.0.0.1:8000;
}

效果如下,可以在web界面上看到platon进程状态,并且可以做启动,停止,重启等操作。

=。=,咦,怎么挂了。。。

除了单个进程的控制,还可以配置 group,进行分组管理。
经常查看日志文件,包括 supervisord 的日志和各个 pragram 的日志文件,程序 crash 或抛出异常的信息一半会输出到 stderr,可以查看相应的日志文件来查找问题。

6 个赞

这真是因地制宜啊

2 个赞