联盟链PlatONE单链TPS超过2.4万,最高可达20万,并支持超过100个高度优化的BFT共识节点。PlatONE支持企业级应用,下文就将详细介绍如何快速部署PlatONE。

1. PlatONE源码下载及编译

首先用户需要从github下载PlatONE源码并编译

# 获取PlatONE源码
git clone --recursive https://github.com/PlatONEnterprise/PlatONE-Go.git
export WORKSPACE=${PWD}/PlatONE-Go/release/linux

# 编译PlatONE
cd PlatONE-Go; make all; cd ..

编译完成后,会在release目录下生成搭链所需的材料。

如果编译失败,请确保您正确安装了所需的环境,然后重新尝试.

2. 单机部署

2.1. 快速部署(适用于简单测试环境)

本节将介绍如何在同一台机器中快速启动一个节点或启动四个节点的区块链,用于体验测试PlatONE联盟链。

2.1.1. 开启单节点

快速启动单节点区块链:

cd ${WORKSPACE}/scripts/
./platonectl.sh one

通过以上步骤,可以在本机快速搭建一条单节点的区块链,节点数据目录及端口等信息使用如下默认配置:

节点数据: ${WORKSPACE}/data/node-0/
节点运行日志:  ${WORKSPACE}/data/node-0/logs/platone_log/
节点公钥: ${WORKSPACE}/data/node-0/node.pubkey

IP: ${WORKSPACE}/data/node-0/node.ip
RPC端口: ${WORKSPACE}/data/node-0/node.ip (默认6791)
p2p端口: ${WORKSPACE}/data/node-0/node.ip (默认16791)

2.1.2. 开启四节点

在一台机器上快速启动四节点区块链:

cd ${WORKSPACE}/scripts/
./platonectl.sh four

通过以上步骤,可以在本机快速搭建一条包含4节点的区块链,节点数据目录及端口等信息使用如下默认配置:

节点数据: ${WORKSPACE}/data/node-i (i为0~3的整数,分别表示四个节点)
节点运行日志:  ${WORKSPACE}/data/node-i/logs/platone_log/
节点公钥: ${WORKSPACE}/data/node-i/node.pubkey

RPC端口: 6791, 6792, 6793, 6794
p2p端口: 16791, 16792, 16793, 16794

2.2. 生产部署

2.2.1. 准备工作

清理临时链数据,以部署新的区块链

cd ${WORKSPACE}/scripts/
./platonectl.sh clear -a

2.2.2. 创建genesis.json

当您启动区块链时,首先需要创建一个genesis.json文件,节点才能够根据该文件生成创世区块。

cd ${WORKSPACE}/scripts
./platonectl.sh setupgen -n 0 --ip 172.25.1.13 --p2p_port 16791 --interpreter all --auto true

上面的命令,首先会在${WORKSPACE}/data/node-0目录下,生成节点的公私钥、IP端口等信息。

$ ls  ${WORKSPACE}/data/node-0
node.address node.ip node.p2p_port node.prikey node.pubkey

然后在${WORKSPACE}/conf目录下生成一个genesis.json文件

$ ls  ${WORKSPACE}/conf
genesis.json contracts ...

各个参数的意义如下所示:

--nodeid, -n      node id (default: 0)
--ip              node ip (default: 127.0.0.1)
--p2p_port        node p2p_port (default: 16791)
--interpreter, -i evm, wasm or all (default: wasm)

2.2.3. 初始化节点

cd ${WORKSPACE}/scripts/
./platonectl.sh init -n 0 --ip 172.25.1.13 --rpc_port 6791 --p2p_port 16791 --ws_port 26791 --auto "true"

本步骤会根据genesis.json文件,在数据目录下产生创世区块,并配置节点的RPC和websocket端口信息。

各个参数的意义如下所示:

--nodeid, -n      node id (default: 0)
--ip              node ip (default: 127.0.0.1)
--p2p_port        node p2p_port (default: 16791)
--rpc_port        node rpc_port (default: 6791)
--ws_port         node websoket port (default: 26791)

2.2.4. 启动节点

默认启动命令:

