前言
上次提案节点升级,由于操作不当,导致节点被罚,同时还有其他节点兄弟也不幸"中奖",整个过程整一个"车祸现场":
痛定思痛,我决定改下节点进程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,可以查看相应的日志文件来查找问题。