前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >fiscoBcos运维工具多机搭链

fiscoBcos运维工具多机搭链

作者头像
终有链响
发布2025-01-15 08:19:57
发布2025-01-15 08:19:57
990
举报
文章被收录于专栏:终有链响终有链响

多机搭链

使用generator搭建多机部署的Fisco链

以下是我们要做的实践

我们将从多机两节点部署开始,机构A和机构B,为机构A节点1做落盘加密

为机构A新增节点3并加入群组1

新增机构C节点4

新增群组2并将机构B和机构C拉入群组2

img
img

1首先我们要准备两台虚拟机

img
img
image-20241226171938438
image-20241226171938438

2为这两台机建立ssh免密连接

登录一号机43.137.0.66

在任意位置下

输入命令:

ssh-keygen -t rsa -m PEM

在root目录下的.ssh目录下会生成连接的私钥和公钥

img
img

将公钥id_rsa.pub放入到二号机的/root/.ssh目录下的authorized_keys下面

image-20241226172022680
image-20241226172022680
img
img

配置好后进行连接检测免密连接是否成功输入命令:

ssh -o StrictHostKeyChecking=no root@[IP]

img
img

3下载并安装企业级部署generator工具

我这里存放的generator工具是存放路径在/root/g下面,可以自己选择要存放链工具的地址,我接下来的操作都在/root/g目录下进行。

下载工具的源代码

git clone https://gitee.com/FISCO-BCOS/generator.git

image-20241226172213811
image-20241226172213811

进入generator目录进行下载操作

输入命令:

bash scripts/install.sh

img
img
img
img

查看是否安装成功

在generator目录下输入命令

./generator -h

若成功,输出usage:generator XXX

img
img

4获取节点二进制,拉取最新的fisco-bcos二进制文件到meta中

进入到新建的generator文件目录内

在generator目录下进行以下操作.

输入命令:

/generator --download_fisco ./meta

img
img

查看fisco版本:

./meta/fisco-bcos -v

img
img

5机构初始化

按照效果图,我们需要机构A,机构B,机构C,将其初始化,拷贝出来

在generator目录下进行以下操作.

输入命令:

cp -r generator/ generator-A

这里我多复制了一个D作为备份,为以后需要做更改做准备

img
img

6链证书初始化

一条链只能有一条唯一的链证书ca.crt,我们选择在generator文件夹生成链证书,

在generator目录下进行以下操作.

输入以下命令:

./generator --generate_chain_certificate ./dir_chain_ca

img
img

检查dir_chain_ca文件夹是否存在链证书和私钥:

ls dir_chain_ca/

img
img

7机构证书初始化

在generator文件夹下生成各个机构的证书,然后复制到各个机构的工作目录中

机构A:

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA

img
img

机构B:

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB

img
img

机构C:

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agency

img
img

查看生成目录 :

ls dir_agency_ca/

img
img

拷贝生成出来的机构证书,机构私钥,链证书到各自的机构目录下的meta文件中:

img
img

使用工具生成机构A的SDK证书

./generator --generate_sdk_certificate ./dir_sdk_caA ./dir_agency_ca/agencyA

img
img

使用工具生成机构B的SDK证书

./generator --generate_sdk_certificate ./dir_sdk_caB ./dir_agency_ca/agencyB

img
img

使用工具生成机构C的SDK证书

./generator --generate_sdk_certificate ./dir_sdk_caC ./dir_agency_ca/agencyC

img
img

8生成群组1的两个节点(机构A,机构B)

修改机构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

img
img

修改机构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

img
img

回到generator-A文件目录下:

cd …/generator-A

执行:

./generator --generate_all_certificates ./agencyA_node_info

这条命令会根据我们配置的节点信息生成机构A的节点证书和p2p连接信息文件

img
img

检查agencyA_node_info是否存在刚刚生成的证书文件和p2p连接信息:

ls agencyA_node_info

img
img

将机构A的peers.txt文件拷贝给机构B并改名为peersA.txt

cp agencyA_node_info/peers.txt …/generator-B/meta/peersA.txt

img
img

去到机构B文件夹进行操作:

cd …/generator-B

执行:

./generator --generate_all_certificates ./agencyB_node_info

这条命令会根据我们配置的节点信息生成机构B的节点证书和p2p连接信息文件

img
img

由于群组创建需要创世区块,规定此机构必须要节点证书,我们选择在机构A中进行创建,所以机构B除了复制peers.txt文件外,还需要复制机构B的两个节点crt文件给机构A

cp -r agencyB_node_info/peers.txt …/generator-A/meta/peersB.txt

img
img

cp -r agencyB_node_info/cert_10.206.0.14_30361.crt …/generator-A/meta/

img
img

回到机构A文件夹:cd …/generator-A

