Fabric se basa en el método de la ventana acoplable y en el proceso detallado de configuración e implementación de kafka en varias máquinas.
Más tecnología blockchain y clasificación de aplicaciones:
Blockchain applicationBlockchain desarrollo
Ethernet Square | Fabric | BCOS | criptografía | algoritmo de consenso | bitcoin | Otra cadena
Economía de Fichas | Escenarios Financieros tradicional | descentralizada Finanzas | Anti-falsificación de trazabilidad | Intercambio de Datos | Trusted fuerte
Los pasos para construir una red Fabric de kafka multimáquina basada en el modo docker son los siguientes.
Planificación de nodos distribuidos:
node1: kafka1 zookeeper1 orderer1
node2: kafka2 zookeeper2 orderer2 peer1
node3: kafka3 zookeeper3 orderer3 peer2
node4: kafka4 peer3
Configuración de IP de red de cada nodo (vim / etc / hosts)
172.27.34.201 orderer1.trace.com zookeeper1 kafka1
172.27.34.202 orderer2.trace.com zookeeper2 kafka2 peer0.org1.trace.com org1.trace.com
172.27.34.203 orderer3.trace.com zookeeper3 kafka3 peer1.org2.trace.com org2.trace.com
172.27.34.204 kafka4 peer2.org3.trace.com org3.trace.com
Requisitos medioambientales
tela v1.1
Docker (17.06.2-ce o superior)
docker-compose (1.14.0 o superior)
go (1.9.xo superior)
instalación de Docker
Eliminar el instalado previamente
sudo yum remove docker docker-common docker-selinux docker-engine
Instalar algunas dependencias
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Descargue e instale el paquete rpm
sudo yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
ir a actualizar:
rm -rf /usr/local/go/
wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz
Descarga de imágenes de Docker
docker pull registry.docker-cn.com/hyperledger/fabric-peer:x86_64-1.1.0
docker pull registry.docker-cn.com/hyperledger/fabric-orderer:x86_64-1.1.0
docker pull registry.docker-cn.com/hyperledger/fabric-tools:x86_64-1.1.0
docker pull hyperledger/fabric-couchdb
docker pull hyperledger/fabric-ca
docker pull hyperledger/fabric-ccenv
docker pull hyperledger/fabric-baseos
docker pull hyperledger/fabric-kafka
docker pull hyperledger/fabric-zookeeper
Cambiar etiqueta:
docker tag b7bfddf508bc hyperledger/fabric-tools:latest
docker tag ce0c810df36a hyperledger/fabric-orderer:latest
docker tag b023f9be0771 hyperledger/fabric-peer:latest
Eliminar lo mismo:
docker rmi registry.docker-cn.com/hyperledger/fabric-tools:x86_64-1.1.0
docker rmi registry.docker-cn.com/hyperledger/fabric-orderer:x86_64-1.1.0
docker rmi registry.docker-cn.com/hyperledger/fabric-peer:x86_64-1.1.0
Guarde la imagen y envíela a otros nodos:
=> nodo1:
mkdir -p /data/fabric-images-1.1.0-release
docker save 5b31d55f5f3a > /data/fabric-images-1.1.0-release/fabric-ccenv.tar
docker save 1a804ab74f58 > /data/fabric-images-1.1.0-release/fabric-ca.tar
docker save d36da0db87a4 > /data/fabric-images-1.1.0-release/fabric-zookeeper.tar
docker save a3b095201c66 > /data/fabric-images-1.1.0-release/fabric-kafka.tar
docker save f14f97292b4c > /data/fabric-images-1.1.0-release/fabric-couchdb.tar
docker save 75f5fb1a0e0c > /data/fabric-images-1.1.0-release/fabric-baseos.tar
docker save b7bfddf508bc > /data/fabric-images-1.1.0-release/fabric-tools.tar
docker save ce0c810df36a > /data/fabric-images-1.1.0-release/fabric-orderer.tar
docker save b023f9be0771 > /data/fabric-images-1.1.0-release/fabric-peer.tar
docker save b023f9be0771 > /data/fabric-images-1.1.0-release/fabric-peer.tar
docker save b023f9be0771 > /data/fabric-images-1.1.0-release/fabric-peer.tar
cd /data/fabric-images-1.1.0-release
scp -r ./* [email protected]:/tmp/docker/fabric-images/
En nodo2, nodo3, nodo4:
docker load < fabric-baseos.tar
docker tag 75f5fb1a0e0c hyperledger/fabric-baseos:latest
docker load < fabric-ca.tar
docker tag 1a804ab74f58 hyperledger/fabric-ca:latest
docker load < fabric-ccenv.tar
nodo1:
La operación está bajo / trazabilidad Proyecto
Descargue el archivo binario (versión v1.1):
1. Configuración del archivo de configuración:
Genere los archivos de configuración necesarios para el nodo:
./bin/cryptogen generate --config=./crypto-config_kafka.yaml
2. Genere el bloque fundador:
Cambiar parte (dirección del clúster):
Coloque el archivo en / traceabilityProject y luego ejecútelo en este directorio:
(Debe cambiarse el nombre a archivo configtx.yaml)
export FABRIC_CFG_PATH=$PWD
mkdir ./channel-artifacts
./bin/configtxgen -profile TestOrgsOrdererGenesis -outputBlock ./channel-artifacts/orderer.genesis.block
Tres. Genere el archivo de configuración del canal:
./bin/configtxgen -profile TestOrgsChannel -outputCreateChannelTx ./channel-artifacts/tracechannel.tx -channelID tracechannel
4. Entorno de inicio y configuración de archivos
Nota : Dado que la red y los datos desaparecen cada vez que se destruye el contenedor, esto es inaceptable para el entorno de producción, así que considere la persistencia de datos.
Componentes que necesitan conservar los datos: Orderer, Peer, Kafka, zookeeper
Agregue en el archivo de inicio:
Orderer:
environment: - ORDERER_FILELEDGER_LOCATION=/traceabilityProject/orderer/fileLedger volumes: - /traceabilityProject/orderer/fileLedger:/traceabilityProject/orderer/fileLedger
Peer:
environment: - CORE_PEER_FILESYSTEMPATH=/traceabilityProject/peer/production volumes: - /traceabilityProject/peer/production:/traceabilityProject/peer/production
Kafka:
environment: #Kafka数据也要持久化 - KAFKA_LOG.DIRS=/traceabilityProject/kafka/kafka-logs #数据挂载路径 volumes: - /traceabilityProject/kafka/kafka-logs:/traceabilityProject/kafka/kafka-logs
zookeeper:
volumes: #因为zookeeper默认数据存储路径为/data及/datalog - /traceabilityProject/zookeeper1/data:/data - /traceabilityProject/zookeeper1/datalog:/datalog
La configuración detallada se muestra en el siguiente documento yaml
nodo1:
Luego cree tres carpetas kafka, orderer y zookeeper para almacenar datos de forma persistente
docker-compose -f ./node1-docker-compose-up.yaml up -d
Para detener el recipiente, use:
docker-compose -f ./node1-docker-compose-up.yaml down
Nota:
Copie los archivos de configuración correspondientes generados en el directorio de volumen en el archivo de configuración (¡estos directorios no pueden estar vacíos!)
(
El directorio de bloques de genesis necesita montar archivos en lugar de carpetas, pero docker-compose genera carpetas cada vez, cámbielo manualmente al archivo de bloques de genesis:
- ../channel-artifacts/orderer.genesis.block:/traceabilityProject/orderer.genesis.block
)
Copie el directorio de trabajo / traceabilityProject a otros nodos:
scp -r /traceabilityProject/ [email protected]:/
scp -r /traceabilityProject/ [email protected]:/
scp -r /traceabilityProject/ [email protected]:/
nodo2:
Cree cuatro carpetas kafka, orderer, zookeeper, peer para almacenar datos de forma persistente
docker-compose -f ./node2-docker-compose-up.yaml up -d
docker-compose -f ./node2-docker-compose-up.yaml down --remove-orphans
node2-docker-compose-up.yaml
nodo3:
Cree tres carpetas kafka, orderer y peer para almacenar datos de forma persistente
nodo4:
Cree dos carpetas, kafka y peer, para almacenar datos de forma persistente
Nota:
Solo después de que se inicien todos los cuidadores del zoológico y kafka (se inician cuatro archivos al mismo tiempo, habrá un tiempo de espera de retraso), el nodo de pedido no se desactivará.
(De lo contrario, un error:
No se puede publicar el mensaje CONNECT = el disyuntor está abierto)
Operación de nodo cinco.Peer (transacción, canal, código de cadena)
peer1 (nodo2) :
(1) Entrar en el contenedor
docker exec -it cli bash
Compruebe si hay archivos en el directorio de trabajo del contenedor, si no, cópielos manualmente desde el host al contenedor de la ventana acoplable:
(2) Crea un canal
En el contenedor
cd /traceabilityProject/peer/channel-artifacts
peer channel create -o orderer1.trace.com:7050 -c tracechannel -t 50 -f ./tracechannel.tx
(3) Envíe tracechannel.block a otros nodos:
Dado que / traceabilityProject / peer / channel-artifacts es el directorio de montaje del contenedor, el archivo ya existe en la máquina física.
Copiar en dos nodos de pares:
Salga del contenedor e ingrese al directorio de host: / traceabilityProject / channel-artifacts
scp -r tracechannel.block [email protected]:/traceabilityProject/channel-artifacts
scp -r tracechannel.block [email protected]:/traceabilityProject/channel-artifacts
Porque / traceabilityProject / channel-artifacts es el punto de montaje de los volúmenes en el contenedor cli, en el contenedor.
(4) Únase al canal
Ingrese el directorio del contenedor / traceabilityProject / peer / channel-artifacts nuevamente:
peer channel join -b tracechannel.block
(
Instrucción de reinicio completa:
docker-compose -f node1-docker-compose-up.yaml down --volumes --remove-orphans docker volume prune
)
(Incluso si el nodo de anclaje no está configurado, toda la red Fabric aún puede funcionar normalmente)
(5) Instale el código de la cadena
peer chaincode install -n cc_producer -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/tireTraceability-Demo/main/
(6) Inicialización
peer chaincode instantiate -o orderer1.trace.com:7050 -C tracechannel -n cc_producer -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member','Org2MSP.member','Org3MSP.member')"
pee2 (nodo3):
docker exec -it cli bash
cd channel-artifacts/
peer channel join -b tracechannel.block
peer chaincode install -n cc_agency -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/traceability/src/origin_agency/main/
peer chaincode instantiate -o orderer1.trace.com:7050 -C tracechannel -n cc_agency -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member','Org2MSP.member','Org3MSP.member')"
peer3 (nodo4):
docker exec -it cli bash
cd channel-artifacts/
peer channel join -b tracechannel.block
peer chaincode install -n cc_producer -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/traceability/src/origin_producer/main/
peer chaincode install -n cc_agency -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/traceability/src/origin_agency/main/
peer chaincode install -n cc_retailer -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/traceability/src/origin_retailer/main/
peer chaincode instantiate -o orderer1.trace.com:7050 -C tracechannel -n cc_retailer -v 1.0 -c '{"Args":["init","A","B","C"]}' -P "OR ('Org1MSP.member','Org2MSP.member','Org3MSP.member')"
(Cada vez que reinicia el contenedor, debe realizar el proceso nuevamente, agregar canal, instalar e instalar tres códigos de cadena en el minorista, pero solo inicializar cc_retailer)
Instrucción de reinicio completa:
docker-compose -f node1-docker-compose-up.yaml down --volumes --remove-orphans
docker-compose -f node2-docker-compose-up.yaml down --volumes --remove-orphans
docker-compose -f node3-docker-compose-up.yaml down --volumes --remove-orphans
docker-compose -f node4-docker-compose-up.yaml down --volumes --remove-orphans docker volume prune
Y borra datos persistentes
rm -rf kafka/* orderer/* zookeeper1/*
rm -rf kafka/* orderer/* peer/* zookeeper2/*
rm -rf kafka/* orderer/* peer/* zookeeper3/*
rm -rf kafka/* peer/*
Al cerrar el contenedor antes de apagarlo:
docker-compose -f /traceabilityProject/startup/node1-docker-compose-up.yaml down
docker-compose -f /traceabilityProject/startup/node2-docker-compose-up.yaml down
docker-compose -f /traceabilityProject/startup/node3-docker-compose-up.yaml down
docker-compose -f /traceabilityProject/startup/node4-docker-compose-up.yaml down
Enlace original: Implementación de Kafka de múltiples máquinas de Fabric (modo acoplable)