环境准备

安装虚拟机

通过VMWorkStation 安装四台CentOS7主机,IP地址分别是:

1
2
3
4
192.168.232.128
192.168.232.129
192.168.232.130
192.168.232.131

记住每个主机的管理员用户和密码。

将虚拟机的IP设置为固定IP

首先,查找虚拟机的默认网关。在
image.png

然后在找到VMnet8的Nat设置
image.png

image.png
这里的192.168.201.2就是默认网关。
接下来,在Windows中查找VMWare的虚拟网卡,VMnet8那个。
image.png

接下来,点击【属性】
image.png
找到IPv4,再设置【属性】,填写网关和网址如下,注意:这里的网关就是前面找到的那个192.168.201.2,网址可以自己设置
image.png

最后,设置CentOS 的固定IP

1
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33 

补充静态IP地址信息

1
2
3
4
5
IPV6_PRIVACY=no
IPADDR0=192.168.201.129
GATEWAY0=192.168.201.2
DNS1=8.8.8.8
DNS2=8.8.4.4

检查端口是否被占用

确保每台机器的 30300202008545 端口没有被占用。使用下面的命令查找端口是否被占用

1
ss -tuln | egrep '30300|20200|8545'

如果输出为空,那么说明端口没有被占用。

检查端口是否有网络访问权限

确保每台机器开通了 3030020200 和 22 端口的网络访问权限。

  1. 首先检查防火墙是否开启
1
sudo systemctl status firewalld
  1. 如果没有开启,通过下面的命令开启防火墙
1
2
sudo systemctl start firewalld
sudo systemctl enable firewalld
  1. 然后将上述三个端口开放
1
2
3
4
5
6
7
8
# 开放 22 端口(SSH默认端口)
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent

# 开放 20200 端口
sudo firewall-cmd --zone=public --add-port=20200/tcp --permanent

# 开放 30300 端口
sudo firewall-cmd --zone=public --add-port=30300/tcp --permanent

联盟链的搭建

生成区块链节点配置

我们在第一台主机(192.168.232.128)上,创建操作路径,下载开发部署工具build_chain,执行下面的命令:

1
2
3
4
5
# 创建操作路径~/fisco
mkdir -p ~/fisco && cd ~/fisco

# 下载开发部署工具build_chain
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.sh

然后生成网络配置文件,执行下面的命令

1
2
3
4
5
6
7
8
# 这里所有区块链节点均属于agencyA,并仅启动了群组1
# (注: 下面的ip信息需要根据真实的机器IP填写)
cat >> ipconf << EOF
192.168.201.129 agencyA 1
192.168.201.130 agencyA 1
192.168.201.131 agencyA 1
192.168.201.132 agencyA 1
EOF

然后通过上面的build_chain脚本命令生成区块链节点配置

1
bash build_chain.sh -f ipconf -p 30300,20200,8545

命令执行后,会从github上下载节点文件。命令执行成功会输出All completed。如果执行出错,请检查nodes/build.log文件中的错误信息。

成功执行命令后,会输出类似下面这样的信息:

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
[INFO] Downloading fisco-bcos binary from https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.1/fisco-bcos.tar.gz ...
######################################################################## 100.0%
==============================================================
Generating CA key...
==============================================================
Generating keys and certificates ...
Processing IP=192.168.232.128 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.129 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.130 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.131 Total=1 Agency=agencyA Groups=1
==============================================================
Generating configuration files ...
Processing IP=192.168.232.128 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.129 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.130 Total=1 Agency=agencyA Groups=1
Processing IP=192.168.232.131 Total=1 Agency=agencyA Groups=1
==============================================================
Group:1 has 4 nodes
==============================================================
[INFO] IP List File : ipconf
[INFO] Start Port : 30300 20200 8545
[INFO] Server IP : 192.168.232.128 192.168.232.129 192.168.232.130 192.168.232.131
[INFO] Output Dir : /home/eric/fisco/nodes
[INFO] CA Path : /home/eric/fisco/nodes/cert/
[INFO] RSA channel : true
==============================================================
[INFO] Execute the download_console.sh script in directory named by IP to get FISCO-BCOS console.
e.g. bash /home/eric/fisco/nodes/192.168.232.128/download_console.sh -f
==============================================================
[INFO] All completed. Files in /home/eric/fisco/nodes

我们可以看到在fisco目录下生成了nodes文件夹,并在其中有4个以ip地址命名的文件夹。可以安装tree命令查看。

先更新一下CentOS的源。
备份原来的源文件

1
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

下载阿里云的镜像源配置文件

1
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  • 清理旧缓存并生成新缓存:
1
2
sudo yum clean all
sudo yum makecache

然后安装tree命令

1
2
sudo yum install -y tree

