日志

Fabric进阶(二)—— 在已有组织中增加节点

 来源    2020-05-23    0  

fabric网络在创建时就已经确定了初始的节点数量,而在实际应用场景中可能会需要在某个组织中动态增加节点。这里以balance-transfer v1.0为例(2 Org,4 Peer),介绍如何在org1中加入第3个peer节点。

一、追加新节点的身份信息

首先需要在组织org1的MSP目录中追加新节点的证书和私钥信息,主要是用到cryptogen工具(v1.1.0以上版本)

1.修改cryptogen.yaml文件(或者直接新建一个文件)中Template字段里的count参数,设置为需要该组织中存在的节点总数,可一次增加多个节点。

这里只在org1加入一个节点,所以cryptogen.yaml文件修改部分如下:

PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    CA:
       Hostname: ca 
    Template:
      Count: 3
      SANS:
        - "localhost"
    Users:
      Count: 1

2.执行extend命令完成追加操作
在artifacts/channel目录下执行:

./cryptogen extend --config=./cryptogen.yaml

注:--config参数应以实际情况下配置文件的名称及路径为准

二、编写新节点的docker配置文件

接下来需要编写docker配置文件用于启动新节点,内容较为简单,只需要在已有节点的配置上稍作修改即可,注意避免容器端口的冲突。

这里我将新节点的配置文件命名为new-peer.yaml,放置于artifacts目录下,以下是文件内容:

version: '2'

services:

  peer2.org1.example.com:
    container_name: peer2.org1.example.com
    extends:
      file:   base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer2.org1.example.com
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_ADDRESS=peer2.org1.example.com:7051
    ports:
      - 7151:7051
      - 7153:7053
    volumes:
        - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/:/etc/hyperledger/crypto/peer

启动新节点容器,在配置文件所在目录下执行:

docker-compose -f new-peer.yaml up -d

三、修改网络配置文件

网络配置文件network-config.json用于帮助应用程序获取网络节点的地址等信息,是app与节点通信的关键,所以需要在该配置文件中增加新节点的信息。
注:balance-transfer 1.1版本后已改为network-config.js文件。

在json文件的org1部分的peers字段后添加"peer3"的信息,注意ip和端口等信息需要与上述docker配置文件中保持一致,内容如下:

"peer3": {
    "requests": "grpcs://localhost:7151",
    "events": "grpcs://localhost:7153",
    "server-hostname": "peer2.org1.example.com",
    "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/tls/ca.crt"
}

四、将新节点加入通道

此时新增节点已经加入了区块链网络,但并没有加入某一个channel,所以是没有账本数据的。需要发送请求将其加入channel:

curl -s -X POST \
    http://localhost:4000/channels/mychannel/peers \
    -H "authorization: Bearer $ORG1_TOKEN" \
    -H "content-type: application/json" \
    -d '{
    "peers": ["peer3"]
  }'

请求中,$ORG1_TOKEN是通过注册获取的org1的token值,"peer3"是在网络配置文件中设置的新节点的别名。

加入通道成功后,查看节点日志可以发现新节点开始从其他节点同步区块:

docker logs peer2.org1.example.com

五、安装链码

加入channel后,peer3已经可以参与记账,但是不能指定该节点进行查询或交易,这时候需要发起请求安装chaincode:

curl -s -X POST \
    http://localhost:$PORT/chaincodes \
    -H "authorization: Bearer $ORG1_TOKEN" \
    -H "content-type: application/json" \
    -d '{
    "peers": ["peer3"],
    "chaincodeName":"mycc",
    "chaincodePath":"github.com/example_cc",
    "chaincodeVersion":"v0"
  }'

安装成功后指定新节点进行查询或交易操作,会自动生成该节点的chaincode镜像,并启动容器运行chaincode。在已有组织中新加节点的操作到这里就全部完成了!

