如何使用Docker设置多个主机的超级分层结构?

时间:2017-03-30 09:36:37

标签: hyperledger hyperledger-fabric

我使用Hyperledger Fabric v1.0,并希望Getting Setup能够在多个主机上运行。现在,2会很棒。

这是我想要做的:

  1. Host1 :启动订购者和2个同行
  2. Host2 :start 1 peer
  3. Host2 :客户端创建一个频道(使用更好的主机IP更新的channel_test.sh)并加入所有3个对等
  4. Host1 :调用给定示例的de deploy.js以部署链代码
  5. 我在第3步遇到了问题。我认为频道创建有效,但在我的同行日志中,我对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:Orderer

    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不是很熟悉,欢迎任何有关如何使用它的改进/建议:)

3 个答案:

答案 0 :(得分:14)

我找到了一个似乎使用 docker swarm模式的解决方案。

  1. 初始化一个群:( docker swarm documentation为mor信息)
  2. 以其他主持人身份加入swarm作为经理
  3. 创建网络(在我的情况下为“网络”)

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

  4. 我必须做的改变:

    • 使用 - link docker参数
    • 链接容器
    • 添加了 - 网络 docker参数(--network = hyp-net)
    • 添加了一个新的环境varialble todocker 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
    

    <强>对等方1

    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
    

    <强>对等体2

    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
    

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

答案 1 :(得分:4)

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

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

适用于Fabric 1.0 +

答案 2 :(得分:0)

检查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中的“规格”下有对等项的条目。