fabric數據持久化:在fabric部署區塊鏈網絡完成後,每次容器docker一銷燬,之前區塊鏈網絡上的所有數據也隨之銷燬。數據持久化實現了docker關閉後數據的恢復功能。
因爲單機比較容易測試,先記錄單機多節點kafka模式下的數據持久化操作步驟,簡而言之就是,每個容器的數據都要映射到物理機。
參考了https://www.cnblogs.com/willaty/p/10077531.html這篇博文
測試用例是fabric自帶的e2e_cli
對docker-compose文件操作:
1. 在zookeeper相關配置中添加:
volumes: - /var/hyperledger/zk${num}/data:/data - /var/hyperledger/zk${num}/datalog:/datalog
其中,/var/hyperledger/zk2/datalog是物理機中真實存在的目錄
2. 在kafka相關配置中添加:
volumes: - /var/hyperledger/kafka/kafka-logs0:/tmp/kafka-logs
3.orderer
volumes: - /var/hyperledger/orderer:/var/hyperledger/production
4. peer:
volumes: - /var/hyperledger/peer${num}:/var/hyperledger/production
5.couchdb:
volumes: - /var/hyperledger/couchdb1:/opt/couchdb/data
測試過程如下:
1. 正常啓動區塊鏈網絡:
./generateArtifacts.sh mychannel
sudo docker-compose -f docker-compose-cli.yaml up -d
sudo docker exec -it cli bash
./scripts/script.sh mychannel
2.執行invoke、query操作
3.查看/var/hyperledger文件,確實有備份的容器數據
4.關閉docker容器
sudo docker rm -f $(sudo docker ps -aq)
注意: 不需要把channel-artifacts和crypto-config兩個文件也刪掉
5.重啓docker
sudo docker -compose -f docker-compose-cli.yaml up -d
6.進入容器
sudo docker exec -it cli bash
7.直接進行invoke,query操作,發現可行。也就是跳過了鏈碼安裝、部署、實例化等等操作
8.測試完成。