Hyperledger Fabric BYFNマルチマシン展開

明らかに、単一マシン展開とマルチマシン展開の違いは、ネットワーク構成、つまり、Dockerコンテナー間の通信方法です。そのため、マルチマシン展開の鍵は、実際にはDockerネットワーク通信です。

HLFをインストールする

5つのサーバー、システムはUbuntu16.04、ssh証明書は、IPがそれぞれ

10.22.1.12 # orderer.example.com, cli
10.22.1.13 # peer0.org1.example.com
10.22.1.14 # peer1.org1.example.com
10.22.1.15 # peer0.org2.example.com
10.22.1.16 # peer1.org2.example.com

特別な指示がない場合、10.22.1.12マシンの/home/myuser/ディレクトリで次のコマンドが実行されます

host.txt動的な変更と他のマシンへの展開を容易にするファイルを作成します。

vim hosts.txt 
10.22.1.12 # orderer.example.com, cli
10.22.1.13 # peer0.org1.example.com
10.22.1.14 # peer1.org1.example.com
10.22.1.15 # peer0.org2.example.com
10.22.1.16 # peer1.org2.example.com

curl、docker、docker-composer、HLFイメージのスクリプト(バージョン1.3、スクリプト内のバージョン番号を他のバージョンに置き換える必要がある場合)をインストールしinstall.shます。最初のパラメーターとしてユーザーパスワードが必要です。

