web-dev-qa-db-fra.com

Comment puis-je configurer une structure hyperledger avec plusieurs hôtes à l'aide de Docker?

Je travaille sur Hyperledger Fabric v1.0 et j'aimerais faire fonctionner Getting Setup sur plusieurs hôtes. Pour l'instant, 2 serait super.

Voici ce que je veux faire:

  1. Host1 : démarrez un ordonnateur et 2 pairs
  2. Host2 : démarrez 1 pair
  3. Host2 : Un client crée un canal (en utilisant le channel_test.sh mis à jour avec l'IP des bons hôtes) et rejoint les 3 pairs
  4. Host1 : Appelez de deploy.js de l'exemple donné pour déployer le chaincode

J'ai un problème sur la 3ème étape. Je pense que la création de chaîne fonctionne mais sur mon journal de pairs, j'ai les mêmes avertissements sur les 3 pairs:

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

On dirait qu'ils ne peuvent pas communiquer entre eux. Avez-vous une idée de l'origine du problème?

J'ai toujours essayé mon étape 4 mais je ne peux pas le déployer à moins que je ne supprime le Host2: peer1 du config.json. Et même alors, je ne peux interroger que depuis Host1: peer0, pas depuis Host1: peer2.

Voici les commandes que j'utilise pour configurer mon réseau:

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

Hôte1: 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

Si vous avez besoin de plus d'informations, n'hésitez pas à demander.

Remarque: je ne suis pas très familier avec docker, toute amélioration/conseil sur la façon dont je l'utilise est la bienvenue:)

11
ecn

J'ai trouvé une solution qui semble fonctionner en utilisant le mode swarm docker .

  1. Initialiser un essaim: ( documentation de l'essaimage docker pour plus d'informations)
  2. Rejoignez l'essaim avec l'autre hôte en tant que gestionnaire
  3. Créer un réseau ("hyp-net" dans mon cas)

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

Changements que j'ai dû faire:

  • Lié les conteneurs avec le paramètre - link docker
  • Ajout du paramètre docker - network (--network = hyp-net)
  • Ajout d'une nouvelle commande d'environnement varialble todocker run utilisée:

    -e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=hyp-net
    

Voici les commandes qui fonctionnent pour moi:

Commandant

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

Avec cela, je suis en mesure de déployer, invoquer et interroger mon code de chaîne.

14
ecn

J'ai pu héberger un réseau de structure hyperledger sur plusieurs machines en utilisant le mode swarm docker. Le mode Swarm fournit un réseau sur plusieurs hôtes/machines pour la communication des composants réseau de la matrice.

Cet article explique le processus de déploiement: il crée un réseau d'essaims et toutes les autres machines rejoignent le réseau. https://medium.com/@wahabjawed/hyperledger-fabric-on-multiple-hosts-a33b08ef24f

Il fonctionne avec Fabric 1.0+

4
Abdul Wahab