IPFS系列 集群搭建 三
本篇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/
IPFS系列 集群搭建 三