Hyperledger Fabric区块链网络搭建已繁琐著称。本教程将介绍 如何部署一个分布在4个主机上包含多个排序节点和对等节点的 hyperledger fabric区块链集群网络,同时提供源码和配置文件下载。
1、服务结构
我们要搭建的Hyperledger Fabric网络拓扑结构如下:
网络包含如下服务:
- 1个机构:org1.example.com
- 3个对等节点:peer0.example.com、peer1.example.com、peer2.example.com
- 1个CA节点:ca.example.com
- 3个排序节点:order0.example.com、order1.example.com、order2.example.com
- 3个zookeeper节点:zookeeper0、zookeeper1、zookeeper2
- 4个kafka节点:kafka0、kafka1、kafka2、kafka3
2、部署服务
2.1 部署ca、orderer和kafka
如上图所示,首先在server1上部署CA节点、排序节点、kafka节点和zookeeper节点,
使用的docker-compose文件文件为docker-compose-kafka.yml
:
1 | # deploy ca, zookeerper, kafka and orderers on server0 |
在docker-compose文件中,我们为ca和orderer服务定义了extra_hosts属性, 其中包含了所有对等节点的信息。由于ca和orderer可能需要与对等节点通信, 因此它们需要了解对等节点的信息。peers部署在不同的主机上,因此我们 可以在extra_hosts字段定义peer0、peer1和peer2的主机。
1 | extra_hosts: |
2.2 部署peer0和cli0
我们在server2上部署peer0和cli0,其中cli0将接入peer0。使用的 docker-compose文件为docker-compose-peer0.yml和docker-compose-cli.yml:
1 | # deploy peer0 |
在docker-compose-peer0.yml中,我们定义了如下的extra_hosts字段, 其中包含了所有排序节点、peer1和peer2的主机信息。添加其他对等节点 信息的主要原因在于,对等节点使用gossip协议来向其他peer广播区块。
1 | extra_hosts: |
在docker-compose-cli0.yml中包含了排序节点的主机信息,因为cli命令 在执行交易时需要与排序节点通信:
1 | extra_hosts: |
2.3 部署peer1和cli1
接下来我们在server3上部署peer1和cli1:
1 | # deploy peer1 |
在docker-compose-peer1.yml中的extra_hosts中包含了排序节点主机 和其他对等节点主机(peer0和peer2)的信息。docker-compose-cli.yml 中的extra_hosts字段定义了排序节点的主机信息。
2.4 部署peer2和cli2
最后,我们在server4上部署peer2和cli2:
1 | # deploy peer2 |
同样在docker-compose文件中需要指定extra_hosts。
3、配置通道
现在已经完成了服务部署,接下来就需要配置通道了。
3.1 创建通道
通过接入server2上的peer0,执行如下命令创建通道:
1 | # create channel from peer0 on server2 |
接下来我们将把所有三个对等节点加入通道
3.2 将peer0加入通道
现在接入server2上的peer0,执行如下的命令:
1 | # join peer0 to channel |
上面的命令将在peer0容器内生成mychannel.block。
3.3 将mychannel.block拷贝到peer1和peer2
1 | # copy mychannel.block from peer0 to host(server2) |
3.4 将peer1加入通道
现在可以将server3上的peer1加入通道:
1 | # join peer1 to channel |
3.5 将peer2加入通道
同样,可以将server4上的peer2加入通道:
1 | # join peer2 to channel |
4、配置链码
4.1 安装链码
链码在chaincode
目录。我们使用cli在每个peer节点上安装链码。
1 | # install on peer0 on server2 |
4.2 实例化链码
现在可以实例化链码了。在通道上只需要进行一次实例化。因此我们用 server2上的cli0进行链码实例化操作:
1 | # instantiate chaincode from peer0 on server2 |
5、交易的执行与查询
5.1 执行交易
我们使用server2上的cli0调用链码交易:
1 | # invoke transaction from peer0 on server2 |
5.2 查询交易
我们使用server4上的cli2查询交易:
1 | # query transaction from peer2 on server4 |
本教程的源代码及配置文件可以在这里下载。
原文链接:Hyperledger fabric cluster on multiple hosts
汇智网翻译整理,转载请标明出处