#!/bin/bash
if [ $# -eq 0 ]; then
    echo "please input password..."
    exit 1
fi

cat hosts.txt | while read host
do

echo ' '
echo ' '
echo ' '
echo '################################'
echo '##########' $host '##########'
echo '################################'
echo ' '
echo ' '
echo ' '


ssh myuser@$host  << end


echo $1 | sudo apt install curl -y
sudo -S  apt-get remove docker docker-engine docker.io containerd runc -y
docker -v
sudo apt-get update -y
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

sudo apt-get update -y

sudo apt-get install docker-ce docker-ce-cli containerd.io -y
docker run hello-world
docker -v
if [ $? -ne 0 ]; then
	echo "##################################################"
    echo "some wrong when install docker!"
    echo "##################################################"
    exit 1
fi


echo $1 | sudo -S curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
sudo chmod +x /usr/local/bin/docker-compose
sudo rm /usr/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose -v
if [ $? -ne 0 ]; then
	echo "##################################################"
    echo "some wrong when install docker-compose!"
    echo "##################################################"
    exit 1
fi

curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0

if [ $? -ne 0 ]; then
	echo "##################################################"
    echo "some wrong when pull the images"
    echo "##################################################"
    exit 1
fi

end

done
echo done!

ここで事故がなければ、たとえ構成されていても、/home/myuser/fabric-samples/first-network/ディレクトリーに移動して、インストールが成功したかどうかをテストでき
ます。ネットワークを開始します。

./byfn.sh up

次の出力が表示されれば、インストールは成功しています。

90
===================== Query successful on peer1.org2 on channel 'mychannel' ===================== 

========= All GOOD, BYFN execution completed =========== 


 _____   _   _   ____   
| ____| | \ | | |  _ \  
|  _|   |  \| | | | | | 
| |___  | |\  | | |_| | 
|_____| |_| \_| |____/  


ネットワークをシャットダウンしてクリーンアップします(ネットワークを再起動する前にクリーンアップしてください。クリーンアップしないと、エラーが報告されます)。

./byfn.sh down

Dockerネットワークの構成

hostよりシンプルなモードで展開できるとのことですが、ホストモードを使用すると、チェーンコードのインスタンス化時に常にエラーが報告され、解決策が見つかりませんでしたoverlay

docker swarm init --advertise-addr=10.22.1.12 # 在10.22.1.12上初始化swarm
docker swarm join-token manager # 这里会输出一个命令docker swarm join --token ... ,复制下来,去其他机器上执行
ssh [email protected]
docker swarm join --token ...
ssh [email protected]
docker swarm join --token ...
ssh [email protected]
docker swarm join --token ...
ssh [email protected]
docker swarm join --token ...
# 回到10.22.1.12
docker network create --attachable --driver overlay HLF # 创建一个overlay网络

このとき、Dockerネットワークを確認docker network lsすると、次のようになります。

NETWORK ID          NAME                DRIVER              SCOPE
ntubodu3k0fp        HLF                 overlay             swarm
31158df52877        bridge              bridge              local
54ad61772123        docker_gwbridge     bridge              local
d8b38ea6fbed        host                host                local
rlzokyfpla8r        ingress             overlay             swarm
e97a070185d2        none                null                local

他のマシンでも同様で、自動的に作成されます。

起動ファイルを作成する

では/home/myuser/fabric-samples/first-network、ディレクトリdocker-compose-cli.yaml、ファイル、主に文書に従って変更されます。
このファイルを5つに分割します。1つは注文者とcliを含み、他の4つは4つのピアです。

.
├── base
│   ├── docker-compose-base.yaml
│   └── peer-base.yaml
├── docker-compose-cli.yaml
├── orderer_cli.yaml
├── peer01.yaml
├── peer02.yaml
├── peer11.yaml
└── peer12.yaml

主な変更は、ネットワークを以前に作成したネットワークHLFに変更することですが、externalをtrueに指定することに注意する必要があります。そうしないと、Dockerが自動的にネットワークを再作成します。ここにすべてのファイルがあります:

orderer_cli.yaml:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

volumes:
  orderer.example.com:

networks:
  HLF:
    external: true ## important!!!!!
services:

  orderer.example.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    container_name: orderer.example.com
    #network_mode: overlay
    networks:
      - HLF
   # extra_hosts: 
   #   - "orderer.example.com:10.22.1.12" 
   #   - "peer0.org1.example.com:10.22.1.13"
   #   - "peer1.org1.example.com:10.22.1.14"
   #   - "peer0.org2.example.com:10.22.1.15"
   #   - "peer1.org2.example.com:10.22.1.16"
  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_LOGGING_LEVEL=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    networks:
      - HLF
#    extra_hosts: 
#      - "orderer.example.com:10.22.1.12" 
#      - "peer0.org1.example.com:10.22.1.13"
#      - "peer1.org1.example.com:10.22.1.14"
#      - "peer0.org2.example.com:10.22.1.15"
#      - "peer1.org2.example.com:10.22.1.16"

peer01.yaml:

# Copyright IBM Corp. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

volumes:
  peer0.org1.example.com:


networks:
  HLF:
    external: true
services:

  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org1.example.com
    #network_mode: overlay
    #networks:
    #  - byfn
    networks:
      - HLF

peer02.yaml:

# Copyright IBM Corp. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

volumes:
  peer0.org1.example.com:


networks:
  HLF:
    external: true
services:

  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org1.example.com
    #network_mode: overlay
    #networks:
    #  - byfn
    networks:
      - HLF

peer11.yaml:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

volumes:
  peer0.org2.example.com:


networks:
  HLF:
    external: true

services:

  peer0.org2.example.com:
    container_name: peer0.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org2.example.com
    #network_mode: overlay
    #networks:
    #  - byfn
    networks:
      - HLF
#    extra_hosts: 
#      - "orderer.example.com:10.22.1.12" 
#      - "peer0.org1.example.com:10.22.1.13"
#      - "peer1.org1.example.com:10.22.1.14"
#      - "peer0.org2.example.com:10.22.1.15"
#      - "peer1.org2.example.com:10.22.1.16"


peer12.yaml:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0

version: '2' 
volumes:
  peer1.org2.example.com:

networks:
  HLF:
    external: true

services:

  peer1.org2.example.com:
    container_name: peer1.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org2.example.com
    #network_mode: overlay
   # networks:
   #   - byfn
    networks:
      - HLF
#    extra_hosts: 
#      - "orderer.example.com:10.22.1.12" 
#      - "peer0.org1.example.com:10.22.1.13"
#      - "peer1.org1.example.com:10.22.1.14"
#      - "peer0.org2.example.com:10.22.1.15"
#      - "peer1.org2.example.com:10.22.1.16"

さらに/home/myuser/fabric-samples/first-network、ディレクトリ内の2つのファイルを変更する必要があります

base
├── docker-compose-base.yaml
└── peer-base.yaml

peer-base.yamlの- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn変更は- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=HLFです。
docker-compose-base.yamlのポートマッピング部分:

- 7051:7051
- 7053:7053
- 8051:7051
- 8053:7053
- 9051:7051
- 9053:7053
- 10051:7051
- 10053:7053

に変更

- 7051:7051
- 7053:7053
- 7051:7051
- 7053:7053
- 7051:7051
- 7053:7053
- 7051:7051
- 7053:7053

この変更は完了です。
現時点では、公式のWebサイトコマンドを参照して、証明書ファイルとチャネル構成ファイルを生成できます。スクリプトは次のとおりです。

#!/bin/zsh

cd /home/myuser/fabric-samples/first-network


# clear the old X.509
rm -rf crypto-config
rm -rf channel-artifacts/*

# generate X.509 using the default configuration
cryptogen generate --config=crypto-config.yaml

# tell the tool where to look for the configtx.yaml
export FABRIC_CFG_PATH=$PWD
export CHANNEL_NAME=mychannel

# create the orderer genesisi block
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block  #-channelID $CHANNEL_NAME

# create a channel configuration transaction
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

# define the anchor peer for Org1
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

# define the anchor peer for Org2
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

変更された7つのyamlファイルと証明書crypto-configを、scpを介して対応するマシンに対応する場所に転送します。

実行中

開始スクリプト:./run.sh

#!/bin/bash

peer01=10.22.1.13
peer11=10.22.1.14
peer02=10.22.1.15
peer12=10.22.1.16

cd ~/fabric-samples/first-network
docker-compose -f orderer.yaml up -d

ssh myuser@$peer01 "cd fabric-samples/first-network; docker-compose -f peer01.yml up -d" 
ssh myuser@$peer11 "cd fabric-samples/first-network; docker-compose -f peer11.yml up -d" 
ssh myuser@$peer02 "cd fabric-samples/first-network; docker-compose -f peer02.yml up -d" 
ssh myuser@$peer12 "cd fabric-samples/first-network; docker-compose -f peer12.yml up -d" 

入力してくださいcli容器docker exec -it cli bash

cli容器テストスクリプトで実行:bash scripts/script.sh
以下の出力が示す成功を参照してください。

90
===================== Query successful on peer1.org2 on channel 'mychannel' ===================== 

========= All GOOD, BYFN execution completed =========== 


 _____   _   _   ____   
| ____| | \ | | |  _ \  
|  _|   |  \| | | | | | 
| |___  | |\  | | |_| | 
|_____| |_| \_| |____/  

考えられるエラー

  1. ミラーを引いたら、報告することがありcurl: (56) recv failure: connection reset by peer:意志の変化install.shcurl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0curl -sSL https://bit.ly/2ysbOFE | bash -s 1.3.0
  2. で、cli容器テストスクリプトの実行の時間....、この時間は、ネットワーク接続をチェックして、問題の証明書ファイルかどうかを確認するために、様々な状況であってもよいです
74件のオリジナル記事を公開 11のよう 30,000以上の訪問

おすすめ

転載: blog.csdn.net/yijiull/article/details/103934955