Implementación de múltiples máquinas Hyperledger Fabric BYFN

Obviamente, la diferencia entre la implementación de una sola máquina y la de múltiples máquinas es la configuración de la red, es decir, cómo comunicarse entre los contenedores acoplables, por lo que la clave para la implementación de múltiples máquinas es en realidad la comunicación de la red acoplable.

Instalar HLF

Cinco servidores, el sistema es Ubuntu16.04, el certificado ssh se ha configurado para iniciar sesión, suponiendo que la IP es respectivamente

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

Si no hay instrucciones especiales, los siguientes comandos se ejecutan en 10.22.1.12el /home/myuser/directorio de la máquina .

Cree un host.txtarchivo para facilitar la modificación dinámica y la implementación en otras máquinas:

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

Instale el script de curl, docker, docker-composer, imagen HLF (versión 1.3, si necesita reemplazar el número de versión en el script por otras versiones) install.sh, necesita la contraseña de usuario como primer parámetro:

#!/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!

Si no hay ningún accidente aquí, incluso si está configurado, puede ir al /home/myuser/fabric-samples/first-network/directorio para probar si la instalación se realizó correctamente:
inicie la red:

./byfn.sh up

Si ve el siguiente resultado, la instalación se realizó correctamente:

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

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


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


Apague y limpie la red (recuerde limpiar antes de reiniciar la red; de lo contrario, se informará un error):

./byfn.sh down

Configurar la red de Docker

Se dice que se puede hostimplementar usando el modo, que es mucho más simple, pero cuando uso el modo host, siempre informo un error al crear instancias del chaincode. No encontré una solución, así que usé el overlaymodo.

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网络

En este momento, verifique la red de acopladores docker network ls, será así:

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

Lo mismo es cierto en otras máquinas, se crean automáticamente.

Crea un archivo de inicio

/home/myuser/fabric-samples/first-networkHay un docker-compose-cli.yamlarchivo en el directorio , que se modifica principalmente de acuerdo con este archivo.
Divida este archivo en cinco, uno contiene el orden y el cli, y los otros cuatro son cuatro pares.

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

La modificación principal es modificar la red a la red HLF que creamos anteriormente, pero debe prestar atención a especificar externo como verdadero, de lo contrario, Docker recreará automáticamente una red. Aquí están todos los archivos:

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"

Además /home/myuser/fabric-samples/first-network, se deben modificar dos archivos en el directorio:

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

La - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfnmodificación en peer-base.yaml es - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=HLF.
Parte de mapeo de puertos en docker-compose-base.yaml:

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

Modificado a

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

Esta modificación está completa.
En este momento, puede consultar el comando del sitio web oficial para generar el archivo de certificado y el archivo de configuración del canal. El script es el siguiente:

#!/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

Transfiera los archivos y certificados modificados de 7 yaml crypto-configa la máquina correspondiente a través de scp a la ubicación correspondiente

Corriendo

Iniciar script:./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" 

Ingrese cli容器:docker exec -it cli bash

En cli容器las pruebas realizadas en el guión: bash scripts/script.sh
consulte los siguientes salida muestra un éxito:

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

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


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

Posibles errores

  1. Al tirar el espejo, usted puede reportar curl: (56) recv failure: connection reset by peer: lo hará install.shel curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0cambio curl -sSL https://bit.ly/2ysbOFE | bash -s 1.3.0a
  2. En cli容器el momento de la ejecución del script de prueba puede tener una variedad de circunstancias, esta vez para comprobar la conectividad de red, y luego comprobar si el archivo de certificado en cuestión, ....
74 artículos originales publicados · Me gusta 11 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/yijiull/article/details/103934955
Recomendado
Clasificación