Hyperledger Composer Couchdb не реплицируется на всех пиров - PullRequest
0 голосов
/ 08 мая 2018

У меня есть настройка сети hyperledger composer следующим образом:

  • Заказчик, CA, Peer1 (couchdb1), Peer2 (couchdb2) в Системе 1
  • Peer 3 (couchdb3) в Системе 2

Все одноранговые узлы подписаны на общий канал (composerchannel). Я создаю образец приложения (tutorial-network), представленный в разделе учебных материалов основного веб-сайта, и устанавливаю его в сети.

Когда я просматриваю couchdb1, я вижу базу данных с именем "composerchannel_tutorial-network" для моего импортированного приложения. Я добавил пару участников через интерфейс REST, и они тоже появляются в couchdb1.

Проблема в том, что когда я смотрю на экземпляр couchdb2 и couchdb3, я не вижу в них базы данных "composerchannel_tutorial-network". Я считаю, что поскольку все эти одноранговые узлы подписаны на один канал, он должен автоматически реплицировать эту базу данных на все одноранговые узлы.

Я вижу следующую ошибку в моих журналах докера Peer2

unable to get chaincode data from ledger for tx due to lscc's state for [tutorial-network] not found

Я вижу следующую ошибку в моих журналах докера Peer3 (внешняя система)

error getting chaincode tutorial-network on channel: composerchannel (err: could not find chaincode with name 'tutorial-network')

Журнал контейнера Peer1 можно увидеть на https://www.dropbox.com/s/8ylqssm0bxz3x51/peer1.log?dl=0

Я думаю, что "установка сети композитора" и "запуск сети композитора" должны обрабатывать все одноранговые узлы в сети, подписанные на канал.

Я обновил ./startFabric.sh, чтобы Peer1 присоединился к каналу "composerchannel". Ни одна из приведенных ниже команд не отображает ошибок.

Вот шаги, за которыми я следую:

./startFabric.sh
./createPeerAdminCard.sh

composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna

composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card

composer card import --file networkadmin.card

composer network ping --card admin@tutorial-network

composer-rest-server

Может кто-нибудь пожалуйста посоветовать, что может быть не так?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Как я считал, это была очень глупая ошибка! У меня была версия ткани 1.0.4 для моего дополнительного пира, и для моего первого пира это была 1.1.0. Обновление версии ткани Peer2 до 1.1.0 сделало его работоспособным !!

Спасибо @david_k за все ваши ответы и рекомендации! Очень ценю это.

0 голосов
/ 19 мая 2018

Цепной код должен быть установлен на всех подтверждающих одноранговых узлах. Сетевая установка Composer установит цепной код на всех подтверждающих одноранговых узлах, которые находятся в вашей организации и являются частью канала, как определено профилем соединения. Поэтому, если у вас несколько организаций, вам необходимо выполнить установку для каждой организации. Я также проверил бы в журналах одноранговых узлов, которые передаются на правильный couchdb для каждого установленного узла, плюс проверял бы, что вы получаете успешные сообщения, когда присоединяете каждого однорангового узла к каналу.

Вот мой файл docker-compose для двух пиров в одной организации с их собственными экземплярами couchdb. Я вижу, что оба экземпляра couchdb создают и используют данные из своих журналов


version: '2'

services:
  ca.org1.example.com:
    image: hyperledger/fabric-ca:$ARCH-1.1.0
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com

    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/19ab65abbb04807dad12e4c0a9aaa6649e70868e3abd0217a322d89e47e1a6ae_sk -b admin:adminpw -d'
    volumes:
      - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
    container_name: ca.org1.example.com

  orderer.example.com:
    container_name: orderer.example.com
    image: hyperledger/fabric-orderer:$ARCH-1.1.0
    environment:
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/composer-genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/msp/orderer/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    ports:
      - 7050:7050
    volumes:
        - ./:/etc/hyperledger/configtx
        - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/etc/hyperledger/msp/orderer/msp

  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    image: hyperledger/fabric-peer:$ARCH-1.1.0
    environment:
      - CORE_LOGGING_LEVEL=debug
      - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_PEER_ID=peer0.org1.example.com
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=composer_default
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/peer/msp
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 7051:7051
      - 7053:7053
    volumes:
        - /var/run/:/host/var/run/
        - ./:/etc/hyperledger/configtx
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/peer/msp
        - ./crypto-config/peerOrganizations/org1.example.com/users:/etc/hyperledger/msp/users
    depends_on:
      - orderer.example.com
      - couchdb

  couchdb:
    container_name: couchdb
    image: hyperledger/fabric-couchdb:$ARCH-0.4.6
    ports:
      - 5984:5984
    environment:
      DB_URL: http://localhost:5984/member_db

  peer1.org1.example.com:
    container_name: peer1.org1.example.com
    image: hyperledger/fabric-peer:$ARCH-1.1.0
    environment:
      - CORE_LOGGING_LEVEL=debug
      - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_PEER_ID=peer1.org1.example.com
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=composer_default
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/peer/msp
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 8051:7051
      - 8053:7053
    volumes:
        - /var/run/:/host/var/run/
        - ./:/etc/hyperledger/configtx
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/peer/msp
        - ./crypto-config/peerOrganizations/org1.example.com/users:/etc/hyperledger/msp/users
    depends_on:
      - orderer.example.com
      - couchdb2

  couchdb2:
    container_name: couchdb2
    image: hyperledger/fabric-couchdb:$ARCH-0.4.6
    ports:
      - 6984:5984
    environment:
      DB_URL: http://localhost:5984/member_db

startFabric.sh


#!/bin/bash

# Exit on first error, print all commands.
set -e

Usage() {
    echo ""
    echo "Usage: ./startFabric.sh [-d || --dev]"
    echo ""
    echo "Options:"
    echo -e "\t-d or --dev: (Optional) enable fabric development mode"
    echo ""
    echo "Example: ./startFabric.sh"
    echo ""
    exit 1
}

Parse_Arguments() {
    while [ $# -gt 0 ]; do
        case $1 in
            --help)
                HELPINFO=true
                ;;
            --dev | -d)
                FABRIC_DEV_MODE=true
                ;;
        esac
        shift
    done
}

Parse_Arguments $@

if [ "${HELPINFO}" == "true" ]; then
    Usage
fi

#Detect architecture
ARCH=`uname -m`

# Grab the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ "${FABRIC_DEV_MODE}" == "true" ]; then
    DOCKER_FILE="${DIR}"/composer/docker-compose-dev.yml
else
    DOCKER_FILE="${DIR}"/composer/docker-compose.yml
fi

ARCH=$ARCH docker-compose -f "${DOCKER_FILE}" down
ARCH=$ARCH docker-compose -f "${DOCKER_FILE}" up -d

# wait for Hyperledger Fabric to start
# incase of errors when running later commands, issue export FABRIC_START_TIMEOUT=
echo "sleeping for ${FABRIC_START_TIMEOUT} seconds to wait for fabric to complete start up"
sleep ${FABRIC_START_TIMEOUT}

# Create the channel
docker exec peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c composerchannel -f /etc/hyperledger/configtx/composer-channel.tx

# Join peer0.org1.example.com to the channel.
docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b composerchannel.block

echo fetching block
docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel fetch config -o orderer.example.com:7050 -c composerchannel composerchannel.block

echo joining peer1
# Join peer1.org1.example.com to the channel.
docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel join -b composerchannel.block

if [ "${FABRIC_DEV_MODE}" == "true" ]; then
    echo "Fabric Network started in chaincode development mode"
fi
...