修改conf/group_genesis.ini文件

vim conf/group_genesis.ini

img
img

结合两个节点证书文件,生成创世区块 :

./generator –create_group_genesis ./group

img
img

查看生成创世群组区块和群组配置文件:

ls group

img
img

将group.1.genesis文件拷贝到机构B

cp group/group.1.genesis …/generator-B/meta/

img
img

使用–build_install_package生成机构A的节点,第一个实参是放群组内其它节点的连接信息,第二个是节点文件的输出目录

./generator --build_install_package ./meta/peersB.txt ./nodeA

img
img

回到机构B:

cd …/generator-B

使用–build_install_package生成机构B的节点,第一个实参是放群组内其它节点的连接信息,第二个是节点文件的输出目录

./generator --build_install_package ./meta/peersA.txt ./nodeB

img
img

打包机构B并放入到二号机内

打包:

tar cvf B.tar generator-B

img
img

在二号机进行解压:

tar xvf B.tar

(我这里是用可视化工具手动传输,放到自己想要放到的文件夹内进行解压操作)我这里的地址是在/root/g

img
img

9使用落盘加密,加密机构A的节点nodeA

(要加密那个节点就修改那个节点的配置文件,我这里只是做一个示范,后面的操作都是一样的)

我这里使用的centos的系统,如果用别的操作系统请去官网这里查看对应的下载依赖指令

FISCO-BCOS/key-manager: Key manager for FISCO BCOS

下面的操作我都在/root/g下面进行

下载依赖包:

sudo yum install procps-ng-devel

img
img

sudo yum install curl-devel

img
img

安装cmake3 :

sudo yum install -y cmake3

img
img

拉取工具包并进行构建

git clone https://github.com/FISCO-BCOS/key-manager.git

img
img

去到key-manager并创建build文件夹并去到build文件夹内

cd key-manager && mkdir build && cd build

img
img

使用cmake3进行构建系统文件

cmake3 …

如果大家这里编译不了,去看错误日志,提示缺少什么配置就下载什么配置

img
img

使用make进行编译构建

make

img
img
img
img

启动key-manager服务:

./key-manager 8150 123xyz

这里还有一个命令就是

nohup ./key-manager 8150 123xyz > nohup.out 2>&1 &

如果使用nohup命令就之间将服务挂载到后台了,就可以关闭当前终端

img
img

不要关闭当前的终端,我们在去开一个新的终端,进入到/root/g/key-manager的scripts文件夹中

运行以下命令:

bash gen_data_secure_key.sh 127.0.0.1 8150 mima1

最后面的参数为自己要设定的密码

img
img

配置dataKey(ps:配置datakey的节点,必须是新生成的,未启动过的节点)要加密那个节点就修改那个节点的config.ini文件

切换回到generator-A文件中,进入到节点目录下:

cd nodeA/node_10.206.0.13_30360

img
img

修改config.ini文件 vim config.ini

找到以下配置,并将前面key-manager生成的datekey填入

img
img

切换回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

img
img

至此机构A中的节点node_10.206.0.13_30360已经完成了落盘加密

10启动节点,查看共识

切换到/root/g/generator-A文件夹中,进入到nodeA目录下面 cd nodeA

启动节点:

bash start_all.sh

img
img

在二号机内切换到/root/g/generator-B夹中,进入到nodeB目录下面 cd nodeB

启动节点:

bash start_all.sh

img
img

检测节点的共识情况,在/root/g/generator-B/nodeB目录下执行以下命令:

tail -f node_10.206.0.14_30361/log/log_2024120314.07.log | grep +++

img
img

切换到一号机检测节点共识,在/root/g/generator-A/nodeA目录下执行以下命令:

tail -f node_10.206.0.13_30360/log/log_202412031* | grep +++

img
img

至此双机单群组多机构的区块链网络已经搭建成功,并且机构A节点node_10.206.0.13_30360进行了落盘加密

11机构A扩容节点并加入群组1

在上面的操作中,机构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

img
img

使用命令生成节点证书和p2p连接信息文件

./generator --generate_all_certificates ./agencyA_node_info_new

img
img

查看生成文件:

ls ./agencyA_node_info_new

img
img

合并当前节点的peers.txt文件

因为生成节点的时候要指定节点p2p连接信息peers.txt为群组内其它节点的连接信息,多个机构组网的情况下需要将其合并,所以新增的这个节点要将他们的p2p连接信息都拿到。

cat ./agencyA_node_info/peers.txt >> ./meta/peersB.txt

img
img
img
img

生成新增节点:

./generator --build_install_package ./meta/peersB.txt ./nodeA_new

img
img

查看生成节点配置文件夹:

ls ./nodeA_new

img
img

查看新增节点node.nodeid

