byfn环境数据迁移

235 阅读2分钟

byfn区块链网络数据迁移流程

1、 修改挂载路径,挂载到宿主机。
# /gopath/src/github.com/hyperledger/fabric/fabric-samples/first-network/base/docker-compose-base.yaml
vi docker-compose-base.yaml

orderer.example.com:
    container_name: orderer.example.com
        ...
        #- orderer.example.com:/var/hyperledger/production/orderer 
        # 挂载到宿主机
        - ../production/orderer:/var/hyperledger/production/orderer
peer0.org1.example.com:
    container_name: peer0.org1.example.com
		...
        # 挂载到宿主机
        #- peer0.org1.example.com:/var/hyperledger/production/orderer 
        - ../production/peer0.org1.example.com:/var/hyperledger/production
peer0.org2.example.com:
    container_name: peer0.org2.example.com
		...
        # 挂载到宿主机
        - ../production/peer0.org2.example.com:/var/hyperledger/production
peer1.org1.example.com:
    container_name: peer1.org1.example.com
		...
        # 挂载到宿主机
        - ../production/peer1.org1.example.com:/var/hyperledger/production
peer1.org2.example.com:
    container_name: peer1.org2.example.com
		...
        # 挂载到宿主机
        - ../production/peer1.org2.example.com:/var/hyperledger/production

2、 启动byfn网络
sh byfn.sh up
3、 备份peer的账本以及数据库
# 1.停掉相关容器,注意顺序
# 先停掉peer4个容器
docker stop peerContainerId1 peerContainerId2 peerContainerId3 peerContainerId4
# 再停掉orderer1个容器
docker stop ordererContainerId
# 2.备份4个peer的账本以及数据库
cp -r production production_bak
4、 启动容器,恢复网络
# 1.启动停掉的容器,注意顺序
# 先开启orderer1个容器
docker start ordererContainerId
# 再开启peer4个容器
docker start peerContainerId1 peerContainerId2 peerContainerId3 peerContainerId4
5、继续执行交易,制造新数据
# 1. 进入cli容器
docker exec -it cli bash
# 2. 指定证书位置
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
# 3. 调用链码,执行交易
peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
6、 停止容器
# 1.停掉相关容器,注意顺序
# 先停掉peer4个容器
docker stop peerContainerId1 peerContainerId2 peerContainerId3 peerContainerId4
# 再停掉orderer1个容器
docker stop ordererContainerId
7、恢复数据
# 使用原始数据
cp -r production_bak production 

至此数据恢复完成

8、 启动容器,恢复网络
# 1.启动停掉的容器,注意顺序
# 先开启orderer1个容器
docker start ordererContainerId
# 再开启peer4个容器
docker start peerContainerId1 peerContainerId2 peerContainerId3 peerContainerId4

此时,查看账户数据,是原始数据,数据迁移成功

注意事项:

1、要备份4个peer账本的数据,恢复的时候也要恢复4个peer账本,不要只恢复一个

2、cp的时候注意权限,否则出现只能拷贝部分文件的情况,备份失败

3、同时要备份orderer账本否则会使得账本不一致

4、byfn网络要使用同一次网络进行验证,期间不要down和up,否则证书会不一致,会导致恢复网络失败

5、启停容器,注意peer和orderer的顺序。停容器:先peer再orderer;起容器:先orderer再peer

6、不用停止合约的容器,在peer起来之后执行交易会自动拉起对应的合约