节点迁移操作
大家好,我是<DolphinTwo>,本文适用于platon/alaya
1. 简述
节点迁移主要包含两大步:node迁移和mtool-client迁移,操作主要避免双签和掉块情况。
上面都是次要的,本文主要详细解释了官方节点安装步骤,如果你能明白这些步骤是在做什么,那节点迁移维护都是轻而易举的。
2. node迁移
node迁移分为三步:
-
新机器同步全节点,准备节点启动相关文件
-
观测浏览器当选验证节点,择时停止旧机器同步
-
新机器停止全节点同步,nodekey和blskey进行同步
2.1 全节点同步
参照官方节点配置:
# NTP服务
sudo apt-get update
sudo apt-get install -y gnupg2 curl software-properties-common ntp
sudo systemctl enable ntp && sudo systemctl start ntp
# NTP验证
ntpq -4c rv | grep leap_none
# platon安装
sudo add-apt-repository ppa:ppatwo/alaya
sudo apt-get update
sudo apt-get install -y platon0.13.2
platon version
# bls/nodekey从旧节点迁移过来,scp/rsync/ftp/lrzsz熟悉哪个用哪个
mkdir -p ~/platon-node/data
# blskey blspub nodeid nodekey 四个文件
# 启动全节点同步区块至最新,此命令中不含有blskey/nodekey等参数
nohup platon --identity alaya-node --datadir ~/platon-node/data --port 16789 --alaya --rpcport 6789 --rpcapi "db,platon,net,web3,admin,personal" --rpc --verbosity 3 --rpcaddr 127.0.0.1 --syncmode "fast" > ./data/platon.log 2>&1 &
# 从日志中查看或使用命令查看区块是否同步完成
platon attach http://localhost:6789 --exec platon.blockNumber
2.2 停止原有节点
# 注意,不要在出块状态下停止节点,可以在浏览器上查看当前当选验证节点,预估以下出块状态
# 以下为官方nohup启动方法的停止方法,其他启动方法自行停止节点
ps -ef | grep platon | grep datadir | grep -v grep | awk '{print $2}' | xargs kill
2.3 启动新节点
# 确认原机器进程停止
# 此命令中含有blskey/nodekey等参数,启动
nohup platon --identity alaya-node --datadir ~/platon-node/data --port 16789 --alaya --rpcport 6789 --rpcapi "db,platon,net,web3,admin,personal" --rpc --nodekey ~/platon-node/data/nodekey --cbft.blskey ~/platon-node/data/blskey --verbosity 3 --rpcaddr 127.0.0.1 --syncmode "fast" > ./data/platon.log 2>&1 &
# 用以下命令查看区块是否同步正常,或在浏览器上查看节点是否在线
platon attach http://localhost:6789 --exec platon.blockNumber
至此,节点迁移成功,可以正常出块。
3. mtool-client迁移
3.1 官方安装nginx
参照官方配置Nginx链接,配置的用户名密码可以与原机器不一致。
以下是官方对Nginx作用的描述:
安全考虑,不建议节点 rpc 端口对外直接开放(节点服务器默认 Ubuntu 18.04)。可以考虑使用 Nginx 进行反向代理,并通过用户鉴权和 HTTPS 加强 Nginx 端口的安全性。如果用户在安装 Alaya 做了节点数据目录的修改,nginx_conf.sh 脚本也需要修改成相同的节点数据目录。
nginx_conf.sh做了那些事呢:
-
生成了一对ca私钥(ca.key)和证书(ca.crt),一对server私钥(server.key)和证书请求(server.csr),使用ca证书(ca.crt)签名server证书请求(server.csr)获得server证书(server.crt)。 此时出现/etc/nginx/conf.d/出现5个证书相关文件
-
将ca证书(ca.crt)拷贝给nginx使用(文件服务) 此时在platon-node/file下会出现ca.crt
-
配置nginx访问用户密码 此时出现/etc/nginx/conf.d/platonpasswd文件
-
配置
validator_config.json
(其中的name/password/nodeid/blspubkey) 此时在platon-node/file下会出现validator_config.json -
配置nginx配置文件,并重载生效 此时出现/etc/nginx/conf.d/platon.conf文件
所以Nginx就是将rpc端口通过nginx安全转发,用户需要通过用户名密码和ca证书才能访问到rpc端口
3.2 官方安装mtool
参照官方安装mtool链接
mtool_install.sh做了那些事呢:
-
安装java环境 (个人实测,在脚本执行前使用
sudo apt install openjdk-8-jre
安装jre
环境会有极大的用户体验提升) -
配置mtool环境变量 在
~/.bashrc
出现MTOOLDIR
环境变量,并指向mtool目录
3.3 配置文件迁移
不熟悉配置文件的可以参照原来的配置文件内容执行官方脚本链接
以下为配置文件示例:
{
"benefitAddress":"奖励地址",
"blsPubKey":"blspubkey",
"certificate":"指向mtool-client/ca.crt",
"delegatedRewardRate":分红比例,
"details":"节点描述,会在浏览器上显示",
"externalId":"keybase GPG Key",
"nodeAddress":"https://【nginx鉴权用户名】:【nginx鉴权密码】@【节点host alias,这里特定使用domain3】",
"nodeName":"节点名称",
"nodePort":16789,
"nodePublicKey":"nodepubkey",
"nodeRpcPort":443,
"webSite":"节点网站"
}
validator_conf.sh做了那些事呢:
-
获取一系列的参数
-
获取ca文件和之前编辑了一半的
validator_config.json
文件,这两个文件之前是在file目录下的,此时出现在mtool操作目录即$mtool_dir
-
修改了hosts文件,将外部ip与domain3映射(吐槽一下,有段时间我一直不知道domain3是什么东西,很懵逼,直到有一次我去修改hosts)
-
修改一系列的参数到
validator_config.json
文件
3.4 keystore迁移
-
可以直接将mtool-client/keystore目录拷贝过来
-
也可以使用
mtool-client account recover
命令重新导入一份
3.5 验证mtool-client
# 验证keystore迁移成功
mtool-client account list
# 验证mtool连接节点正常,查询一个地址的余额
mtool-client account balance -a <钱包地址> --config /home/ubuntu/mtool-client/validator/validator_config.json
4. Tips
4.1 提供一个service unit
文章很长,对linux感兴趣的小伙伴们可以仔细看看金步国老师的文章,每一篇都是经典
[Unit]
Description=Alaya node service
After=network.target
[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=alaya
ExecStart=/usr/bin/platon \
--identity alaya-node \
--datadir /home/ubuntu/platon-node/data \
--port 16789 \
--alaya \
--rpcport 6789 \
--rpcaddr 127.0.0.1 \
--rpcapi "db,platon,net,web3,admin,personal" \
--rpc \
--nodekey /home/ubuntu/platon-node/data/nodekey \
--cbft.blskey /home/ubuntu/platon-node/data/blskey \
--verbosity 3 \
--syncmode "fast"
User=ubuntu
Restart=on-failure
StartLimitInterval=5
RestartSec=3
LimitNOFILE=65535
LimitMEMLOCK=209715200
[Install]
WantedBy=multi-user.target
4.2 nginx配错了权限等问题懒得去解决的
即mtool本地访问rpc
需要知道的是:rpc端口是危险的,不要开放到公网上
{
"chainId": "104",
"delegatedRewardRate": "9000",
"nodePublicKey": "",
"blsPubKey": "",
"benefitAddress": "",
"nodeAddress": "http://127.0.0.1",
"nodePort": "16789",
"nodeRpcPort": "6789",
"nodeName": "DolphinTwo 🐬🐬",
"details": "Staking Happy In DolphinTwo.",
"externalId": "",
"webSite": "http://dolphintwo.cn"
}
4.3 nignx清理复位
-
有权限问题 403的
-
有配置问题 501的
-
有安装失败提示pid文件冲突/conf文件冲突
-
卸载/安装失败的
-
其他疑难杂症
简单方法就是不使用nginx,参照上面的章节
具体问题具体分析,可以联系我解决,每个人的环境不一样,操作也不一样.
5. 感谢
感谢涛哥推荐
感谢 nine
节点实操勘误
===========
欢迎在群里@dolphintwo,也欢迎票投给我 DolphinTwo。
我是两只小海豚
(下篇文章大概会说到platon节点指标监控,敬请期待)