cat nodeA_new/node_10.206.0.13_30362/conf/node.nodeid

img
img

启动新增的节点:

bash nodeA_new/start_all.sh

img
img

查看节点进程:

ps -ef | grep fisco

img
img

使用控制台将新增节点加入群组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.crtsdk.key文件拷贝到conf目录下,将conf目录下的config-example.toml文件重命名为config.toml文件。

进入console文件夹下:

cd console

前面已经在generator生成了机构的sdk证书,拷贝证书到conf目录下

cp …/…/generator/dir_sdk_caA/sdk/ca.crt conf

img
img

cp …/…/generator/dir_sdk_caA/sdk/sdk.* conf

img
img

进入到conf目录下:

cd conf

将conf目录下的config-example.toml文件重命名为config.toml文件。

cp -r config-example.toml config.toml

img
img

修改config.toml配置文件,由于我们的现阶段在群组1内,所以我们的控制台只需要将机构A节点1的信息填入,就可以访问群组内所有节点信息了。

vim config.toml

img
img

启动控制台:

bash start.sh

img
img

使用以下命令,将node3节点id添加到群组1共识中来(节点id已经在上面获取了)

addSealer c374318a92da2b8cd478350a471677543d549a69df77b59490766fec029b6e9044332b35b8fedd06802bae2bc90612b01f30e5eeade2b9819dc6c7b709e13973

img
img

使用命令查看是否添加共识成功:

getSealerList

img
img

退出控制台,查看新增节点是否加入共识

tail -f nodeA_new/node_10.206.0.13_30362/log/log_202412031* | grep +++

img
img

至此我们在已有机构内新增节点,并加入到群组的任务已经完成

12 新增机构C并让机构C和机构B组成群组2

在这里面,我们将群组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

img
img

生成机构C的节点证书和p2p连接信息文件

./generator --generate_all_certificates ./agencyC_node_info

img
img

查看生成文件列表:

ls agencyC_node_info/

img
img

将peers.txt拷贝给机构B(注意这里的机构B是在二号机上面的机构B)

PS:我这里进行的拷贝是通过可视化工具直接拖过去的

img
img

由于是使用机构C生成创世区块,所以需要机构B的peers.txt和机构B的节点文件(这里因为是只需要配置文件,所以我们在当前一号机内便可以执行拷贝命令)

cp -r …/generator-B/agencyB_node_info/cert_10.206.0.14_30361.crt meta/

img
img

cp -r …/generator-B/agencyB_node_info/peers.txt meta/peersB.txt

img
img

修改机构C中的conf/group_genesis.ini文件:

vim conf/group_genesis.ini

img
img

生成群组2创世区块文件:

./generator --create_group_genesis ./group

img
img

将生成出来的创世区块拷贝给机构B的meta中(这里要拷贝至二号机的机构B内)

img
img

生成机构C打包传输到二号机并启动

./generator --build_install_package ./meta/peersB.txt ./nodeC

img
img

tar cvf C.tar generator-C

img
img

我这里是用来可视化工具直接传过去了

在二号机/root/g进行解压:

tar xvf C.tar

img
img

进入到加压好的generator-C文件夹下:

cd generator-C

启动节点:

bash nodeC/start_all.sh

img
img

还是在二号机内进行操作:

cd …/generator-B

进入机构B使用–add_group 第一个参数选择群组2的创世块,第二个参数选择需要加入群组的节点目录

./generator --add_group ./meta/group.2.genesis ./nodeB

img
img

使用–add_peers ,添加机构C节点连接文件peers至已有节点

./generator --add_peers ./meta/peersC.txt ./nodeB

img
img

重启机构B的节点

bash nodeB/stop_all.sh

bash nodeB/start_all.sh

img
img

查看机构B节点是否在两个群组进行共识

tail -f nodeB/node_10.206.0.14_30361/log/log_202412031* | grep +++

img
img

查看机构C节点是否在群组2内共识

回到机构C文件夹中查看:

cd …/generator -C

tail -f nodeC/node_10.206.0.14_30363/log/log_2024120316.43.log | grep +++

img
img

至此我们就已经完成了我们所设计的网络拓扑区块链网络结构。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 多机搭链
    • 1首先我们要准备两台虚拟机
    • 2为这两台机建立ssh免密连接
    • 3下载并安装企业级部署generator工具
    • 4获取节点二进制,拉取最新的fisco-bcos二进制文件到meta中
    • 5机构初始化
    • 6链证书初始化
    • 7机构证书初始化
    • 8生成群组1的两个节点(机构A,机构B)
    • 9使用落盘加密,加密机构A的节点nodeA
    • 10启动节点,查看共识
    • 11机构A扩容节点并加入群组1
    • 12 新增机构C并让机构C和机构B组成群组2
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档