使用generator搭建多机部署的Fisco链
以下是我们要做的实践
我们将从多机两节点部署开始,机构A和机构B,为机构A节点1做落盘加密
为机构A新增节点3并加入群组1
新增机构C节点4
新增群组2并将机构B和机构C拉入群组2
登录一号机43.137.0.66
在任意位置下
输入命令:
ssh-keygen -t rsa -m PEM
在root目录下的.ssh目录下会生成连接的私钥和公钥
将公钥id_rsa.pub放入到二号机的/root/.ssh目录下的authorized_keys下面
配置好后进行连接检测免密连接是否成功输入命令:
ssh -o StrictHostKeyChecking=no root@[IP]
我这里存放的generator工具是存放路径在/root/g下面,可以自己选择要存放链工具的地址,我接下来的操作都在/root/g目录下进行。
下载工具的源代码
git clone https://gitee.com/FISCO-BCOS/generator.git
进入generator目录进行下载操作
输入命令:
bash scripts/install.sh
查看是否安装成功
在generator目录下输入命令
./generator -h
若成功,输出usage:generator XXX
进入到新建的generator文件目录内
在generator目录下进行以下操作.
输入命令:
/generator --download_fisco ./meta
查看fisco版本:
./meta/fisco-bcos -v
按照效果图,我们需要机构A,机构B,机构C,将其初始化,拷贝出来
在generator目录下进行以下操作.
输入命令:
cp -r generator/ generator-A
这里我多复制了一个D作为备份,为以后需要做更改做准备
一条链只能有一条唯一的链证书ca.crt,我们选择在generator文件夹生成链证书,
在generator目录下进行以下操作.
输入以下命令:
./generator --generate_chain_certificate ./dir_chain_ca
检查dir_chain_ca文件夹是否存在链证书和私钥:
ls dir_chain_ca/
在generator文件夹下生成各个机构的证书,然后复制到各个机构的工作目录中
机构A:
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
机构B:
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB
机构C:
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agency
查看生成目录 :
ls dir_agency_ca/
拷贝生成出来的机构证书,机构私钥,链证书到各自的机构目录下的meta文件中:
使用工具生成机构A的SDK证书
./generator --generate_sdk_certificate ./dir_sdk_caA ./dir_agency_ca/agencyA
使用工具生成机构B的SDK证书
./generator --generate_sdk_certificate ./dir_sdk_caB ./dir_agency_ca/agencyB
使用工具生成机构C的SDK证书
./generator --generate_sdk_certificate ./dir_sdk_caC ./dir_agency_ca/agencyC
修改机构A节点的配置文件
当前操作目录为/root/g/generator-A
vim conf/node_deployment.ini
p2p_ip的地址要设置成自己主机的ip地址
机构 | 节点 | 所属群组 | P2P地址 | RPC监听地址 | Channel监听地址 | ip地址 |
---|---|---|---|---|---|---|
机构A | 节点0 | 群组1 | 30360 | 20260 | 8575 | 10.206.0.13 |
修改机构B节点的配置文件
文件位于generator-B的conf/node_deployment.ini
vim conf/node_deployment.ini
机构 | 节点 | 所属群组 | P2P地址 | RPC监听地址 | Channel监听地址 | ip地址 |
---|---|---|---|---|---|---|
机构B | 节点1 | 群组1 | 30361 | 20261 | 8576 | 10.206.0.14 |
回到generator-A文件目录下:
cd …/generator-A
执行:
./generator --generate_all_certificates ./agencyA_node_info
这条命令会根据我们配置的节点信息生成机构A的节点证书和p2p连接信息文件
检查agencyA_node_info是否存在刚刚生成的证书文件和p2p连接信息:
ls agencyA_node_info
将机构A的peers.txt文件拷贝给机构B并改名为peersA.txt
cp agencyA_node_info/peers.txt …/generator-B/meta/peersA.txt
去到机构B文件夹进行操作:
cd …/generator-B
执行:
./generator --generate_all_certificates ./agencyB_node_info
这条命令会根据我们配置的节点信息生成机构B的节点证书和p2p连接信息文件
由于群组创建需要创世区块,规定此机构必须要节点证书,我们选择在机构A中进行创建,所以机构B除了复制peers.txt文件外,还需要复制机构B的两个节点crt文件给机构A
cp -r agencyB_node_info/peers.txt …/generator-A/meta/peersB.txt
cp -r agencyB_node_info/cert_10.206.0.14_30361.crt …/generator-A/meta/
回到机构A文件夹:cd …/generator-A
修改conf/group_genesis.ini文件
vim conf/group_genesis.ini
结合两个节点证书文件,生成创世区块 :
./generator –create_group_genesis ./group
查看生成创世群组区块和群组配置文件:
ls group
将group.1.genesis文件拷贝到机构B
cp group/group.1.genesis …/generator-B/meta/
使用–build_install_package生成机构A的节点,第一个实参是放群组内其它节点的连接信息,第二个是节点文件的输出目录
./generator --build_install_package ./meta/peersB.txt ./nodeA
回到机构B:
cd …/generator-B
使用–build_install_package生成机构B的节点,第一个实参是放群组内其它节点的连接信息,第二个是节点文件的输出目录
./generator --build_install_package ./meta/peersA.txt ./nodeB
打包机构B并放入到二号机内
打包:
tar cvf B.tar generator-B
在二号机进行解压:
tar xvf B.tar
(我这里是用可视化工具手动传输,放到自己想要放到的文件夹内进行解压操作)我这里的地址是在/root/g
(要加密那个节点就修改那个节点的配置文件,我这里只是做一个示范,后面的操作都是一样的)
我这里使用的centos的系统,如果用别的操作系统请去官网这里查看对应的下载依赖指令
下面的操作我都在/root/g下面进行
下载依赖包:
sudo yum install procps-ng-devel
sudo yum install curl-devel
安装cmake3 :
sudo yum install -y cmake3
拉取工具包并进行构建
git clone https://github.com/FISCO-BCOS/key-manager.git
去到key-manager并创建build文件夹并去到build文件夹内
cd key-manager && mkdir build && cd build
使用cmake3进行构建系统文件
cmake3 …
如果大家这里编译不了,去看错误日志,提示缺少什么配置就下载什么配置
使用make进行编译构建
make
启动key-manager服务:
./key-manager 8150 123xyz
这里还有一个命令就是
nohup ./key-manager 8150 123xyz > nohup.out 2>&1 &
如果使用nohup命令就之间将服务挂载到后台了,就可以关闭当前终端
不要关闭当前的终端,我们在去开一个新的终端,进入到/root/g/key-manager的scripts文件夹中
运行以下命令:
bash gen_data_secure_key.sh 127.0.0.1 8150 mima1
最后面的参数为自己要设定的密码
配置dataKey(ps:配置datakey的节点,必须是新生成的,未启动过的节点)要加密那个节点就修改那个节点的config.ini文件
切换回到generator-A文件中,进入到节点目录下:
cd nodeA/node_10.206.0.13_30360
修改config.ini文件 vim config.ini
找到以下配置,并将前面key-manager生成的datekey填入
切换回key-manager/scripts文件夹,启动脚本对需要加密的节点密钥进行加密
bash encrypt_node_key.sh 127.0.0.1 8150 /root/g/generator-A/nodeA/node_10.206.0.13_30360/conf/node.key 1100966220cc567b44c15e946aef7c08
后面的密钥为前面工具生成的datekey
至此机构A中的节点node_10.206.0.13_30360已经完成了落盘加密
切换到/root/g/generator-A文件夹中,进入到nodeA目录下面 cd nodeA
启动节点:
bash start_all.sh
在二号机内切换到/root/g/generator-B夹中,进入到nodeB目录下面 cd nodeB
启动节点:
bash start_all.sh
检测节点的共识情况,在/root/g/generator-B/nodeB目录下执行以下命令:
tail -f node_10.206.0.14_30361/log/log_2024120314.07.log | grep +++
切换到一号机检测节点共识,在/root/g/generator-A/nodeA目录下执行以下命令:
tail -f node_10.206.0.13_30360/log/log_202412031* | grep +++
至此双机单群组多机构的区块链网络已经搭建成功,并且机构A节点node_10.206.0.13_30360进行了落盘加密
在上面的操作中,机构A生成了属于自己的机构证书和私钥,并且拥有了群组1的创世区块,扩容节点需求进行以下操作
在一号机/root/g目录下
进入到generator-A的目录下,修改conf/node_deployment.ini配置文件
vim conf/node_deployment.ini
机构 | 节点 | 所属群组 | P2P地址 | RPC监听地址 | Channel监听地址 | ip地址 |
---|---|---|---|---|---|---|
机构A | 节点2 | 群组1 | 30362 | 20262 | 8577 | 10.206.0.13 |
使用命令生成节点证书和p2p连接信息文件
./generator --generate_all_certificates ./agencyA_node_info_new
查看生成文件:
ls ./agencyA_node_info_new
合并当前节点的peers.txt文件
因为生成节点的时候要指定节点p2p连接信息peers.txt为群组内其它节点的连接信息,多个机构组网的情况下需要将其合并,所以新增的这个节点要将他们的p2p连接信息都拿到。
cat ./agencyA_node_info/peers.txt >> ./meta/peersB.txt
生成新增节点:
./generator --build_install_package ./meta/peersB.txt ./nodeA_new
查看生成节点配置文件夹:
ls ./nodeA_new
查看新增节点node.nodeid
cat nodeA_new/node_10.206.0.13_30362/conf/node.nodeid
启动新增的节点:
bash nodeA_new/start_all.sh
查看节点进程:
ps -ef | grep fisco
使用控制台将新增节点加入群组1内,这里我使用了手动配置控制台
下载控制台(我这里将控制台放入到了/root/g/generator-A里面):
curl -#LO [https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh](https://github.com/FISCO-BCOS/console/releases/download/v2.9.2/download_console.sh && bash download_console.sh)
下载完成后,要将节点的sdk目录下的ca.crt、sdk.crt和sdk.key文件拷贝到conf目录下,将conf目录下的config-example.toml文件重命名为config.toml文件。
进入console文件夹下:
cd console
前面已经在generator生成了机构的sdk证书,拷贝证书到conf目录下
cp …/…/generator/dir_sdk_caA/sdk/ca.crt conf
cp …/…/generator/dir_sdk_caA/sdk/sdk.* conf
进入到conf目录下:
cd conf
将conf目录下的config-example.toml文件重命名为config.toml文件。
cp -r config-example.toml config.toml
修改config.toml配置文件,由于我们的现阶段在群组1内,所以我们的控制台只需要将机构A节点1的信息填入,就可以访问群组内所有节点信息了。
vim config.toml
启动控制台:
bash start.sh
使用以下命令,将node3节点id添加到群组1共识中来(节点id已经在上面获取了)
addSealer c374318a92da2b8cd478350a471677543d549a69df77b59490766fec029b6e9044332b35b8fedd06802bae2bc90612b01f30e5eeade2b9819dc6c7b709e13973
使用命令查看是否添加共识成功:
getSealerList
退出控制台,查看新增节点是否加入共识
tail -f nodeA_new/node_10.206.0.13_30362/log/log_202412031* | grep +++
至此我们在已有机构内新增节点,并加入到群组的任务已经完成
在这里面,我们将群组2创世区块的操作交给机构C
机构 | 节点 | 所属群组 | P2P地址 | RPC监听地址 | Channel监听地址 | ip地址 |
---|---|---|---|---|---|---|
机构C | 节点3 | 群组2 | 30363 | 20263 | 8578 | 10.206.0.14 |
现在还是在一号机内进行操作
进入到/root/g/generator-C目录,修改conf/node_deployment.int文件
vim conf/node_deployment.ini
生成机构C的节点证书和p2p连接信息文件
./generator --generate_all_certificates ./agencyC_node_info
查看生成文件列表:
ls agencyC_node_info/
将peers.txt拷贝给机构B(注意这里的机构B是在二号机上面的机构B)
PS:我这里进行的拷贝是通过可视化工具直接拖过去的
由于是使用机构C生成创世区块,所以需要机构B的peers.txt和机构B的节点文件(这里因为是只需要配置文件,所以我们在当前一号机内便可以执行拷贝命令)
cp -r …/generator-B/agencyB_node_info/cert_10.206.0.14_30361.crt meta/
cp -r …/generator-B/agencyB_node_info/peers.txt meta/peersB.txt
修改机构C中的conf/group_genesis.ini文件:
vim conf/group_genesis.ini
生成群组2创世区块文件:
./generator --create_group_genesis ./group
将生成出来的创世区块拷贝给机构B的meta中(这里要拷贝至二号机的机构B内)
生成机构C打包传输到二号机并启动
./generator --build_install_package ./meta/peersB.txt ./nodeC
tar cvf C.tar generator-C
我这里是用来可视化工具直接传过去了
在二号机/root/g进行解压:
tar xvf C.tar
进入到加压好的generator-C文件夹下:
cd generator-C
启动节点:
bash nodeC/start_all.sh
还是在二号机内进行操作:
cd …/generator-B
进入机构B使用–add_group 第一个参数选择群组2的创世块,第二个参数选择需要加入群组的节点目录
./generator --add_group ./meta/group.2.genesis ./nodeB
使用–add_peers ,添加机构C节点连接文件peers至已有节点
./generator --add_peers ./meta/peersC.txt ./nodeB
重启机构B的节点
bash nodeB/stop_all.sh
bash nodeB/start_all.sh
查看机构B节点是否在两个群组进行共识
tail -f nodeB/node_10.206.0.14_30361/log/log_202412031* | grep +++
查看机构C节点是否在群组2内共识
回到机构C文件夹中查看:
cd …/generator -C
tail -f nodeC/node_10.206.0.14_30363/log/log_2024120316.43.log | grep +++
至此我们就已经完成了我们所设计的网络拓扑区块链网络结构。