【问题标题】:How can I set up hyperledger fabric with multiple hosts using Docker?如何使用 Docker 设置具有多个主机的超级账本结构?
【发布时间】:2017-03-30 09:36:36
【问题描述】:

我在 Hyperledger Fabric v1.0 上工作,并希望使 Getting Setup 在多个主机上工作。现在,2 会很棒。

这是我想做的:

  1. Host1:启动一个 orderer 和 2 个 peer
  2. Host2:启动 1 个节点
  3. Host2:客户端创建一个通道(使用使用良好主机 IP 更新的 channel_test.sh)并加入所有 3 个对等点
  4. Host1:调用给定示例的 de deploy.js 来部署链码

我在第三步遇到了问题。我认为频道创建有效,但在我的同行日志中,我对 3 个同行有相同的警告:

Remote endpoint claims to be a different peer, expected [host1 IP:8051] but got [172.17.0.4:7051]
Failed obtaining connection for 172.31.9.126:8051, PKIid:[49 55 50 ...] reason: Authentication failure

看起来他们无法相互交流。 知道问题出在哪里吗?

我仍然尝试了我的第 4 步,但我无法部署它,除非我从 config.json 中删除 host2: peer1。即使这样,我也只能从 host1: peer0 查询,而不能从 host1: peer2 查询。

以下是我用来设置网络的命令:

Host1:订购者

docker run --rm -it --name orderer -p 8050:7050 
-e ORDERER_GENERAL_LEDGERTYPE=ram 
-e ORDERER_GENERAL_BATCHTIMEOUT=10s 
-e ORDERER_GENERAL_BATCHSIZE_MAXMESSAGECOUNT=10 
-e ORDERER_GENERAL_MAXWINDOWSIZE=1000 
-e ORDERER_GENERAL_ORDERERTYPE=solo 
-e ORDERER_GENERAL_LOGLEVEL=debug 
-e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 
-e ORDERER_GENERAL_LISTENPORT=7050 
-e ORDERER_RAMLEDGER_HISTORY_SIZE=100 
sfhackfest22017/fabric-orderer:x86_64-0.7.0-snapshot-c7b3fe0 orderer

Host1:Peer0

docker run --rm -it --name peer0 -p 8051:7051 -p 8053:7053
-v /var/run/:/host/var/run/ -v $BASE_DIR/tmp/peer0:/etc/hyperledger/fabric/msp/sampleconfig 
-e CORE_PEER_ADDRESSAUTODETECT=true 
-e CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 
-e CORE_LOGGING_LEVEL=DEBUG 
-e CORE_PEER_NETWORKID=peer0 
-e CORE_NEXT=true 
-e CORE_PEER_ENDORSER_ENABLED=true 
-e CORE_PEER_ID=peer0 
-e CORE_PEER_PROFILE_ENABLED=true 
-e CORE_PEER_COMMITTER_LEDGER_ORDERER=$ORDERER_IP:7050 
-e CORE_PEER_GOSSIP_ORGLEADER=true 
-e CORE_PEER_GOSSIP_IGNORESECURITY=true 
sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Host1:Peer2

docker run --rm -it --name peer2 -p 8055:7051 -p 8057:7053 
-v /var/run/:/host/var/run/ -v $BASE_DIR/tmp/peer0:/etc/hyperledger/fabric/msp/sampleconfig
-e CORE_PEER_ID=peer2 
[Other parameters are the same as Peer0]
sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Host2:Peer1

docker run --rm -it --name peer1 -p 8051:7051 
-v /var/run/:/host/var/run/ -v $BASE_DIR/tmp/peer0:/etc/hyperledger/fabric/msp/sampleconfig
-e CORE_PEER_ID=peer1 
[Other parameters are the same as Peer0]
sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Host2:Cli

docker run --rm -it --name cli
    -v /var/run/:/host/var/run/ -v $BASE_DIR/tmp/peer3:/etc/hyperledger/fabric/msp/sampleconfig -v $BASE_DIR/src/github.com/example_cc/example_cc.go:/opt/gopath/src/github.com/hyperledger/fabric/examples/example_cc.go -v $BASE_DIR/channel_test.sh:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel_test.sh
    --workdir /opt/gopath/src/github.com/hyperledger/fabric/peer  
    -e GOPATH=/opt/gopath 
    -e CORE_PEER_ADDRESSAUTODETECT=true
    -e CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 
    -e CORE_LOGGING_LEVEL=DEBUG 
    -e CORE_NEXT=true 
    -e CORE_PEER_ID=cli 
    -e CORE_PEER_ENDORSER_ENABLED=true 
    -e CORE_PEER_COMMITTER_LEDGER_ORDERER=$ORDERER_IP:8050 
    -e CORE_PEER_ADDRESS=$PEER0_IP:8051 
    sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 ./channel_test.sh

如果您需要更多信息,请随时询问。

注意:我对 docker 不是很熟悉,欢迎对我如何使用它提出任何改进/建议 :)

【问题讨论】:

  • 你能解释一下CORE_NEXT=true变量的用途吗?
  • 我尝试与docker-compose-gettingstarted.yml 做同样的事情。至于环境变量的用途,我不能说。你知道我在哪里可以找到文档吗?
  • 看起来您的问题与端口映射有关 - 如果主机位于不同的 IP 上,则无需移动端口。在所有对等方中将 -p 805x:7051 -p 805x:7053 更改为 -p 7051:7051 -p 7053:7053
  • 消息现在是一样的,但端口改变了:Exp: 172.3X.X.XXX:7051 - Got: 172.17.0.3:7051 (第一个 ip 是机器的,第二个是本地 docker 的 ip )。但是感谢您的端口建议
  • 同样你有什么运气吗?

