扩容分成生成节点、建立连接和加入群组三件事。先理解共识节点与观察节点的区别,再看 Air 版本的实际操作。
本文由个人备赛旧笔记整理,整理日期为 2026-11-03。命令、输出和测试记录属于当时的实验环境;本文未重新搭建整套环境验证。
阅读前先确认 新节点要与目标链使用匹配的证书和创世配置;加入群组以后,再核对角色与同步情况。命令拼写以对应控制台的 help 为准。
FISCO 扩容 扩容 比赛题目提到 需要根据要求进行扩容
根据官方文档描述,共存在三种节点
共识节点(Leader/Primary 和 Replica):参与共识的节点,拥有群组的所有数据(搭链时默认都生成共识节点)。
观察者节点Observer:不参与共识,但能实时同步链上数据的节点。
游离节点:已启动,待等待加入群组的节点。处在一种暂时的节点状态,不能获取链上的数据
讲指定节点向这三种节点转化的命令:(传入NodeID)
addSealer 改变节点为共识节点
addObserver 改变节点为观察节点
removeNode 改变节点为游离节点
查看节点的命令
getSealer 查看共识节点列表
getObserver 查看观察节点列表
getNodeIDList 查看已连接的所有其他节点的NodeID
扩容步骤
为节点生成证书并启动
将节点加入群组
生成节点的私钥证书
证书生成脚本
生成证书命令
1 2 3 4 bash gen_node_cert.sh -c ../cert/agency -o node4
国密版本命令
1 bash gen_node_cert.sh -c ../cert/agency -o node4 -g ../gmcert/agency/
将节点node0 的配置文件和相关启动关闭脚本复制到node4目录
1 cp node0/config.ini node0/start.sh node0/stop.sh node4/
对于[rpc]模块,修改channel_listen_port=20204和jsonrpc_listen_port=8549;对于[p2p]模块,修改listen_port=30304并在node.中增加自身节点信息;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ vim node4/config.ini [rpc] ;rpc listen ip listen_ip=127.0.0.1 ;channelserver listen port channel_listen_port=20204 ;jsonrpc listen port jsonrpc_listen_port=8549 [p2p] ;p2p listen ip listen_ip=0.0.0.0 ;p2p listen port listen_port=30304 ;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 node.4=127.0.0.1:30304
两个重要文件
group.1.genesis
group.1.ini
拷贝节点1的node0/conf/group.1.genesis(内含群组节点初始列表 )和node0/conf/group.1.ini到node4/conf目录下(无需改动)
1 cp node0/conf/group.1.genesis node0/conf/group.1.ini node4/conf/
然后运行启动脚本即可bash start.sh
接着,将节点加入群组
先获取nodeid
1 cat node4/conf/node.nodeid
启动控制台
两种节点的加入命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [group:1]> getObserverList [] [group:1]> addObserver 94ae60f93ef9a25a93666e0149b7b4cb0e044a61b7dcd1b00096f2bdb17d1c6853fc81a24e037c9d07803fcaf78f768de2ba56a4f729ef91baeadaa55a8ccd6e { "code" :1, "msg" :"Success" } [group:1]> getObserverList [ 94ae60f93ef9a25a93666e0149b7b4cb0e044a61b7dcd1b00096f2bdb17d1c6853fc81a24e037c9d07803fcaf78f768de2ba56a4f729ef91baeadaa55a8ccd6e ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [group:1]> getSealerList [ 6c41f7e138051a13a220cb186e934398e37700295ff355b87f113704996b3e03750100e16653cda18b5f954d3b7b08d068ca4a9d65cec5a40db980b697ffb699, 7404cdf7f34f038aba90059ff25dc5f05f538010c55e98976aea6bc954910f34f15a255869751c8fe564bdb0fa1eee8e2db47eeca0fdd1359beaac6adcd37ede, a7b856e5b59072c809ea963fa45ede72f7d37561affff989fbede6cd61a40137e2146db205434788e61b89a57f08c614cd283e5e915c23714c2fa685237e8bdb, e5ea1e18717418a57f115bf1cea5168250f86e5b77f74dd15d0c4bf3758ca37002059ba2e54131296d1646a62be5faf85e243dac8d33d452acd63e20428b72ed ] [group:1]> addSealer 94ae60f93ef9a25a93666e0149b7b4cb0e044a61b7dcd1b00096f2bdb17d1c6853fc81a24e037c9d07803fcaf78f768de2ba56a4f729ef91baeadaa55a8ccd6e { "code" :1, "msg" :"Success" } [group:1]> getSealerList [ 6c41f7e138051a13a220cb186e934398e37700295ff355b87f113704996b3e03750100e16653cda18b5f954d3b7b08d068ca4a9d65cec5a40db980b697ffb699, 7404cdf7f34f038aba90059ff25dc5f05f538010c55e98976aea6bc954910f34f15a255869751c8fe564bdb0fa1eee8e2db47eeca0fdd1359beaac6adcd37ede, a7b856e5b59072c809ea963fa45ede72f7d37561affff989fbede6cd61a40137e2146db205434788e61b89a57f08c614cd283e5e915c23714c2fa685237e8bdb, e5ea1e18717418a57f115bf1cea5168250f86e5b77f74dd15d0c4bf3758ca37002059ba2e54131296d1646a62be5faf85e243dac8d33d452acd63e20428b72ed, 94ae60f93ef9a25a93666e0149b7b4cb0e044a61b7dcd1b00096f2bdb17d1c6853fc81a24e037c9d07803fcaf78f768de2ba56a4f729ef91baeadaa55a8ccd6e ]
区块链扩容完成
FISCO Air版本区块链扩容 Air版本区块链扩容 由于Air版本区块链和Pro版本区块链的扩容方式存在诸多差异性,我们需要单独掌握Air版本区块链的扩容方式。
整体步骤没有区别
生成节点
将节点加入群组
但生成方式是有区别的,我们需要先准备配置文件,然后使用build_chain.sh建链脚本来生成新的节点。
CA证书和CA私钥 : 用于为新扩容的节点颁发节点证书
节点配置文件config.ini : 可从已有的节点目录中拷贝。
节点创世块配置文件config.genesis : 可从已有的节点目录中拷贝。
节点连接配置nodes.json : 配置所有节点连接的IP和端口信息,可从已有的节点目录中拷贝,并加上新节点的IP和端口。
步骤 首先创建一个目录准备存放配置文件
1 2 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ mkdir config
拷贝证书和私钥的文件夹
1 2 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cp -r nodes/ca config
从被扩容节点node0拷贝节点配置文件config.ini,创世块配置文件config.genesis以及节点连接配置文件nodes.json
1 2 3 4 5 6 7 8 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cp nodes/127.0.0.1/node0/config.ini config/ ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cp nodes/127.0.0.1/node0/config.genesis config/ ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cp nodes/127.0.0.1/node0/nodes.json config/nodes.json.tmp
然后修改一下我们的配置
设置P2P监听端口为30304,RPC监听端口为20204
1 2 3 4 5 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ sed -i 's/listen_port=30300/listen_port=30304/g' config/config.ini ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ sed -i 's/listen_port=20200/listen_port=20204/g' config/config.ini
将新节点连接加入到nodes.json
1 2 3 4 5 6 7 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ sed -e 's/"nodes":\[/"nodes":\["127.0.0.1:30304",/' config/nodes.json.tmp > config/nodes.json ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cat config/nodes.json {"nodes" :["127.0.0.1:30304" ,"127.0.0.1:30300" ,"127.0.0.1:30301" ,"127.0.0.1:30302" ,"127.0.0.1:30303" ]}
现在直接通过建链脚本生成就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ bash build_chain.sh -C expand -c config -d config/ca -o nodes/127.0.0.1/node4 [INFO] Downloading fisco-bcos binary from https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.11.0/fisco-bcos-linux-x86_64.tar.gz ... [INFO] generate_node_scripts ... [INFO] generate_node_scripts success... [INFO] generate_node_cert ... [INFO] Generate nodes/127.0.0.1/node4/conf cert successful! [INFO] generate_node_cert success... [INFO] generate_node_account ... [INFO] generate_node_account success... [INFO] copy configurations ... [INFO] copy configurations success... ============================================================== [INFO] fisco-bcos Path : bin/fisco-bcos [INFO] sdk dir : nodes/127.0.0.1/sdk [INFO] SM Model : false [INFO] output dir : nodes/127.0.0.1/node4 [INFO] All completed. Files in nodes/127.0.0.1/node4
来看一下目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ tree nodes/127.0.0.1/node4 nodes/127.0.0.1/node4 ├── conf │ ├── ca.crt │ ├── cert.cnf │ ├── node.nodeid │ ├── node.pem │ ├── ssl.crt │ ├── ssl.key │ └── ssl.nodeid ├── config.genesis ├── config.ini ├── nodes.json ├── start.sh └── stop.sh 2 directories, 12 files
直接启动节点
1 2 3 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ bash nodes/127.0.0.1/node4/start.sh node4 start successfully pid=43500
nice 启动成功!
下一步加入群组,我们需要使用console控制台 ,命令相同
查看一下节点进程和节点id
1 2 3 4 5 6 7 8 9 10 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ ps aux |grep -v grep |grep fisco-bcos cure 25655 4.2 0.6 1978252 83340 pts/1 Sl 9月10 29:52 /home/cure/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini -g config.genesis cure 25657 4.1 0.6 1974160 80380 pts/1 Sl 9月10 29:44 /home/cure/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini -g config.genesis cure 25659 4.2 0.6 1970064 84496 pts/1 Sl 9月10 30:00 /home/cure/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini -g config.genesis cure 25661 4.1 0.6 1982360 80360 pts/1 Sl 9月10 29:47 /home/cure/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini -g config.genesis cure 43500 2.0 0.4 1801480 57904 pts/1 Sl 10:00 0:02 /home/cure/fisco/nodes/127.0.0.1/node4/../fisco-bcos -c config.ini -g config.genesis ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ cat nodes/127.0.0.1/node4/conf/node.nodeid 3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c593
然后复制id,我们打开控制台
这里有个规定注意!
为了保证新节点加入不影响共识,须先将扩容节点加入为观察节点,当扩容节点同步到最新区块时,再将其加入到共识节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ┌──(cure㉿LAPTOP-CMAM5D0J)-[~/fisco] └─$ bash console/start.sh the error = [libproviders.so: 无法打开共享目标文件: 没有那个文件或目录] ============================================================================================= Welcome to FISCO BCOS console(3.7.0)! Type 'help' or 'h' for help . Type 'quit' or 'q' to quit console. ________ ______ ______ ______ ______ _______ ______ ______ ______ | | \/ \ / \ / \ | \ / \ / \ / \ | $$$$$$$$\$$$$$| $$$$$$| $$$$$$| $$$$$$\ | $$$$$$$| $$$$$$| $$$$$$| $$$$$$\ | $$__ | $$ | $$___ \$| $$ \$| $$ | $$ | $$__ / $| $$ \$| $$ | $| $$___ \$$ | $$ \ | $$ \$$ \| $$ | $$ | $$ | $$ $| $$ | $$ | $$\$$ \ | $$$$$ | $$ _\$$$$$$| $$ __| $$ | $$ | $$$$$$$| $$ __| $$ | $$_ \$$$$$$\ | $$ _| $$_ | \__| $| $$__ / | $$__ / $$ | $$__ / $| $$__ / | $$__ / $| \__| $$ | $$ | $$ \\$$ $$\$$ $$\$$ $$ | $$ $$\$$ $$\$$ $$\$$ $$ \$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ ============================================================================================= [group0]: /apps> addObserver 3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c59 3 { "code" :0, "msg" :"Success" }
这里显示成功了,观察一下确实在里面了
1 2 3 4 [group0]: /apps> getObserverList [ 3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c593 ]
然后我们将其加入共识节点,新节点权重设置为1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [group0]: /apps> addSealer 3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c593 1 { "code" :0, "msg" :"Success" } [group0]: /apps> getSealerList [ Sealer{ nodeID='2ae72c97e19a93ac3cee2951326bc5daba0ac7db0991bb5b8069d18130e638cb4981aa6f6dec246d0374c1d068d74559b7edef3ce259793e369300e638ba3c07' , weight=1 }, Sealer{ nodeID='3e80932ce833e5e186c293c5ff4982650b1236709fa1fd9ff79db79765900e9bf0ba2ab7dc17aee9c7aed74d9a208e2eb2ad1c2e9fe14cc5d07e8eba9a17aae8' , weight=1 }, Sealer{ nodeID='6a249c4013ab54c5d40ee541d00f831ea27cb3d4e7cb56730882f7780613faadacb698c30b2e0869958e12087554f972da05a103fee3ad0acbc6095927bec879' , weight=1 }, Sealer{ nodeID='ce907b6e4a120a22d0247267f00348cf101f9ca4e8a907dd73d342a851e5d1471a7d4ab0849f17633302242e89c6446df876cf3d051011fd3453dac2adcaafd1' , weight=1 }, Sealer{ nodeID='3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c593' , weight=1 } ]
至此,扩容完成,但是我们可以测试更多内容
我们先部署一下官方自带的HelloWorld.sol 合约
1 2 3 4 [group0]: /apps> deploy HelloWorld transaction hash : 0x962a606a59384b7e89621ddf0f4a5363a126c2d40dc81d3b85feb4f9f9711c8b contract address: 0x37a44585bf1e9618fdb4c62c4c96189a07dd4b48 currentAccount: 0xf704de157ffd21966bf07e25edd52d2df01e28fb
可以看到所有节点都到了最新区块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [group0]: /apps> getSyncStatus SyncStatusInfo{ isSyncing='false' , protocolId='null' , genesisHash='acc5052589891054280ea93b94b4868829243c49f251cfedbcca50fd3bb7b91a' , nodeId='2ae72c97e19a93ac3cee2951326bc5daba0ac7db0991bb5b8069d18130e638cb4981aa6f6dec246d0374c1d068d74559b7edef3ce259793e369300e638ba3c07' , blockNumber='5' , latestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' , knownHighestNumber='5' , txPoolSize='null' , peers=[ PeersInfo{ nodeId='3e80932ce833e5e186c293c5ff4982650b1236709fa1fd9ff79db79765900e9bf0ba2ab7dc17aee9c7aed74d9a208e2eb2ad1c2e9fe14cc5d07e8eba9a17aae8' , genesisHash='acc5052589891054280ea93b94b4868829243c49f251cfedbcca50fd3bb7b91a' , blockNumber='5' , latestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' }, PeersInfo{ nodeId='ce907b6e4a120a22d0247267f00348cf101f9ca4e8a907dd73d342a851e5d1471a7d4ab0849f17633302242e89c6446df876cf3d051011fd3453dac2adcaafd1' , genesisHash='acc5052589891054280ea93b94b4868829243c49f251cfedbcca50fd3bb7b91a' , blockNumber='5' , latestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' }, PeersInfo{ nodeId='3f6f33d37d45ba143e4a35005997afe9db420f5f6a3e7682dba52564e0a9203682f68b044a62e947fa2af9936b93d1469a33f044fe69c019cffb781ee9b1c593' , genesisHash='acc5052589891054280ea93b94b4868829243c49f251cfedbcca50fd3bb7b91a' , blockNumber='5' , latestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' }, PeersInfo{ nodeId='6a249c4013ab54c5d40ee541d00f831ea27cb3d4e7cb56730882f7780613faadacb698c30b2e0869958e12087554f972da05a103fee3ad0acbc6095927bec879' , genesisHash='acc5052589891054280ea93b94b4868829243c49f251cfedbcca50fd3bb7b91a' , blockNumber='5' , latestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' } ], knownLatestHash='5e7fe0f40b6f96d5c11192a0783b6ebdb4de758a05455d28965c470a3068b6d4' }
复现时的自查
记录自己实际使用的版本、配置和缺失依赖。
对照本篇关键步骤,保存命令或调用结果,并解释结果代表什么。
对失败或与原记录不一致的情况保留错误信息,不把历史输出当成自己的验证结果。
返回系列导读 · 上一篇 · 下一篇