cd ${WORKSPACE}/scripts/
./platonectl.sh start -n 0

节点启动后,可以通过节点运行日志跟踪节点的运行状态。

节点数据: ${WORKSPACE}/data/node-0/
节点运行日志:  ${WORKSPACE}/data/node-0/logs/platone_log/

在启动节点时, 可以指定日志文件夹的路径, 指定platone启动时额外的命令行参数等. (注意: 路径连接符'/' 需要进行转义, 参数option的值, 必须加上引号)

  • 日志位置:生产环境需要指定日志存放路径
  • --logdir, -d log dir (default: ../data/node_dir/logs/)
  • 日志等级:通过-e 指定了额外参数,通过-e '--verbosity 2'可以用来指定日志等级为2。
  • 通过--bootnodes指定区块链入口节点,节点启动时会主动连接指定为bootnodes的节点,以接入区块链网络。

如下命令指定了log日志目录、日志级别以及启动时要连接的节点:

./platonectl.sh start -n x -d "\/opt\/logs"  -e "--verbosity 3 --debug --bootnodes enode://8ab91d36a58e03c7d5528ea9186474cf5bfbec46d24cd59cf5eef1b63b2f4120334ca2a6af9ae495fa1931cdfe684caa74c86ad77fcfa0f044f4da30f7a83a4e@172.25.1.13:16791"

日志文件夹中包含wasm执行的日志与platone运行的日志. 随时间推移, 日志文件会越积越多, 建议进行挂载, 或者进行定期删除等操作。

2.2.5. 创建管理员账号并部署系统合约

./platonectl.sh deploysys -n 0

本步骤会首先在节点侧创建一个账号,需要手动输入密码,该账号即为链的超级管理员。然后,使用该账号向链部署系统合约。

如果创建账号时,跳过手动输入密码的过程,可以加上--auto true,这样就可以使用默认密码0创建账号。

至此,一个单节点的PlatONE联盟链搭建完毕。

2.2.6. 连接到console

您可以打开一个交互式JavaScript环境,与链交互 :

./platonectl.sh console -n 0

2.2.7. 获取所有节点

您可以从系统合约中获取所有节点信息

./platonectl.sh get

2.2.8. 查看节点信息

以下命令可用于获取节点状态和信息:

./platonectl.sh status -n 0

console:

disable -> node_id:  0
          node info:
                  node.address: f92f1c1469d1a8c38964c63d62d3167842ce70cd
                  node.ip: 127.0.0.1
                  node.rpc_port: 6791
                  node.p2p_port: 16791
                  node.ws_port: 26791
                  node.pubkey: 9afcb45d2725059a5a6a7f379d6404b6c914b02dd3e7a33d29c87b3f28f8f63b78ffe2736a3cb52ae45bbf57471d438eac71ddcc0bdfbaa56d65e59d457159b2

2.2.9. 停止和清除

您可以停止节点并清除节点数据:

# 停止节点
./platonectl.sh stop -n 0
# 停止运行节点,并清除数据
./platonectl.sh clear -n 0

它还可以简化如下:(清除包括暂停功能):

./platonectl.sh clear -n 0

3. 多机部署(适用于生产环境/多机测试环境)

案例: A, B, C, D四台主机 (各个主机自动时间同步)

  • A: 172.25.1.13
  • B: 172.25.1.14
  • C: 172.25.1.15
  • D: 172.25.1.16

3.1. 准备工作

首先在主机A上,下载源码并编译,参照第1部分。

然后将编译好的PlatONE-Go/release目录,分发到B、C、D主机。

scp -r PlatONE-Go/release user@172.25.1.14:~/
scp -r PlatONE-Go/release user@172.25.1.15:~/
scp -r PlatONE-Go/release user@172.25.1.16:~/

3.2. 在A主机搭建单节点区块链

参照2.2.1~2.2.5小节,在节点A上搭建单节点区块链,然后将genesis.json文件广播出来给其他节点,放置于PlatONE-Go/release/linux/conf目录下。

