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