Hyperledger Fabric节点服务器对存储空间的消耗还是比较大的,在我实际生产体验的过程中,每一条请求数据大概仅2K左右,但实际占用空间远不止这点,每个节点都会对Block及链进行保存维护,也会将数据解析存储在本地,基本上1000万条数据会占用500G左右的空间。当然,这个仅供参考,不同的业务可能会略有差距。

我所负责的业务需要在联盟链搭建初期就导入巨量的数据,这个需求本就有些违背区块链的设计原则,已经把它当成一个数据库来使用了,这样庞大的业务量在实际处理过程中也遇到很多的麻烦,最明显的就是服务器性能的各种瓶颈,还要控制请求的次数和频率。

一般情况下,不会出现大批量导数的时候,节点服务器采用8C8G1T的配置足够用很久了,我这边因为业务原因,服务器采用16C16G3T,内存是绰绰有余,8G甚至4G也能满足没问题,但CPU就明显不足,这个官方也没有给出一个建议配置,只能自己摸索。

在一些网络博文中可以找到一些官方资料的线索,比如Hyperledger Fabric 1.0的目标是支持1000TPS,且实验室数据已经达到300~400TPS了。这些文章没有明确到底是节点服务器还是排序服务器广播的值,在实际操作中一台16C16G的服务器完全没有达到文档中所说的那样,节点服务器大约在50~70之间,排序服务器广播的在60~80之间,这可能是自己没完全摸清楚Hyperledger Fabric性能优化这一块。

日常使用最低配置建议:

服务器类型 建议配置 备注
zookeeper 4C+4G+500G 磁盘有扩容需求
kafka 4C+4G+500G 磁盘有扩容需求
orderer 8C+4G+500G 磁盘有扩容需求
peer 4C+4G+3T 磁盘有扩容需求,如大批量数据导入,则cpu提前做好扩容

如果存在大批量数据导入的情况,orderer和peer的配置建议均高于16C+16G,以免数据导入过程中容器down掉从而导致数据丢失的情况发生。

接着说下Fabric容器的问题,因为区块链的项目才开始接触容器的概念,在使用的时候对目录存储这块有所了解。

在将HyperLedger Fabric项目部署到生产之前,需要先将其存储根目录做下调整,以免日后遇到存储目录磁盘充满的情况。

HyperLedger Fabric使用的是Docker容器,默认的挂载路径是/var/lib/docker,这个是挂载在磁盘第一目录下,即如果不做修改,今后备份、搬迁及扩容等都是大问题。

这里有两个比较简洁的解决方案:

一:服务器配置之初安装docker时就指定其在额外挂载磁盘中。

这个意思很简单,即新挂载磁盘到linux的data目录下,docker容器就安装到该目录下,docker的卷宗文件也会在安装时指定位置,如/data/docker/docker,通过docker info命令即可查看,即下图所示:

二:通过修改docker配置文件来指定其卷宗文件存储目录。

这一步需要修改一个名为daemon.json的文件内容,该文件位于/etc/docker/目录下

具体步骤如下:

编辑或新建daemon文件

sudo vim /etc/docker/daemon.json

在该文件中指定docker的存储根目录

 {
"graph": "/data/docker/docker"
}

执行docker重新加载当前配置信息

sudo systemctl daemon-reload

重启docker服务

sudo systemctl restart docker.service

至此,我们再次执行

docker info

来查看docker的存储目录位置,此时结果应该已经如第一种方法中的图示一样。

当然,该方法需要在部署生产之前就做好,切勿临时变更。

Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置的更多相关文章

  1. Docker(十七)-修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  2. 【解决】修改 docker 容器时间与宿主机不同

    修改 docker 容器时间 需求: 这几天,开发提了个需求 "测试需要模拟未来某天的业务,发现容器里面没有修改时间的权限",想在我们 k8s 集群上,调整容器时间 解决方案: 使 ...

  3. 修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  4. Docker(33)- 如何修改 docker 容器的端口映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

  5. Docker(34)- 如何修改 docker 容器的目录映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

  6. 修改 Docker容器 自动启动/不自动启动,挂载路径,存储位置

    有时候创建容器时忘了添加参数 --restart=always,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker conta ...

  7. 解决docker容器中文乱码,修改docker容器编码格式

    前台上传文件到服务器后,服务器返回给前台的文件列表中出现中文乱码,所有的中文文件名全部变成?,英文文件名则正常显示. 问题经过定位,发现后台代码的multipartfile类在执行transterto ...

  8. 修改docker容器的端口映射

    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...

  9. 修改Docker容器的时间和宿主时间一致

    在查看容器的日志的,发现时间有和宿主主机时间相差有8个小时,而且宿主主机使用的是CST时间,容器容器使用的是UTC时间 主机时间 [root@hz-d-crm01 ~]$ date Thu May 2 ...

随机推荐

  1. 检查oracle用户默认密码的账户

    1. 检查使用默认用户密码的账号 --11g 通过数据字典SYS.DEFAULT_PWD$或视图DBA_USERS_WITH_DEFPWD select u.username, u.account_s ...

  2. Day18 (一)类的加载器

    一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡. 如果在同一台计算机上同时运行多个Java程序 ...

  3. 使用阿里云的maven仓库

    在maven的settings.xml文件里的mirrors节点,添加如下子节点: <mirror> <id>nexus-aliyun</id> <mirro ...

  4. filebeat+logstash+elasticsearch收集haproxy日志

    filebeat用于是日志收集,感觉和 flume相同,但是用go开发,性能比较好 在2.4版本中, 客户机部署logstash收集匹配日志,传输到 kafka,在用logstash 从消息队列中抓取 ...

  5. virtualbox+vagrant学习-2(command cli)-19-vagrant box命令

    Status 格式: vagrant status [name|id] options只有 -h, --help 这将告诉你vagrant正在管理的机器的状态. 很容易就会忘记你的vagrant机器是 ...

  6. github与git基本操作(一)

    一.git上传本地项目到github 前提:github创建一个空仓库(得到“https://自己的仓库url地址”)1.第一步:就是要进入这个目录下,cmd2.第二步:输入git init3.第三步 ...

  7. layui弹出层之应用实例讲解

    从酒店管理系统到智能门锁及其现在的资源共享平台,layui框架,我们团队用的比较多的就是这个layui弹出层. layui弹出层,除了页面iframe层我们比较常用还有就是表单校验和其他相关的友好提示 ...

  8. Rendering Engine 主流的浏览器内核(排版引擎、渲染引擎、解释引擎)有哪几种,分别的特点

    一.A web browser engine A rendering engine is software that draws text and images on the screen. The ...

  9. Lint Code 1365. Minimum Cycle Section

    这题可以看作POJ 1961 最小循环节的一个简化版本.某补习班广告贴里给出的两个指针的参考解法简直大误. 受POJ 1961的启发,把数组看作字串,观察可知,如果字串全部由循环节构成(包括最后一段是 ...

  10. Java基础—IO小结(一)概述与节点流

    一.File类的使用  由于file类是一个基础类,所以我们从file类开始了解.(SE有完善的中文文档,建议阅读) 构造器: 常用方法:——完整方法请参见API API API!!! File做的是 ...