实战Hyperledger Fabric 1.4 Kafka排序服务多机集群

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介:

Hyperledger Fabric区块链网络搭建已繁琐著称。本教程将介绍如何部署一个分布在4个主机上包含多个排序节点和对等节点的hyperledger fabric区块链集群网络,同时提供源码和配置文件下载。

相关教程推荐:

1、服务结构

我们要搭建的Hyperledger Fabric网络拓扑结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p97Eo5UQ-1575772237579)(hyperledger-fabric-multi-hosts-network/topology.png)]
网络包含如下服务:

  • 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

# deploy ca, zookeerper, kafka and orderers on server0
docker-compose  -f deployment/docker-compose-kafka.yml up -d

在docker-compose文件中,我们为ca和orderer服务定义了extra_hosts属性,其中包含了所有对等节点的信息。由于ca和orderer可能需要与对等节点通信,因此它们需要了解对等节点的信息。peers部署在不同的主机上,因此我们可以在extra_hosts字段定义peer0、peer1和peer2的主机。

extra_hosts:
    - "peer0.org1.example.com:172.31.26.5"
    - "peer1.org1.example.com:172.31.20.177"
    - "peer2.org1.example.com:172.31.27.143"

2.2 部署peer0和cli0

我们在server2上部署peer0和cli0,其中cli0将接入peer0。使用的docker-compose文件为docker-compose-peer0.yml和docker-compose-cli.yml:

# deploy peer0
docker-compose -f deployment/docker-compose-peer0.yml up -d

# deploy cli0
docker-compose -f deployment/docker-compose-cli0.yml up -d

在docker-compose-peer0.yml中,我们定义了如下的extra_hosts字段,其中包含了所有排序节点、peer1和peer2的主机信息。添加其他对等节点信息的主要原因在于,对等节点使用gossip协议来向其他peer广播区块。

extra_hosts:
    - "orderer0.example.com:172.31.25.198"
    - "orderer1.example.com:172.31.25.198"
    - "orderer2.example.com:172.31.25.198"
    - "ca.example.com:172.31.25.198"
    - "peer1.org1.example.com:172.31.20.177"
    - "peer2.org1.example.com:172.31.27.143"

在docker-compose-cli0.yml中包含了排序节点的主机信息,因为cli命令在执行交易时需要与排序节点通信:

extra_hosts:
  - "orderer0.example.com:172.31.25.198"
  - "orderer1.example.com:172.31.25.198"
  - "orderer2.example.com:172.31.25.198"

2.3 部署peer1和cli1

接下来我们在server3上部署peer1和cli1:

# deploy peer1
docker-compose -f deployment/docker-compose-peer1.yml up -d

# deploy cli1
docker-compose -f deployment/docker-compose-cli1.yml up -d

在docker-compose-peer1.yml中的extra_hosts中包含了排序节点主机和其他对等节点主机(peer0和peer2)的信息。docker-compose-cli.yml中的extra_hosts字段定义了排序节点的主机信息。

2.4 部署peer2和cli2

最后,我们在server4上部署peer2和cli2:

# deploy peer2
docker-compose -f deployment/docker-compose-peer2.yml up -d

# deploy cli2
docker-compose -f deployment/docker-compose-cli2.yml up -d

同样在docker-compose文件中需要指定extra_hosts。

3、配置通道

现在已经完成了服务部署,接下来就需要配置通道了。

3.1 创建通道

通过接入server2上的peer0,执行如下命令创建通道:

# create channel from peer0 on server2
# it connects to orderer0
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" \
            -e "CORE_PEER_MSPCONFIGPATH=/var/hyperledger/users/Admin@org1.example.com/msp" \
            peer0.org1.example.com peer channel create 
            -o orderer0.example.com:7050 -c mychannel -f /var/hyperledger/configs/channel.tx

接下来我们将把所有三个对等节点加入通道

3.2 将peer0加入通道

现在接入server2上的peer0,执行如下的命令:

# join peer0 to channel
# execute this command from server1
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" \
            -e "CORE_PEER_MSPCONFIGPATH=/var/hyperledger/users/Admin@org1.example.com/msp" \
            peer0.org1.example.com peer channel join -b mychannel.block

上面的命令将在peer0容器内生成mychannel.block。

3.3 将mychannel.block拷贝到peer1和peer2

# copy mychannel.block from peer0 to host(server2)
docker cp peer0.org1.example.com:/mychannel.block .

# transfer mychannel.block to server3 and server4 via scp
scp -r mychannel.block ubuntu@172.31.20.177:
scp -r mychannel.block ubuntu@172.31.27.143:

# copy mychannel.block to peer1 and peer2 
# peer1 is on server3
# peer2 is on server4
docker cp mychannel.block peer1.org1.example.com:/mychannel.block
docker cp mychannel.block peer2.org1.example.com:/mychannel.block

# remove mychannel.block from server2, server3 and server4
rm mychannel.block

3.4 将peer1加入通道

现在可以将server3上的peer1加入通道:

# join peer1 to channel
# execute this command from server3 machine
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/var/hyperledger/users/Admin@org1.example.com/msp" \
            peer1.org1.example.com peer channel join -b mychannel.block

3.5 将peer2加入通道

同样,可以将server4上的peer2加入通道:

# join peer2 to channel
# execute this command from server4 machine
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/var/hyperledger/users/Admin@org1.example.com/msp" \
            peer2.org1.example.com peer channel join -b mychannel.block

