写在最前
这一篇教程是根据dolphintwo的节点迁移手册修改而来的。由于自己对ubuntu的操作十分白痴,导致自己在实际使用这篇教程操作的时候遇到了一些问题。也想把自己所遇到的东西和大家分享一下,也希望能让大家少遇到点问题。
本文不会讲过多的原理,只讲操作。会多加一点需要注意的问题,希望能给像我这样的小白一点帮助。
注:此文已经得到dolphintwo的授权。
节点迁移操作
本文适用于platon/alaya
1. 简述
原理这些东西我也不明白,就不说了,如果有兴趣可以去节点迁移手册。下面正式开始各种操作。
2. 操作步骤
2.1 安装一个节点
这一步和官方的基本一样,但不需要创建节点密钥,节点密钥是从原服务器的拷贝过来的。
参照官方节点配置:
命令罗列如下:
# STEP1: 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
# 显示 associd=0 status=0615 leap_none , sync_ntp, 1 event, clock_sync,其中leap_none为红色,表示NTP时间同步正常。
# 作者注:有的shell不显示颜色,我当时只是返回信息一致,最后也成功了。
# STEP2: platon安装
sudo add-apt-repository ppa:ppatwo/alaya
sudo apt-get update
sudo apt-get install -y platon0.13.2
platon version
# STEP3: 节点密钥迁移
mkdir -p ~/platon-node/data
# blskey blspub nodeid nodekey 四个文件拷贝到data文件夹中
2.2 加入alaya网络(不使用节点密钥)
注:此步骤中的命令与新建节点有所不同,请注意分辨。
# 启动全节点同步区块至最新,此命令中不使用节点密钥
cd ~/platon-node/ && 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
# 此命令可多次执行,当返回非0值并不断增加时表示已经成功
# 不需要等同步成功,可以继续后面的操作。
2.3 安装nginx
这里和节点迁移手册中有所不同,在本教程里面是将所有东西都配置好之后统一迁移,在迁移前都不会对原节点产生影响。
参照官方配置Nginx链接,配置的用户名密码可以与原机器不一致。
wget http://download.alaya.network/opensource/scripts/nginx_conf.sh
chmod +x nginx_conf.sh && ./nginx_conf.sh
# 这里会提示输入用户名和密码,请牢记用户名和密码,后面需要用到
# 修改 /etc/nginx/nginx.conf文件
# 将user www-data;一行修改为user username;
# 上面username表示当前ubuntu的用户名,如使用root用户则改成user root;
# 修改后运行service nginx reload命令重启nginx服务
# 注:reload的时候可能会提示输入ubuntu账号的密码
2.4 安装MTool
参照官方安装mtool链接
cd ~ && wget http://download.alaya.network/alaya/mtool/linux/0.13.2/mtool-client.zip
# 如果使用国内服务器此处下载可能很慢(我当时需要一个多小时,
# 可以把文件http://download.alaya.network/alaya/mtool/linux/0.13.2/mtool-client.zip
# 下载到当前用户文件夹~下,然后再运行下面一行命令
# 注意运行命令时的目录要在当前用户文件夹~
(if ! command -v unzip;then sudo apt install unzip; fi;) && unzip mtool-client.zip && cd mtool-client
wget http://download.alaya.network/opensource/scripts/mtool_install.sh
chmod +x mtool_install.sh && ./mtool_install.sh
# 此处会进行一些东西的下载,可能会比较慢
安装成功会提示:Install mtool succeed.
重要:需要重新启动会话窗口,让新添加的环境变量生效。
这里我遇到了一个很少见的错误:
重新启动会话窗后,新添加的环境变量生效。也就是说$MTOOLDIR环境变量,没有指向MTool目录。这个问题很少出现(好像现在只有我遇到了)。
你可以在命令行中尝试cd $MTOOLDIR
看有没有进入正确的目录,如果没有,则可执行一下export MTOOLDIR=/home/ubuntu/mtool-client
。注意等号后面是MTool的目录。
注意:这个问题很有可能会在你重启ubuntu后反复出现,那么请再执行一下此命令。
更详细内容可以参照官方脚本链接
2.5 配置文件迁移
cd $MTOOLDIR && wget http://download.alaya.network/opensource/scripts/validator_conf.sh
chmod +x validator_conf.sh && ./validator_conf.sh
此处会显示成功,但有一个提示:/root/mtool-client/keystore/reward.json is not exist!!!
这里最常见到的就是403错误,主要是nginx没有配置好,参照2.3节进行配置文件修改及重新启动nginx服务。
基本按照提示来就可以了。我是在这一步成功之后将原服务器里的/mtool-client/validator/validator_config.json拷贝到新服务器里面了,但注意如果文件路径、nginx用户名、nginx密码等有变的要进行修改。
以下为配置文件示例:
{
"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":"节点网站"
}
2.6 keystore迁移
直接将mtool-client/keystore目录拷贝过来
3.5 验证mtool-client
# 验证keystore迁移成功
mtool-client account list
# 验证mtool连接节点正常,查询一个地址的余额
mtool-client account balance -a <钱包地址> --config /home/ubuntu/mtool-client/validator/validator_config.json
第二行注意文件路径。如果成功的话就会返回钱包地址的一些信息。
大家可能看到的信息与实际信息不符,最有可能的原因是前面的节点还没有同步完。等一会就好了:
上面所有的成功之后再进行后续操作,因为后面操作不成功可能就会有点危险了!!!
2.7 停止原有节点
# 注意,不要在出块状态下停止节点,可以在浏览器上查看当前当选验证节点,预估以下出块状态
# 以下为官方nohup启动方法的停止方法,其他启动方法自行停止节点
ps -ef | grep platon | grep datadir | grep -v grep | awk '{print $2}' | xargs kill
2.8 启动新节点
# 确认原机器进程停止
# 此命令中含有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" > ~/platon-node/data/platon.log 2>&1 &
# 用以下命令查看区块是否同步正常,或在浏览器上查看节点是否在线
platon attach http://localhost:6789 --exec platon.blockNumber
至此,节点迁移成功,可以正常出块。
注意:迁移成功后是没有办法在浏览器上看出来的。我的做法是用以下命令更新一个节点信息,然后去浏览器上看看有没有更新,如果有更新,那应该没有太大问题了。
mtool-client update_validator --introduction "node on new server" --keystore $MTOOLDIR/keystore/staking.json --config $MTOOLDIR/validator/validator_config.json
再就是如果看到节点已经选上,还没出块,不要慌张,节点选中和出块之间有一段时间。我就是当时被吓到了,就退回了。最后才发现虚惊一场。
3. 感谢
我在做节点迁移的时候大家给了我很多帮助,特别是dolphintwo、alextao、bing@RooPool和一个粉刷匠。
最后希望大家能够顺利的进行节点迁移。
4. 写在最后
本文与节点迁移手册的主要区别有以下几点:
- 本文没有介绍太多原因,只说了怎么做,主要是我看那些原因有点看不懂。
- 本文把原节点停用和新节点开启放到了最后,个人感觉这样更安全一些。