1. 程式人生 > >IPFS系列 集群搭建 三

IPFS系列 集群搭建 三

修改 ali 系列 本機 查看 ini ech boot nbsp

  本篇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

  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/

IPFS系列 集群搭建 三