通过tree命令查看nodes文件夹结构

1
tree nodes/192.168.232.128

输出结果如下

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
nodes/192.168.232.128
├── download_bin.sh
├── download_console.sh
├── fisco-bcos
├── node0
│   ├── conf
│   │   ├── ca.crt
│   │   ├── channel_cert
│   │   │   ├── ca.crt
│   │   │   ├── cert.cnf
│   │   │   ├── node.crt
│   │   │   └── node.key
│   │   ├── group.1.genesis
│   │   ├── group.1.ini
│   │   ├── node.crt
│   │   ├── node.key
│   │   └── node.nodeid
│   ├── config.ini
│   ├── scripts
│   │   ├── load_new_groups.sh
│   │   ├── monitor.sh
│   │   ├── reload_sdk_allowlist.sh
│   │   └── reload_whitelist.sh
│   ├── start.sh
│   └── stop.sh
├── sdk
│   ├── ca.crt
│   ├── cert.cnf
│   ├── sdk.crt
│   └── sdk.key
├── start_all.sh
└── stop_all.sh

可以看到,其中包括了node0和sdk文件夹,以及启动节点和停止节点的命令。
至此,成功生成了多机4节点配置,每台机器的区块链节点配置均位于nodes文件夹下,如下:

1
ls nodes/

结果如下

1
192.168.232.128  192.168.232.129  192.168.232.130  192.168.232.131  cert  cert.cnf

拷贝区块链节点配置

首先为每个节点创建一个fisco用户,并赋予其超级用户权限
切换到超级用户

1
su

添加fisco用户

1
useradd fisco

设置密码

1
passwd fisco

将fisco用户加入到超级用户组wheel中

1
usermod -aG wheel fisco

生成区块链节点配置后,需要将每个节点配置拷贝到对应机器上,可通过scp命令执行拷贝,具体如下:
注意,下面的命令在192.168.201.129这个主机上执行,因为我们之前初始化下载的节点是在这里。

1
2
3
4
5
6
# 为每台机器创建操作目录~/fisco
# (注: 这里使用fisco用户进行操作; 实际操作时,可使用自己的账户进行类似操作, IP也需要替换成自己的机器IP)
ssh fisco@192.168.201.129 "mkdir -p ~/fisco"
ssh fisco@192.168.201.130 "mkdir -p ~/fisco"
ssh fisco@192.168.201.131 "mkdir -p ~/fisco"
ssh fisco@192.168.201.132 "mkdir -p ~/fisco"

执行上面的命令后,是通过fisco账户连接到主机上,然后在其用户主目录~目录下创建了fisco文件夹。

现在切换到第一次下载并创建了nodes命令的主机上,在这里是192.168.201.129 下 (/root/fisco)

1
cd fisco

确保目录下有刚才生成的nodes目录

1
build_chain.sh  ipconf  nodes

然后通过scp命令,将nodes下节点配置文件到不同的主机上

1
2
3
4
5
6
7
8
9
# 拷贝节点配置
# 拷贝节点配置到192.168.201.129的~/fisco路径
scp -r nodes/192.168.201.129/ fisco@192.168.201.129:~/fisco/192.168.201.129
# 拷贝节点配置到196.168.0.2的~/fisco路径
scp -r nodes/192.168.201.130/ fisco@192.168.201.130:~/fisco/192.168.201.130
# 拷贝节点配置到196.168.0.3的~/fisco路径
scp -r nodes/192.168.201.131/ fisco@192.168.201.131:~/fisco/192.168.201.131
# 拷贝节点配置到196.168.0.4的~/fisco路径
scp -r nodes/192.168.201.132/ fisco@192.168.201.132:~/fisco/192.168.201.132

启动各主机上的节点

区块链节点配置拷贝成功后,需要启动所有节点,可通过某台机器发起ssh操作远程启动区块链节点,也可登录上所有物理机后,在对应的物理机上启动区块链节点。

1
2
3
# (注: 这里使用fisco用户进行操作; 实际操作时,可使用自己的账户进行类似操作, IP也需要替换成自己的机器IP)
# 启动192.168.201.129机器上部署的区块链节点
$ ssh fisco@192.168.201.129 "bash ~/fisco/192.168.201.129/start_all.sh"
1
$ ssh fisco@192.168.201.130 "bash ~/fisco/192.168.201.130/start_all.sh"
1
$ ssh fisco@192.168.201.131 "bash ~/fisco/192.168.201.131/start_all.sh"
1
$ ssh fisco@192.168.201.132 "bash ~/fisco/192.168.201.132/start_all.sh"

检查主机上的节点运行状态

登录任何一台主机,使用fisco账户,然后输入下面的命令