标签: hyperledger hyperledger-fabric


【解决方案1】:

我找到了一个似乎可以使用 docker swarm mode 的解决方案。

  1. 初始化群:(docker swarm documentation 了解更多信息)
  2. 以管理员身份与其他主机一起加入集群
  3. 创建一个网络(在我的例子中是“hyp-net”)

    docker network create --attachable --driver overlay hyp-net

我必须做的改变:

  • 使用 --link docker 参数链接容器
  • 添加了 --network docker 参数 (--network=hyp-net)
  • 为使用的docker run命令添加了一个新的环境变量:

    -e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net
    

以下是对我有用的命令:

订购者

docker run --rm -it --network="hyp-net" --name orderer -p 8050:7050 
-e ORDERER_GENERAL_LEDGERTYPE=ram 
-e ORDERER_GENERAL_BATCHTIMEOUT=10s 
-e ORDERER_GENERAL_BATCHSIZE_MAXMESSAGECOUNT=10 
-e ORDERER_GENERAL_MAXWINDOWSIZE=1000 
-e ORDERER_GENERAL_ORDERERTYPE=solo 
-e ORDERER_GENERAL_LOGLEVEL=debug 
-e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 
-e ORDERER_GENERAL_LISTENPORT=7050 
-e ORDERER_RAMLEDGER_HISTORY_SIZE=100 
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net 
sfhackfest22017/fabric-orderer:x86_64-0.7.0-snapshot-c7b3fe0 orderer

Peer0

docker run --rm -it --link orderer:orderer --network="hyp-net" --name peer0 -p 8051:7051 -p 8053:7053 
-v /var/run/:/host/var/run/ -v $BASE_DIR/tmp/peer0:/etc/hyperledger/fabric/msp/sampleconfig  
-e CORE_PEER_ADDRESSAUTODETECT=true 
-e CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 
-e CORE_LOGGING_LEVEL=DEBUG 
-e CORE_PEER_NETWORKID=peer0 
-e CORE_NEXT=true 
-e CORE_PEER_ENDORSER_ENABLED=true 
-e CORE_PEER_ID=peer0 
-e CORE_PEER_PROFILE_ENABLED=true
-e CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 
-e CORE_PEER_GOSSIP_ORGLEADER=true 
-e CORE_PEER_GOSSIP_IGNORESECURITY=true 
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net 
sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Peer1

docker run --rm -it --network="hyp-net" --link orderer:orderer --link peer0:peer0 [...] -e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Peer2

docker run --rm -it --network="hyp-net" --link orderer:orderer --link peer0:peer0 --link peer1:peer1 [...] -e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 peer node start --peer-defaultchain=false

Cli

docker run --rm -it --network="hyp-net" --link orderer:orderer --link peer0:peer0 --link peer1:peer1 --link peer2:peer2 [...] -e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net sfhackfest22017/fabric-peer:x86_64-0.7.0-snapshot-c7b3fe0 ./channel_test.sh

有了这个,我可以部署、调用和查询我的链码。

【讨论】:

  • 太棒了!你的帖子很有帮助!!!但我有一个问题。这个例子也适用于 v1.0 吗?看起来像原始 url,hyperledger-fabric.readthedocs.io/en/latest/asset_setup.html,使用 v0.6,因为对等体没有安装和实例化命令...
  • 我不知道最新版本,但我打算试试。如果我有任何运气,我会更新这篇文章
  • @KoOhhashi 我在两台主机上尝试了最新版本的getting started,它可以工作
  • 嗨,埃里克!我面临同样的问题。现在 swarm 环境已经搭建完成,但是所有的 Fabric 节点都运行时出现了 panic 错误。 root@25f4f7531d54:/usr/local/bin# peer node start panic: Fatal error when initializing core config : Error when reading core config file: Unsupported Config Type "" goroutine 1 [running]: panic(0xc82b40, 0xc420187c10) /opt/ go/src/runtime/panic.go:500 +0x1a1 main.main() /opt/gopath/src/github.com/hyperledger/fabric/peer/main.go:94 +0x7c2 我使用 docker export 构建了 docker 镜像并将图像导入两个主机。
  • @ecn 如果您在某处发布了有关如何执行此操作的教程,那就太好了...似乎有关此过程如何工作的一些细节在 SO 和“开始”目前也有一些不足之处。
【解决方案2】:

我能够使用 docker swarm 模式在多台机器上托管超级账本结构网络。 Swarm 模式提供跨多个主机/机器的网络,用于结构网络组件的通信。

这篇文章解释了部署过程。它创建了一个 swarm 网络,所有其他机器都加入了网络。 https://medium.com/@wahabjawed/hyperledger-fabric-on-multiple-hosts-a33b08ef24f

它适用于 Fabric 1.0+

【讨论】:

    【解决方案3】:

    检查 fabric-samples\first-network\connection-org*.yaml 和 fabric-samples\first-network\connection-org*.json 中的服务器名称。这些将从 ccp-template.json 和 ccp-template.yaml 模板化和生成。

    此外,在 fabric-samples\first-network\crypto-config.yaml 中的“规格”下有对等点的条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多