4、配置链码

4.1 安装链码

链码在chaincode目录。我们使用cli在每个peer节点上安装链码。

# install on peer0 on server2
# cli container connects to peer0 
docker exec -it cli peer chaincode install -n mycc -p github.com/chaincode -v v0

# install on peer1 on server3
# cli container connects to peer1 
docker exec -it cli peer chaincode install -n mycc -p github.com/chaincode -v v0

# install on peer2 on server4
# cli container connects to peer2
docker exec -it cli peer chaincode install -n mycc -p github.com/chaincode -v v0

4.2 实例化链码

现在可以实例化链码了。在通道上只需要进行一次实例化。因此我们用server2上的cli0进行链码实例化操作:

# instantiate chaincode from peer0 on server2
# it connects to orderer0 
docker exec -it cli peer chaincode instantiate -o orderer0.example.com:7050 \
            -C mychannel -n mycc github.com/chaincode -v v0 -c '{"Args": ["a", "100"]}'

5、交易的执行与查询

5.1 执行交易

我们使用server2上的cli0调用链码交易:

# invoke transaction from peer0 on server2
# it connects to orderer0 on server1
docker exec -it cli peer chaincode invoke -o orderer0.example.com:7050 \
            -n mycc -c '{"Args":["set", "a", "20"]}' -C mychannel

5.2 查询交易

我们使用server4上的cli2查询交易:

# query transaction from peer2 on server4
docker exec -it cli peer chaincode query \
            -n mycc -c '{"Args":["query","a"]}' -C mychannel

本教程的源代码及配置文件可以在这里下载。


原文链接:Hyperledger Fabric多机部署教程 - 汇智网

目录
相关文章
|
19天前
|
消息中间件 Kafka 测试技术
【Kafka揭秘】Leader选举大揭秘!如何打造一个不丢失消息的强大Kafka集群?
【8月更文挑战第24天】Apache Kafka是一款高性能分布式消息系统,利用分区机制支持数据并行处理。每个分区含一个Leader处理所有读写请求,并可有多个副本确保数据安全与容错。关键的Leader选举机制保障了系统的高可用性和数据一致性。选举发生于分区创建、Leader故障或被手动移除时。Kafka提供多种选举策略:内嵌机制自动选择最新数据副本为新Leader;Unclean选举快速恢复服务但可能丢失数据;Delayed Unclean选举则避免短暂故障下的Unclean选举;Preferred选举允许基于性能或地理位置偏好指定特定副本为首选Leader。
37 5
|
17天前
|
消息中间件 监控 Java
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
|
19天前
|
消息中间件 监控 Java
【Kafka节点存活大揭秘】如何让Kafka集群时刻保持“心跳”?探索Broker、Producer和Consumer的生死关头!
【8月更文挑战第24天】在分布式系统如Apache Kafka中,确保节点的健康运行至关重要。Kafka通过Broker、Producer及Consumer间的交互实现这一目标。文章介绍Kafka如何监测节点活性,包括心跳机制、会话超时与故障转移策略。示例Java代码展示了Producer如何通过定期发送心跳维持与Broker的连接。合理配置这些机制能有效保障Kafka集群的稳定与高效运行。
24 2
|
1月前
|
消息中间件 Java Kafka
"Kafka快速上手:从环境搭建到Java Producer与Consumer实战,轻松掌握分布式流处理平台"
【8月更文挑战第10天】Apache Kafka作为分布式流处理平台的领头羊,凭借其高吞吐量、可扩展性和容错性,在大数据处理、实时日志收集及消息队列领域表现卓越。初学者需掌握Kafka基本概念与操作。Kafka的核心组件包括Producer(生产者)、Broker(服务器)和Consumer(消费者)。Producer发送消息到Topic,Broker负责存储与转发,Consumer则读取这些消息。首先确保已安装Java和Kafka,并启动服务。接着可通过命令行创建Topic,并使用提供的Java API实现Producer发送消息和Consumer读取消息的功能。
50 8
|
2月前
|
消息中间件 Kafka
kafka 集群环境搭建
kafka 集群环境搭建
57 8
|
1月前
|
消息中间件 Java Kafka
Linux——Kafka集群搭建
Linux——Kafka集群搭建
34 0
|
1月前
|
消息中间件 Kafka Apache
部署安装kafka集群
部署安装kafka集群
|
2月前
|
消息中间件 监控 Java
使用 JMX 监控 Kafka 集群性能指标
使用 JMX 监控 Kafka 集群性能指标
217 1
|
3月前
|
消息中间件 运维 数据管理
Kafka 如何基于 KRaft 实现集群最终一致性协调
Kafka 3.3.1 引入了 KRaft 元数据管理组件,替代 Zookeeper,以简化集群一致性维护,支持更大规模集群并减轻运维复杂性。在 Zookeeper 模式下,需同时运维 ZK 和 Broker,而 KRaft 模式仅需 3 个节点即可构成最小生产集群,且通信协调基于 Raft 协议,增强了一致性。KRaft 模式中,Controller 使用单线程处理请求,通过 KRaft 保持内存状态与多节点一致性。此外,Broker 根据 KRaft 记录更新元数据,实现声明式管理,提高集群协调效率。KRaft 的引入是集群协调机制的演进,采用事件驱动模型实现元数据的一致性。
128 1
Kafka 如何基于 KRaft 实现集群最终一致性协调