O Fabric é baseado no método docker e no processo detalhado de configuração e implantação kafka de várias máquinas.
Mais tecnologia de blockchain e classificação de aplicativos:
Blockchain applicationBlockchain development
Ethernet Square | Tecido | BCOS | criptografia | algoritmo de consenso | bitcoin | Outra cadeia
Economia de token | Cenários financeiros tradicionais | Finanças descentralizadas | Rastreabilidade antifalsificação | Compartilhamento de dados | Depósito confiável
As etapas para construir uma rede de malha de kafka de várias máquinas com base no modo docker são as seguintes.
Planejamento de nó distribuído:
node1: kafka1 zookeeper1 orderer1
node2: kafka2 zookeeper2 orderer2 peer1
node3: kafka3 zookeeper3 orderer3 peer2
node4: kafka4 peer3
Configuração de rede IP de cada nó (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
Requerimentos ambientais
tecido v1.1
docker (17.06.2-ce ou superior)
docker-compose (1.14.0 ou superior)
go (1.9.x ou superior)
instalação docker
Remova o instalado anteriormente
sudo yum remove docker docker-common docker-selinux docker-engine
Instale algumas dependências
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Baixe e instale o pacote 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
vá atualizar:
rm -rf /usr/local/go/
wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz
Download da imagem do 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
Alterar rótulo:
docker tag b7bfddf508bc hyperledger/fabric-tools:latest
docker tag ce0c810df36a hyperledger/fabric-orderer:latest
docker tag b023f9be0771 hyperledger/fabric-peer:latest
Exclua o mesmo:
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
Salve a imagem e envie para outros nós:
=> node1:
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/
Em node2, node3, node4:
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
node1 :
A operação está sob / rastreabilidade do Projeto
Baixe o arquivo binário (versão v1.1):
1. Definições do arquivo de configuração:
Gere os arquivos de configuração necessários para o nó:
./bin/cryptogen generate --config=./crypto-config_kafka.yaml
2. Gere o bloco de fundação:
Parte da mudança (endereço do cluster):
Coloque o arquivo em / traceabilityProject e execute-o neste diretório:
(Deve ser renomeado para arquivo configtx.yaml)
export FABRIC_CFG_PATH=$PWD
mkdir ./channel-artifacts
./bin/configtxgen -profile TestOrgsOrdererGenesis -outputBlock ./channel-artifacts/orderer.genesis.block
Três. Gere o arquivo de configuração do canal:
./bin/configtxgen -profile TestOrgsChannel -outputCreateChannelTx ./channel-artifacts/tracechannel.tx -channelID tracechannel
4. Ambiente de inicialização e configuração de arquivo
Observação : como a rede e os dados desaparecem sempre que o contêiner é destruído, isso é inaceitável para o ambiente de produção, portanto, considere a persistência dos dados.
Componentes que precisam persistir dados: Orderer, Peer, Kafka, zookeeper
Adicione no arquivo de inicialização:
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
A configuração detalhada é mostrada no seguinte documento yaml
node1:
Em seguida, crie três pastas kafka, orderer e zookeeper para armazenar dados de forma persistente
docker-compose -f ./node1-docker-compose-up.yaml up -d
Para parar o recipiente, use:
docker-compose -f ./node1-docker-compose-up.yaml down
Nota:
Copie os arquivos de configuração correspondentes gerados no diretório de volume no arquivo de configuração (esses diretórios não podem estar vazios!)
(
O diretório do bloco genesis deve montar arquivos em vez de pastas, mas docker-compose gera pastas todas as vezes, altere-o manualmente para o arquivo de bloco genesis:
- ../channel-artifacts/orderer.genesis.block:/traceabilityProject/orderer.genesis.block
)
Copie o diretório de trabalho / traceabilityProject para outros nós:
scp -r /traceabilityProject/ [email protected]:/
scp -r /traceabilityProject/ [email protected]:/
scp -r /traceabilityProject/ [email protected]:/
node2 :
Crie quatro pastas kafka, ordenador, zookeeper e par para armazenar dados 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
node3 :
Crie três pastas kafka, orderer e peer para armazenar dados de forma persistente
node4 :
Crie duas pastas, kafka e peer, para armazenar dados de forma persistente
Nota:
Somente depois que todos os zookeeper e kafka forem iniciados (quatro arquivos são iniciados ao mesmo tempo, haverá algum atraso e tempo de espera), o nó do ordenador não será desativado.
(Caso contrário, um erro:
Não é possível postar mensagem CONNECT = disjuntor está aberto)
Five.Peer node operation (transação, canal, código de cadeia)
peer1 (node2) :
(1) Entre no container
docker exec -it cli bash
Verifique se há arquivos no diretório de trabalho do contêiner, caso contrário, copie-os manualmente do host para o contêiner do docker:
(2) Criar um canal
No container
cd /traceabilityProject/peer/channel-artifacts
peer channel create -o orderer1.trace.com:7050 -c tracechannel -t 50 -f ./tracechannel.tx
(3) Envie tracechannel.block para outros nós:
Como / traceabilityProject / peer / channel-artifacts é o diretório de montagem do contêiner, o arquivo já existe na máquina física.
Copie para dois nós de mesmo nível:
Saia do contêiner e entre no diretório do 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 é o ponto de montagem de volumes no contêiner cli, no contêiner.
(4) Junte-se ao canal
Insira o diretório do contêiner / traceabilityProject / peer / channel-artifacts novamente:
peer channel join -b tracechannel.block
(
Instruções de reinicialização completas:
docker-compose -f node1-docker-compose-up.yaml down --volumes --remove-orphans docker volume prune
)
(Mesmo se o nó âncora não estiver definido, toda a rede Fabric ainda pode operar normalmente)
(5) Instale o código de corrente
peer chaincode install -n cc_producer -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/tireTraceability-Demo/main/
(6) Inicialização
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 (nó3):
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 (node4):
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 você reiniciar o contêiner, você precisa passar pelo processo novamente, adicionar canal, instalar e instalar três códigos de cadeia no varejista, mas inicializar apenas cc_retailer)
Instruções de reinicialização completas:
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
E exclua os dados persistentes
rm -rf kafka/* orderer/* zookeeper1/*
rm -rf kafka/* orderer/* peer/* zookeeper2/*
rm -rf kafka/* orderer/* peer/* zookeeper3/*
rm -rf kafka/* peer/*
Ao fechar o contêiner antes de encerrar:
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
Link original: implantação do Fabric multi-machine kafka (modo docker)