go-ipfs
作者簡介:董天一 ,IPFS/Filecoin中國區技術布道人 ,《IPFS指南》作者
畢業于北京大學軟體與微電子學院
曾擔任甲骨文亞洲研發中心(中國)資料庫開發工程師
資深區塊鍊技術開發者,現緻力于IPFS/Filecoin在中國的技術推廣

IPFS協定的go語言實作,ipfs的核心協定,最新版是v0.4.13
- 下載下傳位址:https://dist.ipfs.io/#go-ipfs
- 源代碼位址:https://github.com/ipfs/go-ipfs
源碼閱讀
- Go 主檔案: https://github.com/ipfs/go-ipfs/blob/master/cmd/ipfs/main.go
- 指令行 : https://github.com/ipfs/go-ipfs/tree/master/core/commands
- Bitswap協定:https://github.com/ipfs/go-ipfs/tree/master/exchange/bitswap
- DHT(分布式哈希表): https://github.com/libp2p/go-libp2p-kad-dht
- PubSub: https://github.com/libp2p/go-floodsub (該功能還沒有納入到IPFS協定的之功能裡面,目前作為測試功能存在)
- libp2p(網絡層): https://github.com/libp2p/go-libp2p
如何使用
之前的文章已經介紹過了go-ipfs的使用方式,這裡不再介紹如何使用。
js-ipfs
IPFS協定js語言實作
- Github首頁:https://github.com/ipfs/js-ipfs
Js版的使用方式跟go版本大同小異,這裡不再詳細讨論,有興趣的讀者可以直接去Github首頁上檢視相關資訊。
ipfs-cluster
ipfs-cluster
從名稱我們就可以判斷這個工具的作用了,ipfs節點叢集。該工具允許同時管理多個ipfs節點的資料。ipfs-cluster本身也是一個基于ipfs分布式管理軟體。
今天主要來講一下這個工具,對于管理多個ipfs節點這個,工具非常有用。比如,你啟動N個ipfs節點,那麼希望批量管理ipfs節點資料的時候ipfs-cluster就發揮很重要作用了。
ipfs-cluser工具分為兩個
- ipfs-cluster-service:ipfs-cluster的服務端
- ipfs-cluster-ctl:ipfs-cluster的管理端,用來管理ipfs-cluster-service伺服器的ipfs叢集
安裝
下載下傳安裝非常簡單:建議從ipfs官網下載下傳build好的版本,也可以從Github現在源碼,自己build工程。如果是下載下傳已經build好的二進制版,隻需要簡單解壓縮就完成了安裝。
- Github位址:https://github.com/ipfs/ipfs-cluster
官網二進制版本的下載下傳位址
- https://dist.ipfs.io/#ipfs-cluster-ctl
- https://dist.ipfs.io/#ipfs-cluster-service
Note: 由于官網 ipfs.io 被ipfs官方作為了一個ipfs網絡的接入點網關,由于某些特殊的原因,國内可能通路不了。
小編幫大家下載下傳放到了這裡:https://pan.baidu.com/s/1eUjKZAi
下面來詳細說明一下 ipfs-cluster的使用方法和原理
為了說明如何使用ipfs-cluster,小編在亞馬遜aws上啟動了三個ipfs節點,并且為三個節點啟動了ipfs-cluster叢集服務。不知道怎麼安裝ipfs節點的去這篇文章看一下《如何在IPFS裡面上傳一張照片》。
依賴關系
- ipfs-cluster-service:要求ipfs節點已經啟動(ipfs daemon)
- ipfs-cluster-ctl:要求ipfs-cluster-service已經啟動。
首先建立ipfs節點A,步驟如下
- 啟動ipfs daemon
- 初始化 ipfs-cluster-service:ipfs-cluster-service init:初始化ipfs-cluster-service服務,初始化ipfs-cluster-service服務。如果沒有啟動過或者設定過 ipfs-cluster-service,ipfs-cluster-service預設會啟動單一節點的ipfs叢集管理。這個步驟跟ipfs節點啟動是一樣的。
- 啟動ipfs-cluster-service服務:執行 ipfs-cluster-service daemon啟動服務,這個也跟ipfs的啟動指令是一樣的。
當執行ipfs-cluster-service init後,會在你的home檔案夾下生成一個檔案夾 ./ipfs-cluster,ipfs-cluster-service的配置檔案 service.json就在裡面儲存。稍後我們需要配置這個檔案裡面的一個字段 secret。
至此單節點的ipfs-cluster-service已經完成啟動了。但是單節點啟動ipfs-cluster-service是沒有意義的,我們本來就是要管理多個ipfs節點的。
重複上面 1-4, 再建立兩個節點B和C。
我們在A節點上比B,C節點上額外多安裝ipfs-cluster-ctl。這個是ipfs-cluster-service的指令行管理工具,于是我們有了三個ipfs節點,小編的節點運作在亞馬遜日本伺服器的東京區域。
- 節點A:亞馬遜伺服器(日本)
- 節點B:亞馬遜伺服器(日本)
- 節點C:亞馬遜伺服器(日本)
上面的準備工作完成後,我們來看一下三個ipfs節點的配置情況
A: 54.95.29.13
- ipfs節點id:Qmf4p5G4Hd29Djzg9Cjjggpa2d4PSBMpFxFdPMbddhsZMm
- 服務節點ID:Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT
- 服務節點位址:/ip4/54.95.29.13/tcp/9096/ipfs/Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT
B: 18.182.8.13
- ipfs節點id: QmRQH6TCCq1zpmjdPKg2m7BrbVvkJ4UwnNHWD6ANLqrdws
- Ipfs-service:
- 服務節點ID:QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
- 服務節點位址:/ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
C: 13.230.8.172
- ipfs節點id:QmVt1zSep5v8r8tzKBLZUicEu9NoeQX9sWxvVD6UXgcL4t
- /home/ubuntu/.ipfs-cluster/service.json
- 服務節點ID: QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
- 服務節點位址:/ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
配置
首先把每一個節點上面執行 ipfs-cluster-service初始化的配置檔案(../ipfs-cluster/service.json)裡面的secret字段修改成一樣的,每一個節點都必須保證一樣,否則節點之間是無法形成叢集的。secret是一個32位的随機字串。
secret是個32位的随機字元串
組建IPFS節點叢集
由于我們之前在A節點上安裝了ipfs-cluster-ctl指令行管理端,我們的例子将使用A節點作為管理節點。
執行下面兩個指令将節點B和C添加到叢集裡面
- ipfs-cluster-ctl peers add /ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
- ipfs-cluster-ctl peers add /ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
添加節點到ipfs叢集裡面
使用指令:ipfs-cluster-ctl peers ls 檢視叢集詳情
叢集的運作如下,從截圖上我們可以看到新添加的節點進入了叢集的日志
至此,我們的ipfs-cluster叢集就建好了,下面我們來看看如何管理叢集。
pin一個檔案,執行指令(節點A)
ipfs-cluster-ctl pin add QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb
QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公衆号或者知乎專欄的深度讀者,也許會對這個哈希值有印象,這就是小編在《如何在IPFS裡面上傳一張照片》上傳的那張紀念性圖檔。
相關文章和視訊推薦
圓方圓學院彙集大批區塊鍊名師,打造精品的區塊鍊技術課程。 在各大平台都長期有優質免費公開課,歡迎報名收看。
公開課位址:https://ke.qq.com/course/345101?flowToken=1007371