扩容新节点¶
标签:Pro版区块链网络
扩容节点
BcosProBuilder
提供了在已有群组基础上扩容新节点的功能,本章在搭建Pro版区块链网络的基础上扩容两个新的区块链节点,帮助用户掌握Pro版本FISCO BCOS区块链的节点扩容步骤。
注解
进行节点扩容操作前,请先参考 搭建Pro版区块链网络 部署Pro版本区块链。
1. 部署tarsnode¶
扩容区块链节点服务前,需要在部署扩容的区块链服务节点的机器上安装tarsnode,为了帮助用户能够在单机上快速体验服务扩容流程,本章直接通过桥接网络虚拟化出IP为172.25.0.5
的容器作为安装扩容的区块链服务节点的物理机器。
注解
- 实际生产环境中tarsnode的安装请参考 tars安装部署
- 若已经安装过tarsnode,且tarsnode处于启动的状态,可忽略本步骤
# 进入操作目录
cd ~/fisco/BcosProBuilder
# linux系统: 进入到tarsnode docker-compose所在目录(macos系统可跳过)
cd docker/bridge/linux/node
# macos系统: 进入到tarsnode docker-compose所在目录(linux系统可跳过)
cd docker/bridge/mac/node
# 安装并启动tarsnode
docker-compose up -d
2. 设置区块链节点扩容配置¶
注解
实际操作过程中,须将tars token替换为从tars网页管理平台【admin】->【用户中心】->【token管理】获取可用的token。
区块链节点服务的扩容配置可参考BcosProBuilder
的扩容模板conf/config-node-expand-example.toml
,具体配置步骤如下:
# 进入操作目录
cd ~/fisco/BcosProBuilder
# 拷贝模板配置
cp conf/config-node-expand-example.toml config.toml
# 配置tars token: 可通过tars网页管理平台的【admin】->【用户中心】->【token管理】获取可用的token
# 这里的token为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJhZG1pbiIsImlhdCI6MTYzODQzMTY1NSwiZXhwIjoxNjY3MjAyODU1fQ.430ni50xWPJXgJdckpOTktJB3kAMNwFdl8w_GIP_3Ls
# linux系统(macOS系统跳过本步骤):
sed -i 's/tars_token = ""/tars_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJhZG1pbiIsImlhdCI6MTYzODQzMTY1NSwiZXhwIjoxNjY3MjAyODU1fQ.430ni50xWPJXgJdckpOTktJB3kAMNwFdl8w_GIP_3Ls"/g' config.toml
# macos系统(linux系统跳过本步骤):
sed -i .bkp 's/tars_token = ""/tars_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJhZG1pbiIsImlhdCI6MTYzODQzMTY1NSwiZXhwIjoxNjY3MjAyODU1fQ.430ni50xWPJXgJdckpOTktJB3kAMNwFdl8w_GIP_3Ls"/g' config.toml
扩容配置config.toml
如下:
[tars]
tars_url = "http://127.0.0.1:3000"
# 访问tars服务的token,部署过程中请替换为从tars网页管理平台【admin】->【用户中心】->【token管理】获取可用的token
tars_token ="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJhZG1pbiIsImlhdCI6MTYzODQzMTY1NSwiZXhwIjoxNjY3MjAyODU1fQ.430ni50xWPJXgJdckpOTktJB3kAMNwFdl8w_GIP_3Ls"
tars_pkg_dir = ""
[chain]
# 链ID
chain_id="chain"
[[group.deploy_info]]
# 扩容区块链节点的服务名
node_name = "node2"
# 扩容的区块链节点服务的部署IP
deploy_ip = "172.25.0.5"
# 扩容的区块链节点服务模板
expanded_service = "groupnode00BcosNodeService"
# 扩容的节点数目
node_count=1
[[group.deploy_info]]
node_name = "node3"
deploy_ip = "172.25.0.5"
expanded_service = "groupnode00BcosNodeService"
node_count=1
3. 扩容区块链节点服务¶
# 进入操作目录
cd ~/fisco/BcosProBuilder
# 扩容并部署RPC服务
python3 build_chain.py chain -o expand -t node
执行上述命令后,当脚本输出expand nodes for the given group success
时,则说明区块链节点服务扩容成功,详细日志输出如下:
=========================================================
----------- expand nodes for the given group -----------
* reload node config
* generate ini config, service: groupnode20BcosNodeService, path: generated/chain/group/172.25.0.5/groupnode20BcosNodeService/config.ini.tmp
* generate ini config for service: groupnode20BcosNodeService success
* generate genesis config, service: groupnode20BcosNodeService, path: generated/chain/group/172.25.0.5/groupnode20BcosNodeService/config.genesis.tmp
* generate genesis config for service: groupnode20BcosNodeService success
* reload node config
* generate ini config, service: groupnode30BcosNodeService, path: generated/chain/group/172.25.0.5/groupnode30BcosNodeService/config.ini.tmp
* generate ini config for service: groupnode30BcosNodeService success
* generate genesis config, service: groupnode30BcosNodeService, path: generated/chain/group/172.25.0.5/groupnode30BcosNodeService/config.genesis.tmp
* generate genesis config for service: groupnode30BcosNodeService success
* generate pem file for groupnode20BcosNodeService
- pem_path: generated/chain/group/172.25.0.5/groupnode20BcosNodeService
- node_id_path: generated/node.nodeid
- sm_crypto: 0
* generate pem file for groupnode30BcosNodeService
- pem_path: generated/chain/group/172.25.0.5/groupnode30BcosNodeService
- node_id_path: generated/node.nodeid
- sm_crypto: 0
deploy service groupnode20BcosNodeService
deploy service groupnode20BcosNodeService
upload tar package generated/./groupnode20BcosNodeService.tgz success, config id: 22
deploy service groupnode30BcosNodeService
deploy service groupnode30BcosNodeService
upload tar package generated/./groupnode30BcosNodeService.tgz success, config id: 23
----------- expand nodes for the given group success -----------
=========================================================
扩容过程中生成的RPC服务相关的配置位于generated/${chainID}/${groupID}/${deploy_ip}
目录,具体如下:
$ tree generated/chain/group/172.25.0.5
generated/chain/group/172.25.0.5
├── groupnode20BcosNodeService
│ ├── config.genesis.tmp
│ ├── config.ini.tmp
│ ├── node.nodeid
│ └── node.pem
└── groupnode30BcosNodeService
├── config.genesis.tmp
├── config.ini.tmp
├── node.nodeid
└── node.pem
s
区块链服务扩容成功后,可在tars网页管理平台看到新增的区块链服务groupnode20BcosNodeService
和groupnode30BcosNodeService
:
4. 将新扩容节点加入到群组¶
注解
扩容新节点时,不建议直接将节点加为共识节点,当扩容节点的块高与链上已有节点最高块高一致时候,才可将其加入为共识节点。
步骤1:获取扩容节点的NodeID
新节点扩容成功后,可通过控制台的getGroupPeers
命令查看新增的节点列表:
[group]: /> getGroupPeers
peer0: 0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27
peer1: 23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90
peer2: 4af0433ac2d2afe305b88e7faae8ea4e94b14c63e78ca93c5c836ece6d0fbcb3d2a476a74ae8fb0a11e9662c0ce9861427c314aea7386cb3b619a4cb21ab227a
peer3: 8230e3ad1e7e929044a4ec8a5aca3c16744338a2fdd2865745aab9eef88f5a5c18b0d912a7a047966d112847d5c79eef46b32f7d9a2818adb601049126d289f3
[group]: /> getSealerList
[
Sealer{
nodeID='8230e3ad1e7e929044a4ec8a5aca3c16744338a2fdd2865745aab9eef88f5a5c18b0d912a7a047966d112847d5c79eef46b32f7d9a2818adb601049126d289f3',
weight=1
},
Sealer{
nodeID='4af0433ac2d2afe305b88e7faae8ea4e94b14c63e78ca93c5c836ece6d0fbcb3d2a476a74ae8fb0a11e9662c0ce9861427c314aea7386cb3b619a4cb21ab227a',
weight=1
}
]
[group]: /> getObserverList
[]
从控制台输出可看出,nodeID为0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27
和23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90
的节点不在群组内,使用控制台addObserver
命令将其加入到观察节点如下:
步骤2: 将扩容节点加入为观察节点
[group]: /> addObserver 0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27
{
"code":0,
"msg":"Success"
}
[group]: /> addObserver 23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90
{
"code":0,
"msg":"Success"
}
[group]: /> getObserverList
[
0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27,
23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90
]
步骤3:扩容节点同步到最高块后,将扩容节点加入为共识节点
[group]: /> addSealer 0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27 1
{
"code":0,
"msg":"Success"
}
[group]: /> addSealer 23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90 1
{
"code":0,
"msg":"Success"
}
[group]: /> getSealerList
[
Sealer{
nodeID='8230e3ad1e7e929044a4ec8a5aca3c16744338a2fdd2865745aab9eef88f5a5c18b0d912a7a047966d112847d5c79eef46b32f7d9a2818adb601049126d289f3',
weight=1
},
Sealer{
nodeID='4af0433ac2d2afe305b88e7faae8ea4e94b14c63e78ca93c5c836ece6d0fbcb3d2a476a74ae8fb0a11e9662c0ce9861427c314aea7386cb3b619a4cb21ab227a',
weight=1
},
Sealer{
nodeID='0662759d9ff150b4e004f1e84a84dab15188e04c3772da1a10300302d6677f90dd2a36b75cefe5fcc08310999edf407dda9025332244186430561554f48ebc27',
weight=1
},
Sealer{
nodeID='23d88283fe20c959734c3a3e6f34fb1cb0db9e286ec6e31aa140245ca0bd8aa2a35e288e4d0e10430b8143e06aa46d1b80434a86a8f39980686b43577b415b90',
weight=1
}
]
步骤4:部署和调用合约
[group]: /> deploy HelloWorld
transaction hash: 0x62b2fe3514ca22ea2126b7d6bcab1f2912e03503045b3b806ff2d87d605aca5c
contract address: 0x31eD5233b81c79D5adDDeeF991f531A9BBc2aD01
currentAccount: 0x537149148696c7e6c3449331d77ddfaabc3c7a75
[group]: /> call HelloWorld 0x31eD5233b81c79D5adDDeeF991f531A9BBc2aD01 set "Hello, Fisco"
transaction hash: 0x21a44704b4d2f56108f071a61987e20be7627c2049437cc1a73db9b0e00f55f8
---------------------------------------------------------------------------------------------
transaction status: 0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Receipt message: Success
Return message: Success
Return value size:0
Return types: ()
Return values:()
---------------------------------------------------------------------------------------------
Event logs
Event: {}
[group]: /> call HelloWorld 0x31eD5233b81c79D5adDDeeF991f531A9BBc2aD01 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (string)
Return values:(Hello, Fisco)
---------------------------------------------------------------------------------------------