相关文章
树莓派进阶之路 (027) - 在Linux中增加swap空间
日志原贴地址:http://blog.csdn.net/chinalinuxzend/article/details/1759593  在Linux中增加swap空间       在安装Linux的时候, ...
Dom4j向XML中增加节点与属性——(四)
日志先获取到节点,然后在节点山添加Element 添加节点 添加属性 设置开始标签与结束标签的值 book.addElement("描述").addAttribute("na ...
二叉树进阶之寻找一棵二叉树中的最大二叉搜索子树
日志转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/6618915.html      (规律:在二叉树中寻找某性质信息的题目的解题思路:用后序遍历从小树建立大树, ...
python – 测试实例中的方法是否已在mock中调用
问答我有这种设置,我正在测试一个使用另一个类的类,我想模仿后者,所以我只测试第一个类本身. nuclear_reactor.py: class NuclearReactor(): def __init__ ...
3
您是瀑布组织中的敏捷/务实开发人员吗?
问答如果是这样,你如何处理那些没有"感觉"正确的事情,例如: >不写单元测试 >没有持续的构建 >不重构 >没有团队编码标准 >不结对编程 >不做迭 ...
2
如何将AxesImage中的坐标映射到已保存图像文件中的坐标?
问答我使用matplotlib将数字矩阵显示为图像,沿轴附加标签,并将绘图保存为PNG文件.为了创建HTML图像映射,我需要知道PNG文件中由imshow显示的图像中的区域的像素坐标. 我已经找到了an ...
1
gcc链接器选项可以更改已编译二进制文件中的汇编器指令吗?
问答我想知道gcc链接器选项(例如:-Wl,options)是否可以更改已编译可执行文件中的汇编程序指令,因为如果使用某些gcc优化选项会发生这种情况? 当您比较编译的二进制文件(例如比较签名)时,可以看 ...
1
linux – dpkg可以验证已安装软件包中的文件吗?
问答使用rpm -qV openssh-server,我将获得与默认值相比已更改的文件列表. ~$rpm -qV openssh-server S.?....T. c /etc/ssh/sshd_conf ...
2
Silverlight 4登录InvalidOperationException“UserService操作已在进行中”
问答当您单击"登录"按钮时,我们在Silverlight 4(带有RIA服务的OOB)中收到此错误InvalidOperationException"userservice ...
1
访问已分配内存中的变量
问答让我说我想为3个整数分配内存: int *pn = malloc(3 * sizeof(*pn)); 现在为我们分配值: pn[0] = 5550; pn[1] = 11; pn[2] = 70000 ...
1
linux – 权限被拒绝尝试附加到已挂载目录中的文件
问答我无法理解为什么我无法附加到python3(3.2.3)中的文件.我在共享文件夹中创建这些文件,但我无法附加到它们.我的主文件夹中的文件没有问题.共享文件夹权限是: drwxrwxrwx 2 nobo ...
如何识别哪些短信已在Android中获得发送报告
问答我的应用程序通过根据记录的大小合并记录,从sqlite数据库和SMS检索记录到其他应用程序,我无法识别哪些消息已经获得了交付报告,哪些消息没有.我在reciveMethods上使用BroadcastR ...
3
PHP的Elasticsearch批量上传错误 – 已超出索引中的总字段数[1000]
问答我们计划在我们的一个项目中使用ElasticSearch.目前,我们正在使用我们的数据测试ElasticSearch 5.0.1.我们面临的一个问题是,当我们从MySQL表格到弹性搜索的批量上传时,我 ...
1
.net – 使用已在系统中使用的其他第三方(log4net)的第三方使用第三方的最佳方法是什么?
问答>目前我们使用版本1.2.10.0的log4net,我们应该开始使用其他团队开发的一些第三方组件. >提到的组件引用版本1.2.9.0的log4net. >所有二进制文件都部署在一个 ...
1
从Git仓库中删除已从磁盘中删除的多个文件
问答我有一个Git仓库,我已经使用rm(不是git rm)删除了四个文件,我的Git状态如下所示: # deleted: file1.txt # deleted: file2.txt # deleted: ...
1
交换 – 允许Outlook显示/下载已批准域中的图像
问答明智地,Outlook不会自动显示/下载HTML电子邮件中嵌入的图像. 有没有办法在站点范围内修改此策略(组策略或其他内容),因此每个人都会看到来自域名白名单的图像(想想内部域名)? 我特别关注Exc ...
1
c# – 套接字和身份验证失败,因为远程方已关闭WPF中的传输流异常
问答我正在尝试连接基于Java netty的服务器,它自动为自己生成证书(服务器人告诉我,现在接受来自客户端的任何证书). 我的任务是将TcpSocket连接迁移到Tls加密连接. 首先,我将TcpSoc ...
2
颜色 – VBA – 使用颜色已在Excel中选择以填充单元格内部
问答我知道如何将单元格的内部颜色设置为某种颜色,但是有没有办法让它(即单元格颜色)默认为在功能区颜色窗口中已经选择的颜色?::我已经很晚才开始了这个问题,但是因为它在谷歌搜索中出现了其他的东西,我想我会提 ...
1
有没有办法检测系统时钟是否已在Windows中向后更改?
问答在Windows机器上,有没有办法找出时间是否已经向后更改,而不会持续监视WM_TIMECHANGE消息? 例如,我想让我的应用程序在启动时做的第一件事是看看自上次运行应用程序以来的时间是否已经改变了 ...
1
如何手动将更多cookie添加到已在机械化中设置cookie的会话中?
问答我有一个python脚本,它抓取一个页面并收到一个cookie.我想将另一个cookie附加到正在发送到服务器的现有cookie中.因此,在下一个请求中,我从原始页面加上我手动设置的cookie. 无 ...
1