docker中的hassio升级_fabric升级教程

前言

简单来说:

  1. 升级二进制文件:orderer,ca,peer;
  2. 升级客户端sdk
  3. 升级kafka集群(可选)

注意,这篇教程仅仅是如何从1.3升级到1.4,不是其他版本到1.4。

在升级前,最好,备份账本和MSPs。然后编译orderer和peer二进制文件。我们将通过cli命令来操作。

我们将使用fabric-samples/first-network来作为示例:

ed613dd641b93aea8f2d383d730eccc6.png

启动fabric 1.3

清除环境:./byfn.sh down

启动网络

git checkout v1.3.0./byfn.sh generate./byfn.sh up -t 3000 -i 1.3.0

结果:

===================== All GOOD, BYFN execution completed =====================

到现在我们已经做好升级的准备了。

如果有错误,请自行检查。

自动升级

获取最新的代码

git fetch origingit checkout v1.4.0

我们可以直接利用fabric-samples提供的脚本直接升级,如下:

# Note, replace '1.4.x' with a specific version, for example '1.4.0'.# Don't pass the image flag '-i 1.4.x' if you prefer to default to 'latest' images../byfn.sh upgrade -i 1.4.x

如果一切没有问题,我们会看到下面的结果:

===================== All GOOD, End-2-End UPGRADE Scenario execution completed =====================

当然,这是自动升级,下面我们来看下如何手动升级。

手动升级

升级Orderer容器

Orderer容器应该用滚动的方式来升级,即每次只升级一个。可以分为以下几步:

  1. 停掉Orderer容器
  2. 备份Orderer的账本和MSP
  3. 使用1.4的Orderer镜像来重启Orderer容器
  4. 验证升级是否成功

具体来说。

  1. 停掉docker容器:
 docker stop orderer.example.comexport LEDGERS_BACKUP=./ledgers-backup# Note, replace '1.4.x' with a specific version, for example '1.4.0'.# Set IMAGE_TAG to 'latest' if you prefer to default to the images tagged 'latest' on your system.export IMAGE_TAG=$(go env GOARCH)-1.4.x

2.备份Orderer的账本和MSP

mkdir -p $LEDGERS_BACKUPdocker cp orderer.example.com:/var/hyperledger/production/orderer/ ./$LEDGERS_BACKUP/orderer.example.com
  1. 使用1.4的Orderer镜像来重启Orderer容器
 docker-compose -f docker-compose-cli.yaml up -d --no-deps orderer.example.com

在示例中,我们使用的是solo模式,但是在生产环境中,我们使用kafka,所以在启动之后,我们最好使用下面的命令来看看是不是可以与其他的orderer进行通信:

 peer channel fetch 

升级Peer容器

Peer容器应该用滚动的方式来升级,即每次只升级一个。可以分为以下几步:

  1. 停掉Peer容器
  2. 备份Peer的账本和MSP
  3. 删除Chaincode容器和镜像
  4. 使用1.4的Peer镜像来重启Peer容器
  5. 验证升级是否成功

具体来说:

  1. 停掉Peer容器
export PEER=peer0.org1.example.com
docker stop $PEER

2.备份Peer的账本和

mkdir -p $LEDGERS_BACKUP

docker cp $PEER:/var/hyperledger/production ./$LEDGERS_BACKUP/$PEER

3.删除Chaincode容器和镜像

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

  1. 使用1.4的Peer镜像来重启Peer容器
docker-compose -f docker-compose-cli.yaml up -d --no-deps $PEER
docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d --no-deps $PEER
  1. 验证升级是否成功在验证之前,需要升级足够的节点来获取足够的背书,但是不同版本的peer也可能进行背书。在验证之前,我们还需要升级cli:docker-compose -f docker-compose-cli.yaml stop cli

    docker-compose -f docker-compose-cli.yaml up -d --no-deps cli也可以指定1.3的版本的cli

couchDB需要使用下面的命令:

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

然后,进去容器cli,设置环境变量,执行链码调用,在此之前,a已经向b转了10元,这次又转了10元,所以a还剩80。

docker exec -it cli bash
CH_NAME=mychannelORDERER_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"]}'
export PEER=peer1.org1.example.comexport PEER=peer0.org2.example.comexport PEER=peer1.org2.example.com

其他

升级kafka集群和zookeeper

新版本的kafka支持旧版本的协议。

升级CouchDB

fabric1.4中支持CouchDB2.0.0了。

  1. 停止CouchDB
  2. 备份数据
  3. 使用v2.0.0的二进制文件或者docker镜像
  4. 重启CouchDB

升级Chaincodes

Upgrade Chaincodes with vendored shim

如果你的Chaincode在vendor里面,你需要升级,或者不需要升级。

结束语

下面我把完整的脚本放在这里,来自fabric-samples:

# Upgrade the network components which are at version 1.3.x to 1.4.x# Stop the orderer and peers, backup the ledger for orderer and peers, cleanup chaincode containers and images# and relaunch the orderer and peers with latest tagfunction upgradeNetwork() { if [[ "$IMAGETAG" == *"1.4"* ]] || [[ $IMAGETAG == "latest" ]]; then docker inspect -f '{{.Config.Volumes}}' orderer.example.com | grep -q '/var/hyperledger/production/orderer' if [ $? -ne 0 ]; then echo "ERROR !!!! This network does not appear to start with fabric-samples >= v1.3.x?" exit 1 fi LEDGERS_BACKUP=./ledgers-backup # create ledger-backup directory mkdir -p $LEDGERS_BACKUP export IMAGE_TAG=$IMAGETAG COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}" if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) fi if [ "${IF_COUCHDB}" == "couchdb" ]; then COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" fi # removing the cli container docker-compose $COMPOSE_FILES stop cli docker-compose $COMPOSE_FILES up -d --no-deps cli echo "Upgrading orderer" docker-compose $COMPOSE_FILES stop orderer.example.com docker cp -a orderer.example.com:/var/hyperledger/production/orderer $LEDGERS_BACKUP/orderer.example.com docker-compose $COMPOSE_FILES up -d --no-deps orderer.example.com for PEER in peer0.org1.example.com peer1.org1.example.com peer0.org2.example.com peer1.org2.example.com; do echo "Upgrading peer $PEER" # Stop the peer and backup its ledger docker-compose $COMPOSE_FILES stop $PEER docker cp -a $PEER:/var/hyperledger/production $LEDGERS_BACKUP/$PEER/ # Remove any old containers and images for this 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 # Start the peer again docker-compose $COMPOSE_FILES up -d --no-deps $PEER done docker exec cli scripts/upgrade_to_v14.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE if [ $? -ne 0 ]; then echo "ERROR !!!! Test failed" exit 1 fi else echo "ERROR !!!! Pass the v1.4.x image tag" fi}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值