苏铭客

导航

IPFS系列 集群搭建 三

  本篇IPFS集群搭建指南教程距离上一篇IPFS教程已经过去一个多月了,本来在写完上一篇一两周之内就来写此篇文章。最近数字货币在谷底,顺便清理一些垃圾山寨。然后听一个朋友的介绍,说了一些区块链里的痛点,聊着聊着发现一个好的产品点子,就一股做劲去开发了,整体大概花了三周大体把业务需求给实现了,目前在申请阿里云备案,应该不久可以给更多区块链数字货币界的小伙伴使用了,目前不便透露产品内容。好了,开始正题IPFS集群搭建。

一.多节点文件如何同步?

    在IPFS多节点搭建文章中,我们实现了文件的多节点共享,但在实际业务需求中会有一个问题,多个IPFS节点如何文件同步备份?在大多数区块链企业中,实现IPFS存储基本还是做联盟链的存储,也就是节点只是在局域网内可访问。由于是多个节点部署的联盟链,每个节点希望能存储IPFS文件数据,对于后端业务开发人员而言,如果将文件上传至某一个IPFS节点,然后pin 文件,则文件上传成功。但是某个极端的情况,IPFS服务器刚上传完后宕机了,其他的IPFS服务节点就无法访问到资源了。又或者10台IPFS节点组成的联盟链节点,后台开发在A节点的IPFS上传了文件,为了保证每台服务器都能下载到资源,需要对另外九台服务器进行pin add hash。那这也太不友好了,添加新的服务器,还得改业务代码。在种种问题之下,有没有比较好的解决方案呢?

 

