多群组部署
相关概念
星形拓扑和并行多组
如下图,星形组网拓扑和并行多组组网拓扑是区块链应用中使用较广泛的两种组网方式。
- 星形拓扑:中心机构节点同时属于多个群组,运行多家机构应用,其他每家机构属于不同群组,运行各自应用;
- 并行多组:区块链中每个节点均属于多个群组,可用于多方不同业务的横向扩展,或者同一业务的纵向扩展。
星形拓扑和并行多组的区别,星星之后一个中心节点同时属于多个机构,向外延伸的节点,各自属于不同群组。
并行多组,是里面的节点均属于多个群组。
下面以构建八节点星形拓扑
和四节点并行多组区块链
为例,详细介绍多群组操作方法。
安装依赖
# Ubuntu
$ sudo apt install -y openssl curl
星形拓扑
本章以构建上图所示的单机、四机构、三群组、八节点的星形组网拓扑为例,介绍多群组使用方法。
星形区块链组网如下:
agencyA
:在127.0.0.1
上有2个节点,同时属于group1、group2、group3
;agencyB
:在127.0.0.1
上有2个节点,属于group1
;agencyC
:在127.0.0.1
上有2个节点,属于group2
;agencyD
:在127.0.0.1
上有2个节点,属于group3
。
搭建星形区块链
build_chain.sh支持任意拓扑多群组区块链构建,可使用该脚本构建星形拓扑区块链节点配置文件夹:
准备依赖
- 创建操作目录
mkdir -p ~/fisco && cd ~/fisco
- 获取build_chain.sh脚本
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.sh
生成星形区块链系统配置文件
cat > ipconf << EOF
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
EOFcat ipconf
空格分隔的参数分别表示如下含义:
# ip:num: 物理机IP以及物理机上的节点数目
# agency_name: 机构名称
# group_list: 节点所属的群组列表,不同群组以逗号分隔
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
使用build_chain脚本构建星形区块链节点配置文件夹
bash build_chain.sh -f ipconf -p 30300,20200,8545
# 生成的节点文件如下
nodes
|-- 127.0.0.1
| |-- fisco-bcos
| |-- node0
| | |-- conf #节点配置目录
| | | |-- ca.crt
| | | |-- group.1.genesis
| | | |-- group.1.ini
| | | |-- group.2.genesis
| | | |-- group.2.ini
| | | |-- group.3.genesis
| | | |-- group.3.ini
| | | |-- node.crt
| | | |-- node.key
| | | `-- node.nodeid # 记录节点Node ID信息
| | |-- config.ini #节点配置文件
| | |-- start.sh #节点启动脚本
| | `-- stop.sh #节点停止脚本
启动节点
bash nodes/127.0.0.1/start_all.sh
查看群组共识状态
# 查看node0 group1是否正常共识(Ctrl+c退回命令行)
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:1.*++"# 查看node0 group2是否正常共识
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:2.*++"
...# ... 查看node1, node2节点每个群组是否正常可参考以上操作方法...# 查看node3 group1是否正常共识
$ tail -f nodes/127.0.0.1/node3/log/*| grep "g:1.*++"
.# 查看node5 group2是否正常共识
$ tail -f nodes/127.0.0.1/node5/log/* | grep "g:2.*++"
配置并启动控制台
也是一样,那脚本,启动,拷贝控台台证书,拷贝控制台文件。
cd ~/fisco# 获取控制台
$ curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 拷贝控制台证书
$ cp nodes/127.0.0.1/sdk/* console/conf/ -r# 获取node0的channel_listen_port
$ grep "channel_listen_port" ~/fisco/nodes/127.0.0.1/node*/config.ini# 拷贝控制台配置
$ cp console/conf/config-example.toml console/conf/config.tomlbash console/start.sh
向群组发交易
switch 2 # 切换群组
deplay HelloWorld 群组1,2都部署一次复制标签
tail -f nodes/127.0.0.1/node0/log/log* | grep g:2.*++
发现块高增加到2
节点加入群组
本章以将node2加入group2为例,介绍如何在已有的群组中,加入新节点。
通过 ls nodes/127.0.0.1/node2/conf/
目前属于 grop 1
1.跟扩容新节点差不多,不就是先获取节点脚本,生成脚本文件,复制节点配置文件,修改配置
2.然后就是复制group 文件,决定能不能再控制台正常加入群组
# 进入节点目录cd ~/fisco/nodes/127.0.0.1# ... 从node0拷贝group2的配置到node2...
cp node0/conf/group.2.* node2/conf# ...重启node2(重启后请确定节点正常共识)...
bash node2/stop.sh && bash node2/start.sh# 获取node2的node id
cat node2/conf/node.nodeid
通过控制台向group2发送命令,将node2加入到group2
cd ~/fiscobash console/start.sh 2 # 直接启动群组2控制台# node2 添加到共识节点列表
getSealerListaddSealer nodeidgetSealerList# 若在group2部署合约,node2日志块高发生变化证明加入群组成功
deploy HelloWorld
tail -f node2/log/* | grep "g:2.*++"
并行多组
并行多组区块链搭建方法与星形拓扑区块链搭建方法类似,以搭建四节点两群组
并行多链系统为例:
- 群组1:包括四个节点,节点IP均为
127.0.0.1
; - 群组2:包括四个节点,节点IP均为
127.0.0.1
。
这样对比,就tm对比一条链4个节点,多了一个群组。
构建单群组四节点区块链
mkdir -p ~/fisco && cd ~/fiscocurl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.shbash build_chain.sh -l 127.0.0.1:4 -o multi_nodes -p 20000,20100,7545 # 这次指定了节点目录# 启动bash multi_nodes/127.0.0.1/start_all.sh# 检查共识情况,(只有群组1)# 另外3个点共识情况自行检查tail -f nodes/127.0.0.1/node0/log/log* | grep ++
将group2加入区块链
并行多组区块链每个群组的genesis
配置文件几乎相同,但[group].id不同,为群组号。
# 进入节点目录
cd ~/fisco/multi_nodes/127.0.0.1# 拷贝group1的配置
cp node0/conf/group.1.genesis node0/conf/group.2.genesis
cp node0/conf/group.1.ini node0/conf/group.2.ini# 修改群组ID
vim node0/conf/group.2.genesis 修改 id=2
cat node0/conf/group.2.genesis | grep id 如过id=2,修改成功# 将配置拷贝到各个节点
cp node0/conf/group.2.genesis node1/conf/group.2.genesis
cp node0/conf/group.2.genesis node2/conf/group.2.genesis
cp node0/conf/group.2.genesis node3/conf/group.2.genesis
cp node0/conf/group.2.ini node1/conf/group.2.ini
cp node0/conf/group.2.ini node2/conf/group.2.ini
cp node0/conf/group.2.ini node3/conf/group.2.ini# 重启各个节点
bash stop_all.sh
bash start_all.sh# 查看共识,发现多了个2群组
tail -f node0/log/log* | grep ++
向群组发交易
配置控制台
cd ~/fiscocurl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 获取channel_port
$ grep "channel_listen_port" multi_nodes/127.0.0.1/node0/config.ini
multi_nodes/127.0.0.1/node0/config.ini: channel_listen_port=20100# 拷贝控制台证书
cp nodes/127.0.0.1/sdk/* console/conf/ -r
# 拷贝控制台配置
cp console/conf/config-example.toml console/conf/config.toml
# 修改控制台连接节点的端口,127.0.0.1:20200,20201
vim console/conf/config.toml
修改为20100,20101
发现控制台连接节点的端口
,是node0的channel_listen_port
。
1.不对不对,假如说,在节点中定义了2个群组。那么群组id是不同的,其余大部分相同。
2.另外,我要在控制台中去连接这个2个群组,他肯定连接你这个链,通过node0的chanal_listen_port,因为我是2个群组,20100自动延伸为 + 1。
通过控制台向群组发交易
# 启动控制台
bash console/start.shswitch 2 # 切换群组
deplay HelloWorld 群组1,2都部署一次复制标签
tail -f multi_nodes/127.0.0.1/node0/log/log* | grep g:2.*++
发现块高增加到2