fabric数据持久化

76 篇文章 50 订阅 ¥19.90 ¥99.00
本文档介绍了在fabric多机kafka部署中遇到的数据丢失问题及其解决方案。为确保生产环境的数据安全,遵循fabric官方教程,通过修改peer和couch容器配置实现数据备份到本地。然而,仅备份peer和couch数据会导致invoke失败,因为缺少kafka数据的持久化。通过备份kafka的日志,并在本地创建相应目录,最终实现了完整的数据持久化,确保即使容器销毁,query和invoke操作也能正常进行。
摘要由CSDN通过智能技术生成

背景

fabric多机kafka部署完毕,但是每次容器销毁后,网络和数据就都不存在了。对于生产环境来说,这是无法接受的,所以就要考虑数据持久化的问题了。

方案

综合fabric官方教程(https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html#a-note-on-data-persistence),思路如下:

  1. 在peer容器的配置文件中添加如下命令:
volumes:
 - /var/hyperledger/peer0:/var/hyperledger/production
  1. 在couch容器的配置中添加如下命令:
volumes:
 - /var/hyperledger/couchdb0:/opt/couchdb/data

注意:/var/hyperledger/peer*/var/hyperledger/couchdb*要在本地手动创建

执行./scripts/script.sh mychannel,结果发现peer和couch容器中的数据的确备份到了本地目录。将所有容器销毁重新启动(启动后不执行./scripts/script.sh mychannel),然后执行query和peer(此处我是使用sdk执行两种命令),结果发现query成功,但是invoke失败了。提示错误如下:

Need to retry because process failed = kafka server: The requested offset is outside the range of offsets maintained by the server for the given topic/partition.

执行docker logs orderer0.example.com打印orderer日志,发现如下错误:

The requested offset is outside the range of offsets maintained by the server for the given topic/partition.

在网上搜罗一番后,发现一篇博客中提到过fabric数据持久化(http://www.solutionscan.org/42524-docker)。问题主要是没有将kafka的相关数据备份到本地,故操作如下:

  1. 在kafka配置文件中添加如下命令:
     environment:
       - KAFKA_LOG.DIRS=/opt/kafka/kafka-logs
     volumes:
       - /var/hyperledger/kafka/kafka-logs:/opt/kafka/kafka-logs

注意:/var/hyperledger/kafka/kafka-logs目录要在本地先创建

然后将所有容器全部销毁,删除本地/var/hyperledger目录下的数据(我是将该目录全部删除,然后重新创建),启动所有容器,然后执行./scripts/script.sh mychannel(kafka数据之前没有备份,所以需要重头来过);执行invoke和query命令都正常。销毁并重启所有容器,不执行./scripts/script.sh mychannel,在sdk中执行query和invoke完全正常。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值