二.IPFS集群服务搭建

   本篇的教程是最新版的IPFS,也是本人在开发过程中一步一步翻阅墙外的资料总结的教程。

   首先,我们得认识到IPFS集群的作用:方便管理IPFS多节点的文件同步,存储等功能。

   实现原理:cluster-service 是IPFS集群的服务端,一台主机搭建一个ipfs-cluster-service,统一管理该主机下的ipfs节点。通过ipfs-cluster-service 与其他主机的ipfs-cluster-service连接,通过共享配置文件中secret密钥,实现service连接,从而组成一个集群。

   1.ipfs-cluster-service 安装

      wget https://dist.ipfs.io/ipfs-cluster-service/v0.4.0/ipfs-cluster-service_v0.4.0_linux-amd64.tar.gz

      tar ipfs-cluster-service_v0.4.0_linux-amd64.tar.gz

      cd ipfs-cluster-service

      ./ipfs-cluster-service -h #查看帮助

 

  2.ipfs-cluster-service 初始化

     ./ipfs-cluster-service init  #初始化成功后,会生成一个 ~/.ipfs-cluster 文件目录,跟安装ipfs 一样,生成~/.ipfs目录

 

  3.查看ipfs-cluster service.json文件

      cat ipfs service.json #附带配置文件的部分解析

      

  4.修改 service.json文件

  a)   备份secret 密钥,同其他集群节点共享

  b)   修改 ipfs_connector.ipfshttp.node_multiaddress 与本机ipfs节点api 地址一致,

  c)   Proxy_listen_multiaddress 修改成本机ip地址

  d)   必要时,api.restapi.http_listen_multiaddress 修改ip地址,对外提供可访问的ipfs-cluster-service api 地址

  5.安装其余N个ipfs-cluster-service 节点

      重复上述1,2,3,4步骤,将第一个节点的sercret 拷备至其他节点的配置文件,共享同一个secret是实现集群节点连接的前提。

  6.启动第一个ipfs-cluster-service 节点

      a)   启动前,确保本机的ipfs 节点已经启动,ipfs-cluster需要连接到本机的ipfs节点

  b)   进入ipfs-cluster-service 目录

  c)   ./ipfs-cluster-service daemon #启动ipfs-cluster-service

  d)   记录下启动信息 : /ip4/192.168.1.170/tcp/9096/ipfs/QmNUkAGXxKqvAJvZPHRPZoCLwkReSGWByxbcat6t6x2ukz 如下图

  7.启动第二个ipfs-cluster-service 节点   

  a)   ./ipfs-cluster-service daemon --bootstrap /ip4/192.168.1.170/tcp/9096/ipfs/QmNUkAGXxKqvAJvZPHRPZoCLwkReSGWByxbcat6t6x2ukz  #与第一个集群地址联通,

  接下来第三个集群地址,就使用这种方式添加,否则直接使用命令./ipfs-cluster-service daemon启动会出错的。

  b)   ~/.ipfs-cluster 目录下生成 peerstore raft 两文件 Peerstore 存储当前连接的ipfs-cluster集群节点地址,Raft 是ipfs的协议共识机制

 三.IPFS集群客户端安装

     Ipfs-cluster-ctl 是管理ipfs-cluster-service集群服务的客户端,在私有ipfs网络里,可以只安装一个客户端进行测试调用,ipfs-cluster-ctl可管理多个ipfs-cluster-service

  1. ipfs-cluster-ctl 安装

     wget https://dist.ipfs.io/ipfs-cluster-ctl/v0.4.0/ipfs-cluster-ctl_v0.4.0_linux-amd64.tar.gz

     tar cluster-ctl_v0.4.0_linux-amd64.tar.gz

     cd ipfs-cluster-ctl

     ./ipfs-cluster-ctl -h #查看帮助

     2.查看集群中全部的ipfs-cluster-service 节点信息

          ./ipfs-cluster-ctl peers ls   #如下图:

         

            在ipfs-ctl客户端可以看出,ipfs网络有三个集群节点,每个节点下有一个ipfs节点。

       3.查看集群节点关系图

            ./ipfs-cluster-ctl health graph 

         

 四.IPFS集群使得IPFS节点间数据同步

          接下来就来解决我们在未搭建集群前ipfs节点数据不能同步的问题

     1.ipfs节点A 上传一个文件  aa.txt

    Ipfs add aa.txt   #获取访问的内容hash: QmRqSJ8ckhFtTAx5pVNEMFxPC4JWWoThJbVTCAViWPX5Bf

       2.ipfs-cluster-ctl pin add hash  #让全网私有网络的集群的ipfs节点同步该hash内容

    ./ipfs-cluster-ctl pin add QmRqSJ8ckhFtTAx5pVNEMFxPC4JWWoThJbVTCAViWPX5Bf  #全网的ipfs节点repo 都存在该hash.

       3.Ipfs pin ls hash

    全部的ipfs节点都pin了该hash ,返回结果如下:

    QmRqSJ8ckhFtTAx5pVNEMFxPC4JWWoThJbVTCAViWPX5Bf recursive

       4.解pin已同步的hash

     ./ipfs-cluster-ctl pin rm hash

   5.Ipfs-cluster-service 实时控制台信息 

         

 

至此IPFS集群管理节点数据技术已经分享完毕,各位区块链战友,在实践过程中多多少少还是会碰到一些坑,欢迎拍砖,欢迎留言。整个IPFS系列教程我也花了数周去学习了解,踩了不少坑,另外文末有相关的IPFS参考链接。欢迎关注公众号 “刻意链习”,以后不定期在公众号分享区块链技术文章。

               

 

Raft 共识介绍:

  中文版:https://www.cnblogs.com/mindwind/p/5231986.html

  动画版:http://thesecretlivesofdata.com/raft/

 

更多参考地址:

  https://zhuanlan.zhihu.com/p/35141862

  https://cluster.ipfs.io/documentation/

      http://ipfser.org/2018/03/02/r26/

      http://liyuechun.org/2017/11/20/ipfs-blockchain/

      https://flyingzumwalt.gitbooks.io/decentralized-web-primer/

 

posted on 2018-08-06 23:35  苏铭客  阅读(2134)  评论(0编辑  收藏  举报