1
tail -f ~/fisco/*/node0/log/* |grep -i connected

正常情况下应该不停的输出下面的内容

1
2
3
4
5
6
info|2025-10-15 23:38:03.477351|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=3
info|2025-10-15 23:38:13.485545|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=3
info|2025-10-15 23:38:23.498435|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=3
info|2025-10-15 23:38:33.501871|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=3
info|2025-10-15 23:38:43.503722|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=3

检查共识是否整

登录任何一台主机,使用fisco账户,然后输入下面的命令

1
tail -f ~/fisco/*/node0/log/* |grep -i +++

正常情况下应该不停的输出下面的内容

1
2
info|2025-10-15 23:40:36.186639|PBFTSeal-1-0x00007fc9c4c75700|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=11dd8692...

至此,基于4个主机的fisco bcos网络就搭建完毕了。

群组中新增节点

本节以为上一小节生成的群组1新增一个共识节点为例操作。

为新节点生成私钥证书

接下来的操作,都在上一节生成的nodes/192.168.201.129目录下进行

获取生成节点证书的工具

1
 curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/gen_node_cert.sh

生成新的节点证书

1
2
3
# -c指定机构证书及私钥所在路径
# -o输出到指定文件夹,其中newNode/conf中会存在机构agencyA新签发的证书和私钥
bash gen_node_cert.sh -c ../cert/agencyA -o newNode

这里的agencyA是我们开始创建网络是指定的机构名称,它位于cert/agencyA目录。
newNode是新的节点名称,可以根据自己的需要修改。
执行完上面的命令后,会生成一个新的newNode文件夹
image.png

查看这个文件夹下的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost 192.168.201.129]# tree newNode/
newNode/
└── conf
├── agency.crt
├── ca.crt
├── channel_cert
│   ├── ca.crt
│   ├── node.crt
│   └── node.key
├── node.crt
├── node.key
├── node.nodeid
├── node.param
├── node.private
└── node.pubkey

2 directories, 11 files

准备配置文件

拷贝群组1中节点node0配置文件与工具脚本

1
2
3
4
5
cp node0/config.ini newNode/config.ini
cp node0/conf/group.1.genesis newNode/conf/group.1.genesis
cp node0/conf/group.1.ini newNode/conf/group.1.ini
cp node0/*.sh newNode/
cp -r node0/scripts newNode/

更新newNode/config.ini中监听的IP和端口,对于[rpc]模块,修改listen_ipchannel_listen_portjsonrpc_listen_port;对于[p2p]模块,修改listen_port

将新节点的P2P配置中的IP和Port加入原有节点的config.ini中的[p2p]字段。假设新节点IP:Port为192.168.201.128:30304则,修改后的[P2P]配置为

image.png

[!warning]
注意这里要修改
channel_listen_port=20201 (原来node0节点的端口是20200,这里新增的需要不一样)
jsonrpc_listen_port=8546(原来node0节点的端口是8545,这里新增的需要不一样)
listen_port=30304(原来已有的4个节点分别是30300 30301 30302 30303,新增这个要不一样
node.4=192.168.201.129:30304(这里把新增的节点加上)

然后通过下面的命令将newNode复制到到fisco账户下的节点中

1
scp -r newNode/  fisco@192.168.201.129:~/fisco/192.168.201.129/newNode 

启动节点

切换到fisco账户并启动新的节点

启动新节点,执行newNode/start.sh

检查节点连接装

再次运行下面的命令检查节点装

1
tail -f ~/fisco/*/node0/log/* |grep -i connected

可以发现新的节点已经加入了

1
2
3
info|2025-10-16 00:48:06.668461|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=4
info|2025-10-16 00:48:16.680214|io_service-0x00007fc9e64b8700|[P2P][Service] heartBeat,connected count=4

将节点加入到群组

通过下面的命令找到新增节点的节点id

1
cat ~/fisco/192.168.201.129/newNode/conf/node.nodeid 

输出结果如下

1
97139b1883595c4019ce4e9a5a84781941a9e8abd96bd7619e9325a7aa66128ca21d367e44b305defa79303756c218eb346cb5b018dfed2e104a5674cc2ac090

启动fisco bcos控制台

1
bash ~/fisco/console/start.sh

首先公共addObserver 将节点加入为一个观察节点

1
2
[group:1]> addObserver 97139b1883595c4019ce4e9a5a84781941a9e8abd96bd7619e9325a7aa66128ca21d367e44b305defa79303756c218eb346cb5b018dfed2e104a5674cc2ac090

然后通过addSealer将其加入为共识节点

1
2
3
[group:1]> addSealer 97139b1883595c4019ce4e9a5a84781941a9e8abd96bd7619e9325a7aa66128ca21d367e44b305defa79303756c218eb
346cb5b018dfed2e104a5674cc2ac090