Hyperledger Composer Couchdb 未在所有对等点上复制
Hyperledger Composer Couchdb not replicating on all peers
我有如下 hyperledger composer 网络设置:
- 系统 1 上的订购者、CA、Peer1 (couchdb1)、Peer2 (couchdb2)
- 系统 2 上的对等点 3 (couchdb3)
所有 Peer 都订阅了一个公共频道 (composerchannel)。我在主网站的教程部分创建了一个示例应用程序(教程网络)并将其安装在网络上。
当我浏览 couchdb1 时,我可以看到一个名为 "composerchannel_tutorial-network" 的数据库用于我导入的应用程序。我通过 REST 界面添加了几个参与者,他们也出现在 couchdb1 中。
问题是当我查看 couchdb2 和 couchdb3 实例时,我没有在它们上看到数据库 "composerchannel_tutorial-network"。我相信,由于所有这些对等点都订阅了一个频道,它应该会自动在所有对等点上复制这个数据库。
我在 Peer2 docker 日志中看到以下错误
unable to get chaincode data from ledger for tx due to lscc's state for [tutorial-network] not found
我在 Peer3 docker 日志(外部系统)中看到以下错误
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
看到
我认为 "composer network install" 和 "composer network start" 应该处理网络上订阅频道的所有对等点。
我更新了 ./startFabric.sh 以便 Peer1 加入频道 "composerchannel"。 None 以下命令显示任何错误。
以下是我遵循的步骤:
./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
谁能告诉我哪里出了问题?
Chaincode 需要安装在所有背书节点上。 Composer network install 将在您组织中的所有背书节点上安装链代码,这些节点是连接配置文件定义的通道的一部分。因此,如果您有多个组织,则需要为每个组织执行安装。
我还会检查已建立的与每个对等点的正确 couchdb 通信的对等点日志,并检查在将每个对等点加入通道时是否收到成功消息。
这是我的 docker-compose 文件,用于同一组织中的 2 个具有他们自己的 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 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
因为我认为这是一个非常愚蠢的错误!我的其他对等节点的结构版本为 1.0.4,而第一个对等节点的结构版本为 1.1.0。将 Peer2 结构版本更新到 1.1.0 使其工作起来非常棒!!
感谢@david_k 的所有回答和指导!非常感谢。
我有如下 hyperledger composer 网络设置:
- 系统 1 上的订购者、CA、Peer1 (couchdb1)、Peer2 (couchdb2)
- 系统 2 上的对等点 3 (couchdb3)
所有 Peer 都订阅了一个公共频道 (composerchannel)。我在主网站的教程部分创建了一个示例应用程序(教程网络)并将其安装在网络上。
当我浏览 couchdb1 时,我可以看到一个名为 "composerchannel_tutorial-network" 的数据库用于我导入的应用程序。我通过 REST 界面添加了几个参与者,他们也出现在 couchdb1 中。
问题是当我查看 couchdb2 和 couchdb3 实例时,我没有在它们上看到数据库 "composerchannel_tutorial-network"。我相信,由于所有这些对等点都订阅了一个频道,它应该会自动在所有对等点上复制这个数据库。
我在 Peer2 docker 日志中看到以下错误
unable to get chaincode data from ledger for tx due to lscc's state for [tutorial-network] not found
我在 Peer3 docker 日志(外部系统)中看到以下错误
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
看到我认为 "composer network install" 和 "composer network start" 应该处理网络上订阅频道的所有对等点。
我更新了 ./startFabric.sh 以便 Peer1 加入频道 "composerchannel"。 None 以下命令显示任何错误。
以下是我遵循的步骤:
./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
谁能告诉我哪里出了问题?
Chaincode 需要安装在所有背书节点上。 Composer network install 将在您组织中的所有背书节点上安装链代码,这些节点是连接配置文件定义的通道的一部分。因此,如果您有多个组织,则需要为每个组织执行安装。 我还会检查已建立的与每个对等点的正确 couchdb 通信的对等点日志,并检查在将每个对等点加入通道时是否收到成功消息。
这是我的 docker-compose 文件,用于同一组织中的 2 个具有他们自己的 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 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
因为我认为这是一个非常愚蠢的错误!我的其他对等节点的结构版本为 1.0.4,而第一个对等节点的结构版本为 1.1.0。将 Peer2 结构版本更新到 1.1.0 使其工作起来非常棒!!
感谢@david_k 的所有回答和指导!非常感谢。