FiscoBcos区块链跨机扩容新节点

背景:我在我的机器上已经搭建了一条单机组4节点的链,现在想要在我teammate的机器上扩容两个节点以期增强这条区块链的健壮性。查看FiscoBcos官方文档提供了扩容一个新节点的方法,但是只是在当前机器上扩容。详细查看文档并经过实践,发现只要修改新增节点的配置文件,然后将该新增节点文件发送给另一台机器运行即可。以下是跨机扩容的具体方法:

跨机扩容的具体方法

我的机器上已有node0、1、2、3,现要新增node4于另一台机器

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(备用链接)
  • 运行脚本
    bash gen_node_cert.sh -c ../cert/agency -o node4
    输出 All completed 则生成成功

2. 准备节点配置文件

  • 拷贝node0/config.ini、node0/start.sh和node0/stop.sh到node4目录
    cp node0/config.ini node0/start.sh node0/stop.sh node4/

  • 拷贝node0/conf/group.1.genesis(内含群组节点初始列表)和node0/conf/group.1.ini到node4/conf目录
    cp node0/conf/group.1.genesis node0/conf/group.1.ini node4/conf/

  • 修改node4/config.ini的[rpc]和[p2p]模块

    原:

    [rpc] channel_listen_ip=0.0.0.0 channel_listen_port=20200 jsonrpc_listen_ip=127.0.0.1 jsonrpc_listen_port=8888 disable_dynamic_group=false [p2p] listen_ip=0.0.0.0 listen_port=30300 ; nodes to connect node.0=127.0.0.1:30300 node.1=127.0.0.1:30301 node.2=127.0.0.1:30302 node.3=127.0.0.1:30303
    修改后:

    [rpc] channel_listen_ip=0.0.0.0 channel_listen_port=20204 jsonrpc_listen_ip=127.0.0.1 jsonrpc_listen_port=8892 disable_dynamic_group=false [p2p] listen_ip=0.0.0.0 listen_port=30304 ; nodes to connect node.0=10.21.23.14:30300 node.1=10.21.23.14:30301 node.2=10.21.23.14:30302 node.3=10.21.23.14:30303 node.4=127.0.0.1:30304
    port的修改是为了避免与其他node端口占用,理论上port为任意空闲的端口都可,但一般约定俗成在上一个节点的值+1,如node0的channel_listen_port=20200,则node1的channel_listen_port=20201。
    重点在于p2p的修改,这也是与官方文档的差别之处:除了新增node4的ip:port,还应将node0、1、2、3的127.0.0.1改为机器ip(如此处我机器的ip为10.21.23.14),这样在另一台机器运行node4时才可以与node0、1、2、3通信。
    其他修改视具体情况而定。

  • 打开本机30300-30303端口防火墙,允许外部访问,这样node4运行时才可连接到node0、1、2、3
    firewall-cmd --zone=public --add-port=30300/tcp --permanent 设置防火墙开放30300端口 firewall-cmd --zone=public --add-port=30301/tcp --permanent 设置防火墙开放30301端口 firewall-cmd --zone=public --add-port=30302/tcp --permanent 设置防火墙开放30302端口 firewall-cmd --zone=public --add-port=30303/tcp --permanent 设置防火墙开放30303端口 firewall-cmd --reload && firewall-cmd --list-port 重载防火墙&&查看防火墙开放的端口

3. 在另一机器运行node4

  • 将以上node4整个文件夹发送到另一机器然后运行。
    bash node4/start.sh
    注意node4应与fisco-bcos同级,否则节点会无法运行,如:
    Exceed waiting time. please try again to start node4config file path : config.ini[2023-02-05 09:27:49] Initializing...FISCO-BCOS Version : 2.9.120220922 08:57:35 Build TimeBuild Type Linux/g++/ReleaseHEAD Git Branch Git Commit Hash83a87ad749475c0edcc6d5ce2dabd328a36d3bae[2023-02-05 09:27:49] The FISCO-BCOS is running...[2023-02-05 09:28:20] FISCO-BCOS program exit normally nohup: 无法运行命令'/home/topview/node4/../fisco-bcos':No such file or directory

  • 运行成功后可查看node4的节点连接数
    tail -f node4/log/log* | grep "connected count"
    会有如下信息,意为node4与4个节点连接保持心跳,不难知道4个节点为node0、1、2、3:
    [P2P][Service] heartBeat,connected count=4

4.将node4加入群组(原有群组group1)

  • 获取node4的nodeid
    cat node4/conf/node.nodeid

  • 使用控制台作为共识节点加入(若以其他节点可查阅文档)
    bash console.sh 1 add addSealer nodeid

    返回success。