本篇IPFS集群搭建指南教程距离上一篇IPFS教程已经过去一个多月了,本来在写完上一篇一两周之内就来写此篇文章。最近数字货币在谷底,顺便清理一些垃圾山寨。然后听一个朋友的介绍,说了一些区块链里的痛点,聊着聊着发现一个好的产品点子,就一股做劲去开发了,整体大概花了三周(不是工作日)大体把业务需求给实现了,目前在申请阿里云备案,应该不久可以给更多区块链数字货币界的小伙伴使用了,目前不便透露产品内容。好了,开始正题IPFS集群搭建。
一.多节点文件如何同步?
在IPFS多节点搭建文章中,我们实现了文件的多节点共享,但在实际业务需求中会有一个问题,多个IPFS节点如何文件同步备份?在大多数区块链企业中,实现IPFS存储基本还是做联盟链的存储,也就是节点只是在局域网内可访问。由于是多个节点部署的联盟链,每个节点希望能存储IPFS文件数据,对于后端业务开发人员而言,如果我将文件上传至某一个IPFS节点,然后pin 文件,则文件上传成功。但是某个极端的情况,我IPFS服务器刚上传完后宕机了,其他的IPFS服务节点就无法访问到资源了。又或者10台IPFS节点组成的联盟链节点,后台开发在A节点的IPFS上传了文件,为了保证每台服务器都能下载到资源,他需要对另外九台服务器进行pin add hash。那这也太不友好了,添加新的服务器,还得改业务代码。在种种问题之下,有没有比较好的解决方案呢?IPFS集群管理多节点。
二.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
- 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/
原文地址:https://www.cnblogs.com/sumingk/p/9434253.html