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文件修改部分如下:

  1. PeerOrgs:
  2. - Name: Org1
  3. Domain: org1.example.com
  4. CA:
  5. Hostname: ca
  6. Template:
  7. Count: 3
  8. SANS:
  9. - "localhost"
  10. Users:
  11. Count: 1

2.执行extend命令完成追加操作

在artifacts/channel目录下执行:

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

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

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

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

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

  1. version: '2'
  2. services:
  3. peer2.org1.example.com:
  4. container_name: peer2.org1.example.com
  5. extends:
  6. file: base.yaml
  7. service: peer-base
  8. environment:
  9. - CORE_PEER_ID=peer2.org1.example.com
  10. - CORE_PEER_LOCALMSPID=Org1MSP
  11. - CORE_PEER_ADDRESS=peer2.org1.example.com:7051
  12. ports:
  13. - 7151:7051
  14. - 7153:7053
  15. volumes:
  16. - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/:/etc/hyperledger/crypto/peer

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

  1. 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配置文件中保持一致,内容如下:

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

四、将新节点加入通道

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

  1. curl -s -X POST \
  2. http://localhost:4000/channels/mychannel/peers \
  3. -H "authorization: Bearer $ORG1_TOKEN" \
  4. -H "content-type: application/json" \
  5. -d '{
  6. "peers": ["peer3"]
  7. }'

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

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

  1. docker logs peer2.org1.example.com

五、安装链码

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

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

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

原文链接:https://zhayujie.com/add-peer.html

Fabric进阶(二)—— 在已有组织中增加节点的更多相关文章

  1. Fabric进阶(三)—— 使用SDK动态增加组织

    在fabric网络运行过程中动态追加新的组织是相当复杂的,网上的资料也十分匮乏,大多是基于first-network这样的简单示例,而且是使用启动cli容器的方法来增加组织,几乎没有针对实际应用的解决 ...

  2. 树莓派进阶之路 (027) - 在Linux中增加swap空间

    原贴地址:http://blog.csdn.net/chinalinuxzend/article/details/1759593  在Linux中增加swap空间 在安装Linux的时候,不知道swa ...

  3. Fabric进阶(一)—— 修改组织和通道的名称

    组织(Org)和通道(Channel)的名称是fabric网络比较重要的两个配置参数,在fabric提供的示例中都已经设置好了这两个参数,一般组织名为"Org1"和"Or ...

  4. Dom4j向XML中增加节点与属性——(四)

    先获取到节点,然后在节点山添加Element 添加节点 添加属性 设置开始标签与结束标签的值book.addElement("描述").addAttribute("nam ...

  5. Fabric中的节点类型

    在Fabric中,尽管所有对等节点/peer都是相同的,但它们可以根据网络的配置方式承担多个角色:(①②是主要的节点类型) ①提交节点: 通道中的每个对等节点都是一个提交节点.它们接收生成的交易区块, ...

  6. 【Chrome】如何在C++中增加给JavaScript调用的API

    本文示例说明了如何在Chrome浏览器中增加JavaScript API.为了简化,先假设是在已有的namespace中增加一个新的API,文章的最后将指出如果增加一下全新的namespace所需注意 ...

  7. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  8. mysql进阶(二十七)数据库索引原理

    mysql进阶(二十七)数据库索引原理 前言   本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb.   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础.    ...

  9. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)

    当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚 ...

随机推荐

  1. 记坑: ConfigurationProperties 和 RefreshScope

    为什么80%的码农都做不了架构师?>>>   当使用spring-cloud-config 和 spring-boot-configuration-processor时 使用bean ...

  2. Flash调用Alchemy编译的代码时出现Error #1506的解决

    Flash调用Alchemy编译的代码时出现Error #1506的解决这个问题困扰了我很久,因为需要频繁的向Alchemy代码中传递大ByteArray数组.当某次传递的数据量较大时,后面再调用时就 ...

  3. JAVA第二次blog总结

    JAVA第二次blog总结 0.前言 这是我们在博客园上第二次写博客,进行JAVA阶段学习的总结.现在我们接触到JAVA已经有一段时间了,但难点还是在于编程思想和方法的改变,第二阶段的学习让我对于理解 ...

  4. Hadoop学习笔记(三) ——HDFS

    参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @-@ WARN util.NativeCodeLoader: Unable to ...

  5. nginx经验分享

    如果我们在使用启动nginx时,遇到这样的提示: nginx: [alert] could not open error log file: open() "/usr/local/var/l ...

  6. 带权并查集--hdu3047 ZJnu stadium

    题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x:表示的是a,b相距x个距离:然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的 ...

  7. 网课应该这么刷(油猴Tampermonkey脚本自动刷课)

    懒人福利 首先有些人不想学怎么用脚本,满足你们,压缩包解压之后直接登录即可.戳我下载 脚本已经集成好了,登录即可刷课.章节测试还会自动答题呦,正确率高达97%呦. 油猴及脚本安装 油猴的脚本不知可以刷 ...

  8. 《Docker从入门到跑路》之网络模型介绍

    Bridge模式 当我们安装完docker后,启动Docker daemon,就会在主机上看到一个docker0的网桥,默认在此主机上启动的容器都会连接到这个网桥上.虚拟网桥的工作方式和物理交换机的工 ...

  9. golang之channel

    Buffered Channels package main import "fmt" func main() { ch := make(chan int, 2) ch <- ...

  10. Java——单双引号的区别

    单引号: 单引号包括的是单个字符,表示的是char类型.例如: char  a='1' 双引号: 双引号可以包括0个或者多个字符,表示的是String类型. 例如: String s="ab ...