多群组部署

相关概念

星形拓扑和并行多组

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

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

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

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

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

安装依赖

# 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.pswp.cn/web/82546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue3-elemenyui的动态列案例

本案例主要是实现数据模型的解析以及实现el-table的动态列加载。 1.数据结构 公司A\B\C\测试1&#xff0c;是列&#xff0c;功能-url&#xff0c;是行数据&#xff0c;其中功能x是行头。 this.rawData [{companyName: "公司A",rpWebShows: [{ "功能1": &…

Kerberos面试内容整理-Kerberos 与 LDAP/Active Directory 的集成

Kerberos 通常不会单独存在于企业环境中,而是与目录服务相结合以提供完整的身份管理方案。其中,Active Directory (AD) 是 Kerberos 集成应用的典型代表。Active Directory 是微软的目录服务,实现了 LDAP(轻量级目录访问协议)目录和 Kerberos 认证的融合。在 AD 域控制器上…

Oracle DG库控制文件IO错误导致宕机的应急处理

Oracle DG库控制文件IO错误导致宕机的应急处理 事故现场偷天换日棋差一招事故现场 一套Oracle 19c DG环境的备库宕机。 根据告警时间检查实例宕机时间点附近的alert日志有如下重要信息: 2025-05-25T23:34:10.705385+08:00 KCF: read, write or open error, block=0x3377ee …

《前端面试题:前端盒模型》

前端盒模型完全指南&#xff1a;从原理到面试实战 &#x1f381; 端午快乐&#xff01; 各位前端小伙伴&#xff0c;端午节快乐&#xff01;&#x1f96e; 在这个粽叶飘香的时节&#xff0c;愿你的代码如龙舟般一往无前&#xff0c;bug 如咸蛋黄般被完美包裹&#xff01;今天我…

BERT:让AI真正“读懂”语言的革命

BERT&#xff1a;让AI真正“读懂”语言的革命 ——图解谷歌神作《BERT: Pre-training of Deep Bidirectional Transformers》 2018年&#xff0c;谷歌AI团队扔出一篇核弹级论文&#xff0c;引爆了整个NLP领域。这个叫BERT的模型在11项任务中屠榜&#xff0c;甚至超越人类表现…

爬虫入门:从基础到实战全攻略

&#x1f9e0; 一、爬虫基础概念 1.1 爬虫定义 爬虫&#xff08;Web Crawler&#xff09;是模拟浏览器行为&#xff0c;自动向服务器发送请求并获取响应数据的一种程序。主要用于从网页中提取结构化数据&#xff0c;供后续分析、展示或存储使用。 1.2 爬虫特点 数据碎片化&…

uni-app学习笔记二十一--pages.json中tabBar设置底部菜单项和图标

如果应用是一个多 tab 应用&#xff0c;可以通过 tabBar 配置项指定一级导航栏&#xff0c;以及 tab 切换时显示的对应页。 在 pages.json 中提供 tabBar 配置&#xff0c;不仅仅是为了方便快速开发导航&#xff0c;更重要的是在App和小程序端提升性能。在这两个平台&#xff…

行业分析---小米汽车2025第一季度财报

1 背景 最近几年是新能源汽车的淘汰赛&#xff0c;前短时间比亚迪再次开始了降价&#xff0c;导致一片上市车企的股价大跌&#xff0c;足见车圈现在的敏感度。因此笔者会一直跟踪新势力车企的财报状况&#xff0c;对之前财报分析感兴趣的读者朋友可以参考以下博客&#xff1a;…

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…

考研系列—操作系统:冲刺笔记(1-3章)

目录 第一章 计算机系统概述 1.基本概念 2.内核态和用户态 3.中断(外中断)、异常(内中断-与当前执行的) 4.系统调用 5.操作系统引导程序 2021年真题: 6.操作系统结构 大纲新增 (1)分层结构 (2)模块化 (3)外核 7.虚拟机 第二章 进程管理 1.画作业运行的顺序和甘…

监控 100 台服务器磁盘内存CPU利用率

监控 100 台服务器磁盘,内存&#xff0c;CPU利用率脚本 以下是一个优化后的监控脚本&#xff0c;用于同时监控100台服务器的磁盘、内存和CPU利用率&#xff0c;并支持并发执行以提高效率&#xff1a; #!/bin/bash # 服务器监控脚本 - 支持并发获取100台服务器系统指标 # 功能…

[5-02-04].第01节:Jmeter环境搭建:

JMeter笔记大纲 Jmeter依赖于JDK&#xff0c;所以必须确保当前计算机上已经安装了JDK&#xff0c;并且配置了环境变量 一、JMeter概述&#xff1a; 1.1.JMeter是什么&#xff1a; JMeter是Appache组织使用java开发的一款测试工具 可以用于对服务器、网络或对象模拟巨大的负载…

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

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

MapReduce(期末速成版)

起初在B站看3分钟的速成视频&#xff0c;感觉很多细节没听懂。 具体例子解析(文件内容去重) 对于两个输入文件&#xff0c;即文件A 和文件B&#xff0c;请编写MapReduce 程序&#xff0c;对两个文件进行合并&#xff0c;并剔除 其中重复的内容&#xff0c;得到一个新的输出文件…

Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据

隶属文章&#xff1a; Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a; Java高级 | 【实验一】Spring Boot安装及测试 最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot …

从零打造AI面试系统全栈开发

&#x1f916; AI面试系统开发完整教程 &#x1f4cb; 项目概述 本教程将带你从零开始构建一个完整的AI面试系统&#xff0c;包含前端、后端、AI集成和部署的全流程。 源码地址 技术栈 前端: React TypeScript Vite Vaadin Components后端: Spring Boot Spring Securi…

【硬件】PCIe协议 | 电脑的高速公路

文章目录 PCIe | 外围设备高速互联通道&#xff08;peripheral component interconnect express&#xff09;的核心概念和应用 基础概念 1.1 电脑内的”高速“&#xff0c;连接CPU、显卡、SSD&#xff08;固态硬盘&#xff09;等核心组件&#xff1b;数据传输速度极快&#xff…

【 Redis | 完结篇 缓存优化 】

前言&#xff1a;本节包含常见redis缓存问题&#xff0c;包含缓存一致性问题&#xff0c;缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存击穿问题及其解决方案 1. 缓存一致性 我们先看下目前企业用的最多的缓存模型。缓存的通用模型有三种&#xff1a; 缓存模型解释Cache Asi…

MySQL访问控制与账号管理:原理、技术与最佳实践

MySQL的安全体系建立在精细的访问控制和账号管理机制上。本文基于MySQL 9.3官方文档,深入解析其核心原理、关键技术、实用技巧和行业最佳实践。 一、访问控制核心原理:双重验证机制 连接验证 (Connection Verification) 客户端发起连接时,MySQL依据user_name@host_name组合进…

Go语言爬虫系列教程4:使用正则表达式解析HTML内容

Go语言爬虫系列教程4&#xff1a;使用正则表达式解析HTML内容 正则表达式&#xff08;Regular Expression&#xff0c;简称RegEx&#xff09;是处理文本数据的利器。在网络爬虫中&#xff0c;我们经常需要从HTML页面中提取特定的信息&#xff0c;正则表达式就像一个智能的&quo…