多群组部署

article/2025/7/4 21:28:05

相关概念

星形拓扑和并行多组

如下图,星形组网拓扑和并行多组组网拓扑是区块链应用中使用较广泛的两种组网方式。

  • 星形拓扑:中心机构节点同时属于多个群组,运行多家机构应用,其他每家机构属于不同群组,运行各自应用;
  • 并行多组:区块链中每个节点均属于多个群组,可用于多方不同业务的横向扩展,或者同一业务的纵向扩展。

星形拓扑和并行多组的区别,星星之后一个中心节点同时属于多个机构,向外延伸的节点,各自属于不同群组。

并行多组,是里面的节点均属于多个群组。

下面以构建八节点星形拓扑四节点并行多组区块链为例,详细介绍多群组操作方法。

安装依赖

# Ubuntu
$ sudo apt install -y openssl curl

星形拓扑

本章以构建上图所示的单机、四机构、三群组、八节点的星形组网拓扑为例,介绍多群组使用方法。

星形区块链组网如下:

  • agencyA:在127.0.0.1上有2个节点,同时属于group1、group2、group3
  • agencyB:在127.0.0.1上有2个节点,属于group1
  • agencyC:在127.0.0.1上有2个节点,属于group2
  • agencyD:在127.0.0.1上有2个节点,属于group3

搭建星形区块链

build_chain.sh支持任意拓扑多群组区块链构建,可使用该脚本构建星形拓扑区块链节点配置文件夹:

准备依赖

  • 创建操作目录
mkdir -p ~/fisco && cd ~/fisco
  • 获取build_chain.sh脚本
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.sh

生成星形区块链系统配置文件

 cat > ipconf << EOF
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
EOFcat ipconf
空格分隔的参数分别表示如下含义:
# ip:num: 物理机IP以及物理机上的节点数目
# agency_name: 机构名称
# group_list: 节点所属的群组列表,不同群组以逗号分隔
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3

使用build_chain脚本构建星形区块链节点配置文件夹

bash build_chain.sh -f ipconf -p 30300,20200,8545
# 生成的节点文件如下
nodes
|-- 127.0.0.1
|   |-- fisco-bcos
|   |-- node0
|   |   |-- conf  #节点配置目录
|   |   |   |-- ca.crt
|   |   |   |-- group.1.genesis
|   |   |   |-- group.1.ini
|   |   |   |-- group.2.genesis
|   |   |   |-- group.2.ini
|   |   |   |-- group.3.genesis
|   |   |   |-- group.3.ini
|   |   |   |-- node.crt
|   |   |   |-- node.key
|   |   |   `-- node.nodeid # 记录节点Node ID信息
|   |   |-- config.ini #节点配置文件
|   |   |-- start.sh  #节点启动脚本
|   |   `-- stop.sh   #节点停止脚本

启动节点

bash nodes/127.0.0.1/start_all.sh

查看群组共识状态

# 查看node0 group1是否正常共识(Ctrl+c退回命令行)
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:1.*++"# 查看node0 group2是否正常共识
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:2.*++"
...# ... 查看node1, node2节点每个群组是否正常可参考以上操作方法...# 查看node3 group1是否正常共识
$ tail -f nodes/127.0.0.1/node3/log/*| grep "g:1.*++"
.# 查看node5 group2是否正常共识
$ tail -f nodes/127.0.0.1/node5/log/* | grep "g:2.*++"

配置并启动控制台

也是一样,那脚本,启动,拷贝控台台证书,拷贝控制台文件。

cd ~/fisco# 获取控制台
$ curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 拷贝控制台证书
$ cp nodes/127.0.0.1/sdk/* console/conf/ -r# 获取node0的channel_listen_port
$ grep "channel_listen_port" ~/fisco/nodes/127.0.0.1/node*/config.ini# 拷贝控制台配置
$ cp console/conf/config-example.toml console/conf/config.tomlbash console/start.sh

向群组发交易

switch 2   # 切换群组
deplay HelloWorld 群组1,2都部署一次复制标签
tail -f nodes/127.0.0.1/node0/log/log* | grep g:2.*++
发现块高增加到2