scp -r genesis.json user@172.25.1.14:~/PlatONE-Go/release/linux/conf
scp -r genesis.json user@172.25.1.15:~/PlatONE-Go/release/linux/conf
scp -r genesis.json user@172.25.1.16:~/PlatONE-Go/release/linux/conf

3.3. 在B、C、D生成创世区块及节点信息

以B为例:

cd  ~/PlatONE-Go/release/linux/scripts
./platonectl.sh init -n 1 --ip 172.25.1.14 --rpc_port 6791 --p2p_port 16791 --ws_port 26791 --auto true

此步骤会根据genesis.json文件生成创世区块,以及节点的连接信息(IP端口、节点密钥)

将节点信息发送至A节点管理员,以便于管理员将新节点加入区块链网络。

节点信息包括节点IP、节点p2p端口、RPC端口和节点公钥,需要将如下四个文件发送至A主机的相应目录。(若A主机不存在data/node-1目录,则创建该目录,以存放节点信息)

# node.ip, node.p2p_port, node.rpc_port, node.pubkey 
# --> user@172.25.1.14:~/PlatONE-Go/release/linux/data/node-1
scp node.ip user@172.25.1.14:~/PlatONE-Go/release/linux/data/node-1
scp node.p2p_port user@172.25.1.14:~/PlatONE-Go/release/linux/data/node-1
scp node.rpc_port user@172.25.1.14:~/PlatONE-Go/release/linux/data/node-1
scp node.pubkey user@172.25.1.14:~/PlatONE-Go/release/linux/data/node-1

3.4. A主机管理员添加B、C、D节点至系统合约

以添加B节点为例:

此时A主机的data/node-1目录已经有了B节点的信息(IP、p2p端口、rpc端口和公钥)

将B主机上的节点加入到当前区块链

./platonectl.sh addnode -n 1

本步骤会在系统合约中写入了B节点信息,B节点成为观察者节点(可以同步交易及数据,但是不参与共识出块)

3.5. B、C、D主机启动节点

以B节点为例

./platonectl.sh start -n 1

B节点启动后会主动连接A节点,加入网络,成为观察者节点。

3.6. 将B、C、D升级为共识节点

根据业务需求,可以将观察者节点升级为共识节点。

以添加B节点为例,由A节点的管理员操作如下命令,即可将B节点升级为共识节点:

./platonectl.sh updatesys -n 1

4. 4 备份

该功能支持节点未启动,以及chaindb中数据损坏的场景下,通过线下传递区块数据的方式,将某节点落后的区块数据补齐

4.1. export

通过export功能,将某节点指定范围内的经过RLP编码后的区块数据导出到某个文件中

./platone --datadir <待导出节点的chaindata路径> export <输出文件名> <导出区块高度下界> <导出区块高度上界>

4.2. import

通过import功能,将导出的区块数据导入指定节点

./platone --datadir <待导入节点的chaindata路径> import <区块文件名>

5. 生产日志清理策略参考

我们模拟了正常交易压力下的日志量:单节点上,24小时产出约为300M大小的日志。

  • 假设在500G数据盘的规划下,按照70%的阈值保留,去除链DB数据(建议保留至少100GB),那么可以保留约27个月的数据。

  • 但由于交易峰值出现的可能性,建议同时实施空间大小阈值的清理策略,即当日志总量达到500GB*70%-100GB =250GB 时,实施对最早的一个月数据的清理。

总结:

时间维度和空间维度的日志清理策略同时实施。

6. 运行状态检查&错误排查

在将链交付给业务前,我们可以从以下维度验证链的运行正确性,包括但不限于以下步骤:

  1. 链运行状态检查:

链运行日志,观察是否正常出块。(正常出块间隔在1~3秒之间)

  1. 系统合约部署情况检查:

  2. 系统合约的部署日志在 wasm_log文件夹中,可以监控日志中是否出现了 error 关键词,排查合约是否正常部署。

  3. 通过./platonectl.sh get 命令,确认所有节点已经被记录到了节点管理合约。

  4. 监控链运行过程的error或者warning关键词。

(部分和节点瞬时联通性相关的,如节点互ping心跳包导致的报错信息可忽略。)

05-12 14:04