fisco 之多群组多节点
搭建一个 4 机构 3 群组 8 节点
此篇章是以官方为基础搭建的
前置需求:
| 机构 | 群组 | IP |
|---|---|---|
| 机构 A (2 节点) node0,1 | 群组 1,2,3 | 127.0.0.1 |
| 机构 B (2 节点) node2,3 | 群组 1 | |
| 机构 C (2 节点) node4,5 | 群组 2 | |
| 机构 D (2 节点) node6,7 | 群组 3 |
先将构建 fisco 的脚本下载下来
1 | curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.sh |
创建一个配置文件
1 | vim ipconf |
配置文件内容
1 | 127.0.0.1:2 A 1,2,3 |
文件结构详解
1 | IP:节点数量 机构名称 所在群组 |
使用命令一键创建
1 | bash build_chain.sh -f ipconf -p 30300,20200,8545 |
-f指定一个文件,这个文件编写的内容是创建信息

启动所有节点
1 | bash nodes/127.0.0.1/start_all.sh |
查看节点进程
1 | ps aux | grep fisco-bcos |

查看所有群组的共识
1 | tail -f nodes/127.0.0.1/node0/log/* | grep "g.*++" |
查看单个群组共识
1 | tail -f nodes/127.0.0.1/node0/log/* | grep "g:1.*++" |
g:int将 int 改成所要查询的群组
node0将 node0 也可以改成其他节点,查看其他节点的群组是否正常或者存在

扩容节点
前置要求:
| 节点 | 群组 | IP |
|---|---|---|
| 机构 D (1 节点) | 3 群组 | 127.0.01 |
获取证书的生成脚本
1 | curl -#LO https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master-2.0/tools/gen_node_cert.sh |
下载失败使用这个:curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/gen_node_cert.sh
为新节点生成密钥
1 | bash gen_node_cert.sh -c nodes/cert/D/ -o node8 |
-c指定要在哪个机构下新增节点
-o新的节点名称

拷贝所需要的配置文件 (由于这里是在机构 D 新增的节点所以拷贝节点 6 和节点 7 都可以)
1 | cp nodes/127.0.0.1/node7/config.ini nodes/127.0.0.1/node7/start.sh nodes/127.0.0.1/node7/stop.sh node8/ |
这里是将配置文件启动文件都拷贝了过去
编辑 node8 的配置文件
1 | vim node8/config.ini |
1 | [rpc] |
p2p加入自身的信息
listen_port端口自增一下,我这里拷贝的是 node7 所有自增一下就可以,如果拷贝的 node6 那就需要自增两下
channel_listen_port同上
jsonrpc_listen_port同上
将群组的连接信息和配置文件拷贝进去
1 | cp nodes/127.0.0.1/node7/conf/group.3.genesis nodes/127.0.0.1/node7/conf/group.3.ini node8/ |
先将新节点复制到当前的 nodes 文件下, 然后启动节点
1 | cp -r node8/ nodes/127.0.0.1/ |
查看节点连接
1 | tail -f nodes/127.0.0.1/node8/log/log* | grep "connected count" |

将节点添加到群组中
查看节点 nodeid
1 | cat nodes/127.0.0.1/node8/conf/node.nodeid |

进入控制台 3 群组
1 | bash console/start.sh 3 |

addObserver观察节, 不参与共识,但能实时同步链上数据的节点。
addSealer共识节, 参与共识的节点,拥有群组的所有数据(搭链时默认都生成共识节点)。
这里需要共识所有添加到共识节点内
1 | addSealer 替换成自己节点的nodeid |

新增群组
前置需求
将 node8 节点添加至新增的群组中
获取时间戳
1 | echo $(($(date '+%s')*1000)) |
将时间戳记下来后开启控制台
1 | bash console/start.sh |
查看节点 IP 与 Post 端口号
1 | getAvailableConnections |
获取节点 nodeid
1 | getSealerList |
选择第一个 nodeid
为节点动态创建一个新群组
1 | generateGroup 127.0.0.1:20200 4 1736048077000 8b77bf44e79b207fcefe2d350ee4d9af0f45ef9425a7ce12cc61f6c87effc00c24dbbe5aa874179b9800584906b54b79a0f88ccda9f76c2b91058807a23985cf |
命令详解: generateGroup 获取的 IP 和 Post 端口 新群组 id 时间戳 节点 nodei

启动新群组, 切换新群组
1 | startGroup 127.0.0.1:20200 4 |
将 node8 节点添加到新群组中
1 | cat nodes/127.0.0.1/node8/conf/node.nodeid #获取节点id |

结尾
小作业:
1. 创建四机构三群组 10 节点的区块链,详细要求如下:
| 机构 | 群组 | 节点 |
|---|---|---|
| 机构 A (3 节点) | 1,2,3 | node0,1,2 |
| 机构 B (1 节点) | 1 | node3 |
| 机构 C (4 节点) | 2 | node4,5,6,7 |
| 机构 D (2 节点) | 1,3 | node8,9 |
2. 新增节点 node10,node11,node12 详细要求如下:
| 机构 | 群组 | 节点 |
|---|---|---|
| 机构 A | 3 | node11 |
| 机构 B | 1 | node10,12 |
3. 新增群组 4, 并将 node10,node11,node12 添加至其中