节点加入群组

本章以将node2加入group2为例,介绍如何在已有的群组中,加入新节点。

通过 ls nodes/127.0.0.1/node2/conf/ 目前属于 grop 1

1.跟扩容新节点差不多,不就是先获取节点脚本,生成脚本文件,复制节点配置文件,修改配置

2.然后就是复制group 文件,决定能不能再控制台正常加入群组


# 进入节点目录cd ~/fisco/nodes/127.0.0.1# ... 从node0拷贝group2的配置到node2...
cp node0/conf/group.2.* node2/conf# ...重启node2(重启后请确定节点正常共识)...
bash node2/stop.sh && bash node2/start.sh# 获取node2的node id
cat node2/conf/node.nodeid

通过控制台向group2发送命令,将node2加入到group2

cd ~/fiscobash console/start.sh 2 # 直接启动群组2控制台# node2 添加到共识节点列表
getSealerListaddSealer nodeidgetSealerList# 若在group2部署合约,node2日志块高发生变化证明加入群组成功
deploy HelloWorld
tail -f node2/log/* | grep "g:2.*++"

并行多组

并行多组区块链搭建方法与星形拓扑区块链搭建方法类似,以搭建四节点两群组并行多链系统为例:

  • 群组1:包括四个节点,节点IP均为127.0.0.1
  • 群组2:包括四个节点,节点IP均为127.0.0.1

这样对比,就tm对比一条链4个节点,多了一个群组。

构建单群组四节点区块链

 mkdir -p ~/fisco && cd ~/fiscocurl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.shbash build_chain.sh -l 127.0.0.1:4 -o multi_nodes -p 20000,20100,7545 # 这次指定了节点目录# 启动bash multi_nodes/127.0.0.1/start_all.sh# 检查共识情况,(只有群组1)# 另外3个点共识情况自行检查tail -f nodes/127.0.0.1/node0/log/log* | grep ++

将group2加入区块链

并行多组区块链每个群组的genesis配置文件几乎相同,但[group].id不同,为群组号。

# 进入节点目录
cd ~/fisco/multi_nodes/127.0.0.1# 拷贝group1的配置
cp node0/conf/group.1.genesis node0/conf/group.2.genesis
cp node0/conf/group.1.ini node0/conf/group.2.ini# 修改群组ID
vim node0/conf/group.2.genesis 修改 id=2
cat node0/conf/group.2.genesis | grep id 如过id=2,修改成功# 将配置拷贝到各个节点
cp node0/conf/group.2.genesis node1/conf/group.2.genesis
cp node0/conf/group.2.genesis node2/conf/group.2.genesis
cp node0/conf/group.2.genesis node3/conf/group.2.genesis
cp node0/conf/group.2.ini node1/conf/group.2.ini
cp node0/conf/group.2.ini node2/conf/group.2.ini
cp node0/conf/group.2.ini node3/conf/group.2.ini# 重启各个节点
bash stop_all.sh
bash start_all.sh# 查看共识,发现多了个2群组
tail -f node0/log/log* | grep ++ 

向群组发交易

配置控制台

cd ~/fiscocurl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 获取channel_port
$ grep "channel_listen_port" multi_nodes/127.0.0.1/node0/config.ini
multi_nodes/127.0.0.1/node0/config.ini:    channel_listen_port=20100# 拷贝控制台证书
cp nodes/127.0.0.1/sdk/* console/conf/ -r
# 拷贝控制台配置
cp console/conf/config-example.toml console/conf/config.toml
# 修改控制台连接节点的端口,127.0.0.1:20200,20201
vim console/conf/config.toml
修改为20100,20101

发现控制台连接节点的端口,是node0的channel_listen_port

在这里插入图片描述

1.不对不对,假如说,在节点中定义了2个群组。那么群组id是不同的,其余大部分相同。

2.另外,我要在控制台中去连接这个2个群组,他肯定连接你这个链,通过node0的chanal_listen_port,因为我是2个群组,20100自动延伸为 + 1。

通过控制台向群组发交易

# 启动控制台
bash console/start.shswitch 2   # 切换群组
deplay HelloWorld 群组1,2都部署一次复制标签
tail -f  multi_nodes/127.0.0.1/node0/log/log* | grep g:2.*++
发现块高增加到2

http://www.hkcw.cn/article/URFTKtBJYw.shtml

相关文章

unidbg patch 初探 微博deviceId 案例

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 看了b站迷人瑞信那个由于是…

如何自定义WordPress主题(5个分步教程)

如果您已经安装了一个 WordPress 主题&#xff0c;但它不太适合您&#xff0c;您可能会感到沮丧。在定制 WordPress 主题方面&#xff0c;您有很多选择。 挑战在于找到正确的方法。 在本篇文章中&#xff0c;我将引导您了解自定义 WordPress 主题的各种选项&#xff0c;帮助您…

【兽医处方专用软件】佳易王兽医电子处方软件:高效智能的宠物诊疗管理方案

一、软件概述与核心优势 &#xff08;一&#xff09;试用版获取方式 资源下载路径&#xff1a;进入博主头像主页第一篇文章末尾&#xff0c;点击卡片按钮&#xff1b;或访问左上角博客主页&#xff0c;通过右侧按钮获取详细资料。 说明&#xff1a;下载文件为压缩包&#xff…

【nssctf第三题】[NSSCTF 2022 Spring Recruit]easy C

这是题目&#xff0c;下载附件打开是个C文件 #include <stdio.h> #include <string.h>int main(){char a[]"wwwwwww";char b[]"dvxbQd";//try to find out the flagprintf("please input flag:");scanf(" %s",&a);if…

DAY41 CNN

可以看到即使在深度神经网络情况下&#xff0c;准确率仍旧较差&#xff0c;这是因为特征没有被有效提取----真正重要的是特征的提取和加工过程。MLP把所有的像素全部展平了&#xff08;这是全局的信息&#xff09;&#xff0c;无法布置到局部的信息&#xff0c;所以引入了卷积神…

助力活力生活的饮食营养指南

日常生活中&#xff0c;想要维持良好的身体状态&#xff0c;合理的营养补充至关重要。对于易受身体变化困扰的人群来说&#xff0c;更需要从饮食中摄取充足养分。​ 蛋白质是身体的重要 “建筑材料”&#xff0c;鱼肉、鸡肉、豆类制品富含优质蛋白&#xff0c;易于消化吸收&am…

CA-Net复现

复现结果–Dice&#xff1a;90.093802&#xff0c;Jaccard&#xff1a;82.077802&#xff0c;95HD&#xff1a;6.89387267&#xff0c;ASD&#xff1a;1.76263258&#xff0c;与原文一致 感想 第16篇完全复现的论文

【具身智能】【机械臂】各类机械臂对比

选购指标 选购指标 说明机械-负载1w以内通常200g负载&#xff08;一袋酸奶&#xff09;&#xff0c;1w-5w 1kg负载&#xff08;1L饮料&#xff09;&#xff0c;5w 3kg负载机械-精度越贵精度越高机械-夹爪是否支持更换夹爪等&#xff0c;能否支持力控夹爪机械-AGV扩展 …

云服务器无法远程连接怎么办?

当云服务器无法远程连接&#xff08;比如 SSH、RDP 连接不上&#xff09;时&#xff0c;可以按照以下步骤逐一排查和解决&#xff1a; ✅ 一、检查网络连通性 &#x1f539; 1. 确认公网 IP 是否正确 登录云服务商后台查看分配给服务器的公网 IP&#xff0c;确保你连接的目标地…

PolyGen:一个用于 3D 网格的自回归生成模型 论文阅读

[2002.10880] PolyGen&#xff1a;一个用于 3D 网格的自回归生成模型 --- [2002.10880] PolyGen: An Autoregressive Generative Model of 3D Meshes 图 2&#xff1a;PolyGen 首先生成网格顶点&#xff08;左侧&#xff09;&#xff0c;然后基于这些顶点生成网格面&#xff0…

从 LeetCode 到日志匹配:一行 Swift 实现规则识别

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在开发中我们经常遇到“模式匹配”的问题&#xff0c;比如日志分类、用户意图识别、甚至是在一些权限系统中做规则映射判断。这类问题的本质是判断两个结构是否具有一致的对应关系。LeetCo…

基于Qt的app开发的过渡期

写在前面 这篇博客主要工作是解释和思考&#xff0c;不记录我做项目的过程&#xff0c;因为这篇博客是我要理解其他人的代码&#xff0c;其中涉及到tcp的服务器客户端交互、MySQL、多线程 这部分涉及到计算机网络&#xff0c;是笔者没学的部分&#xff0c;所以对我来说理解它们…

【笔记】如何卸载 MSYS2 中不同工具链的 numpy 包

&#x1f4dd; 笔记&#xff1a;如何卸载 MSYS2 中不同工具链的 numpy 包 &#x1f9f0; 目标说明 本笔记教你如何在 MSYS2 环境中彻底卸载 numpy 包&#xff0c;包括&#xff1a; MINGW64 工具链&#xff08;默认开发环境&#xff09;Clang-x86_64 工具链&#xff08;用于跨…

微型导轨在手术机器人领域中有哪些关键操作?

在微创手术领域&#xff0c;手术机器人凭借其高精度、高稳定性和远程操控能力&#xff0c;正逐步成为现代外科手术的重要工具。微型导轨作为一种专为高精度运动设计的线性导向系统&#xff0c;凭借其亚微米级定位精度、低摩擦运动特性及紧凑结构设计&#xff0c;已成为手术机器…

Qt实现的水波进度条和温度进度条

一.效果 二.原理 1.水波 要模拟波浪,就要首先画出一条波浪线,正弦余弦曲线就很适合。 y=A*sin(ω*x+φ)+k y=A*cos(ω*x+φ)+k 这是正弦余弦曲线的公式,要想实现水波效果,那需要两条曲线,一条曲线的波峰对着另外一条曲线的波谷,要实现这样的曲线效果,只有让正弦曲线前移…

并发编程的源头

1.1. 并发编程的全景图&#xff1a;三个核心问题 1. 分工 —— 提高并发性能的关键 含义&#xff1a;合理分配任务给多个线程&#xff0c;就像项目经理分配工作。目标&#xff1a;提升程序执行效率。实现工具和模式&#xff1a; Java SDK 并发包中的工具&#xff1a; Execut…

【Linux】Git原理与使用

编程不仅是解决问题的艺术&#xff0c;更是对复杂性进行优雅管理的哲学。 前言 这是我自己学习Git工具的笔记。后期我会继续把Git工具笔记开源至博客上。 版本控制器Git 1. Git是一款去中心化的分布式版本控制系统。 2. Git提交时&#xff0c;仅会记录并提交文件的变动部分。 G…

“等待-通知”机制优化(一次性申请)循环等待

1. “等待-通知”机制优化&#xff08;一次性申请&#xff09;循环等待 等待‑通知 释放锁 阻塞 唤醒 重新抢锁 所有 wait/notify 都属于 锁对象 的等待队列。 用 notifyAll()&#xff0c;写成 while(…) wait() —— 黄金法则。 面对自旋消耗 CPU 的场景&#xff0c;优…

麒麟信安安装谷歌浏览器

参考文档 麒麟信安系统Chrome离线安装包&#xff1a;高效便捷的浏览器解决方案-CSDN博客 项目文件预览 - 麒麟信安系统Chrome离线安装包:本仓库提供了一个适用于麒麟信安系统的Chrome浏览器离线安装包。该安装包包含了所有必要的依赖文件&#xff0c;并且已经对系统中已有的依…

智启未来:当知识库遇见莫奈的调色盘——API工作流重构企业服务美学

目录 引言 一、初识蓝耘元生代MaaS平台 1.1 平台架构 1.2 平台的优势 1.3 应用场景 二、手把手教你如何在蓝耘进行注册 &#xff08;1&#xff09;输入手机号&#xff0c;将验证码正确填入即可快速完成注册 &#xff08;2&#xff09;进入下面的页面表示已经成功注册&…