天天看點

【董天一】IPFS家族(二)

go-ipfs

作者簡介:董天一 ,IPFS/Filecoin中國區技術布道人 ,《IPFS指南》作者

畢業于北京大學軟體與微電子學院

曾擔任甲骨文亞洲研發中心(中國)資料庫開發工程師

資深區塊鍊技術開發者,現緻力于IPFS/Filecoin在中國的技術推廣

【董天一】IPFS家族(二)

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,步驟如下

  1. 啟動ipfs daemon
  2. 初始化 ipfs-cluster-service:ipfs-cluster-service init:初始化ipfs-cluster-service服務,初始化ipfs-cluster-service服務。如果沒有啟動過或者設定過 ipfs-cluster-service,ipfs-cluster-service預設會啟動單一節點的ipfs叢集管理。這個步驟跟ipfs節點啟動是一樣的。
  3. 啟動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位的随機字串。

【董天一】IPFS家族(二)

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叢集裡面

使用指令:ipfs-cluster-ctl peers ls 檢視叢集詳情

【董天一】IPFS家族(二)

叢集的運作如下,從截圖上我們可以看到新添加的節點進入了叢集的日志

【董天一】IPFS家族(二)

至此,我們的ipfs-cluster叢集就建好了,下面我們來看看如何管理叢集。

pin一個檔案,執行指令(節點A)

ipfs-cluster-ctl pin add QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb

QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公衆号或者知乎專欄的深度讀者,也許會對這個哈希值有印象,這就是小編在《如何在IPFS裡面上傳一張照片》上傳的那張紀念性圖檔。

相關文章和視訊推薦

圓方圓學院彙集大批區塊鍊名師,打造精品的區塊鍊技術課程。 在各大平台都長期有優質免費公開課,歡迎報名收看。

公開課位址:https://ke.qq.com/course/345101?flowToken=1007371