hyperledger的1.2版本更新到1.3.0版本

1. 切换到1.2.0版本
./byfn.sh down

git fetch origin

git checkout v1.2.0

./byfn.sh generate

./byfn.sh up -t 3000 -i 1.2.0

如果BYFN正确启动,你会看到:

===================== All GOOD, BYFN execution completed =====================
2. 获取样本的v1.3.x版本
git fetch origin

git checkout v1.3.x

运行脚本进行升级

./byfn.sh upgrade -i 1.3.x

如果升级成功,您应该看到以下内容:

===================== All GOOD, End-2-End UPGRADE Scenario execution completed =====================
手动升级
1. 删除已有的网络
./byfn.sh down

这一步主要是docker-compose down 所有的yaml文件。因为在示例中,docker-compose-cli.yaml 起了6个docker容器:

orderer.example.com:
peer0.org1.example.com:
peer1.org1.example.com:
peer0.org2.example.com:
peer1.org2.example.com:
cli

所以在自己的项目中要down所有stack的容器:

docker-compose -f docker-compose-peer.yaml -f docker-compose-order.yaml -f docker-compose-cli.yaml  down --volumes --remove-orphans
2. 升级orderer容器

停止orderer容器,并且备份账本

docker stop orderer.example.com
export LEDGERS_BACKUP=./ledgers-backup
export IMAGE_TAG=$(go env GOARCH)-1.3.x-stable

mkdir -p $LEDGERS_BACKUP
docker cp orderer.example.com:/var/hyperledger/production/orderer/ ./$LEDGERS_BACKUP/orderer.example.com

用新镜像下载并重新启动订购者,示例中:

docker-compose -f docker-compose-cli.yaml up -d --no-deps orderer.example.com

在利用Kafka的生产网络中,最好的做法是 在重新启动订货人后验证是否已赶上其他订货人。peer channel fetch <blocknumber>

3. 升级对等容器

我们的网络中有四个同行。我们将为每个对等方执行一次此过程,总共进行四次升级。

关闭第一个对等体:

export PEER=peer0.org1.example.com

docker stop $PEER

备份对等的分类帐和MSP:

mkdir -p $LEDGERS_BACKUP
docker cp $PEER:/var/hyperledger/production ./$LEDGERS_BACKUP/$PEER

在对等体停止并备份分类帐的情况下,删除对等链代码容器:

CC_CONTAINERS=$(docker ps | grep dev-$PEER | awk '{print $1}')
if [ -n "$CC_CONTAINERS" ] ; then docker rm -f $CC_CONTAINERS ; fi

删除对等链代码图像:

CC_IMAGES=$(docker images | grep dev-$PEER | awk '{print $1}')
if [ -n "$CC_IMAGES" ] ; then docker rmi -f $CC_IMAGES ; fi

使用v1.3镜像重新启动对等体:

docker-compose -f docker-compose-cli.yaml up -d --no-deps $PEER

使用couchDB执行以下指令:

docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d --no-deps $PEER

您无需重新启动链代码容器。当对等方获得链代码请求(调用或查询)时,它首先检查它是否有运行该链代码的副本。如果是这样,它就会使用它。否则,就像在这种情况下,对等体启动链码(如果需要,重建图像)

4. 验证对等升级完成

在我们进入CLI容器并发出调用之前,请确保通过发出以下命令将CLI更新为最新版本:

docker-compose -f docker-compose-cli.yaml stop cli
docker-compose -f docker-compose-cli.yaml up -d --no-deps cli

如果您特别需要CLI的v1.3版本,请发出:

IMAGE_TAG=$(go env GOARCH)-1.3.x-stable docker-compose -f docker-compose-cli.yaml up -d --no-deps cli

获得所需的CLI版本后,进入CLI容器:

docker exec -it cli bash

现在,您需要设置两个环境变量 - 通道名称和名称ORDERER_CA:

CH_NAME=mychannel

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

现在您可以发出调用:

peer chaincode invoke -o orderer.example.com:7050 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --tls --cafile $ORDERER_CA  -C $CH_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

查询:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

我们应该看到以下内容:

Query Result: 80

results matching ""

    No results matching ""