使用Docker Swarm部署跨機器的基於Kafka的多伺服器Hyperledger Fabric網路

使用Docker Swarm(多個主機)部署跨機器的基於Kafka的多訂購者Hyperledger Fabric網路

關於在多個主機或伺服器上創建Hyperledger Fabric網路的結構化教程非常少。您只能在官方的Hyperledger Fabric文檔中找到構建單機網路的指南,該文檔根本不是分散式和去中心化的。今天,讓我們一起做吧

什麼是Docker Swarm?

Docker Swarm是一種集群管理工具,可以在不同的計算機上實現不同容器的通信。我們還將使用覆蓋網路,它是Docker Swarm頂部的連接層。有關詳細信息,請訪問https://docs.docker.com/engine/swarm/和https://docs.docker.com/network/overlay/

在我們開始之前……必須做

  • 你應該知道區塊鏈是什麼,對吧? ?
  • 準備安裝了Linux Ubuntu的三個雲實例或計算機
  • 安裝Docker Engine Community Edition最新版本
  • 安裝Docker撰寫最新版本
  • 安裝Node v8.4.0(最好使用nvm)
  • 將此github存儲庫克隆到三台計算機並切換到分支跨機器群
  • 最好

  • 了解Hyperledger Fabric背後的關鍵概念
  • 完成官方文檔中的「構建您的第一個網路」教程
  • 備註

    它基於Hyperledger Fabric版本1.1,儘管最新版本也可以使用

    網路架構網路架構

    上圖顯示了整個網路架構。組織1和組織2組件分別位於機器1和機器2中。基於Kafka的訂購服務包括部署在三台機器中的組件。除節點應用程序之外的所有組件都使用Docker進行容器化。除MongoDB之外的所有容器都通過Docker Swarm覆蓋網路相互通信。

    每個組件的功能:

    • 同行:區塊鏈分類帳和鏈代碼引擎(智能合約)
    • CouchDB:具有豐富查詢功能的狀態資料庫
    • CA:註冊並註冊新用戶
    • MongoDB:存儲用戶憑據
    • Orderer:訂購交易並將它們打包成一個塊
    • 卡夫卡:共識協議
    • Zookeeper:Kafka的註冊和配置服務
    • 節點應用程序:用於與區塊鏈交互的API伺服器

    防火牆設置

    需要公開上面列出的埠以促進跨機器網路。

    警告:MongoDB和Mongo Express應該暴露在生產環境中的所有外部IP中。

    編輯網路配置文件

    在hyperledger-fabric-technical-tutorial / balance-transfer / artifacts / network-config.yaml中,將orderer1和所有Org 2組件的默認IP地址更改為Machine 2的實際IP地址。

    此文件提供Org 1,Org 2組件和兩個ord​​erers的網路信息,供節點應用程序發送API請求。由於節點應用程序未部署在Docker Swarm網路中,因此必須通過指定IP地址來完成外部通信。

    由於節點應用程序不直接與Kafka和Zookeeper群集通信,因此不包括其IP地址。

    MongoDB連接配置文件在org1.yaml和org2.yaml中編碼。由於MongoDB和節點應用程序位於同一台計算機上,因此使用localhost足以進行通信。

    設置Docker Swarm和覆蓋網路

    在機器1中,運行docker swarm init以將Swarm網路初始化為管理器。它返回類似於以下結果的內容。

    docker swarm join –token SWMTKN-1-4bg8u1sjnk6sjegcdba5f03ij5yespoqn1g3qhji7hn213qyw0-ee8h9oinejen29d1t9r6pw4pf 172.0.0.71:2377

    在機器1終端中複製命令並在機器2和機器3中運行以加入Swarm網路。以下是成功回應。

    該節點作為工作者加入了一個群。

    在機器1中運行docker node ls以列出Swarm網路節點。你應該看到三個節點。

    在機器1中,運行docker network create –attachable –driver overlay fabric_net以創建名為fabric_net的覆蓋網路。

    在所有三台機器上運行docker network ls。只有機器1顯示fabric_net,因為覆蓋網路只能通過啟動加入該覆蓋網路的docker容器擴展到其他節點。

    在機器2和機器3中,運行docker run -itd –name mybusybox –network fabric_net busybox以創建一個加入fabric_net的busybox docker容器。事實上,無論是busybox都沒關係,提出任何容器加入fabric_net都可以產生同樣的效果。

    在機器2和機器3中再次運行docker network ls以查看fabric_net是否存在。

    如果有任何錯誤,sudo systemctl重新啟動所有三台機器中的docker以重啟Docker引擎或運行docker swarm在所有三台機器中離開–force離開Swarm網路並再次重複上述過程。

    網路組件部署

    在hyperledger-fabric-technical-tutorial / balance-transfer /目錄中運行以下所有命令。

    對於所有機器,

    刪除所有現有容器以避免RAM過載。 (確保沒有其他重要的容器在運行)

    docker rm -f`docker ps -aq`

    清除未使用的Docker成交量

    碼頭工人修剪-f

    刪除緩存的Docker鏈代碼圖像

    docker rmi -f $(docker images | grep「dev | none | test-vp | peer(0-9) – 」| awk'{print $3}')

    對於機器3,

    docker-compose -f artifacts / docker-compose-kafka.yaml up -d zookeeper0 zookeeper1docker-compose -f artifacts / docker-compose-kafka.yaml up -d kafka0 kafka1docker-compose -f artifacts / docker-compose.yaml up – d orderer1.example.com

    對於機器2,

    docker-compose -f artifacts / docker-compose-kafka.yaml up -d zookeeper2docker-compose -f artifacts / docker-compose-kafka.yaml up -d kafka2 kafka3docker-compose -f artifacts / docker-compose.yaml up -d peer0.org2.example.com peer1.org2.example.com ca.org2.example.com couchdb0.org2 couchdb1.org2

    對於機器1,

    docker-compose -f artifacts / docker-compose.yaml up -d orderer0.example.comdocker-compose -f artifacts / docker-compose.yaml up -d peer0.org1.example.com peer1.org1.example.com ca. org1.example.com couchdb0.org1 couchdb1.org1docker-compose -f artifacts / docker-compose-mongo.yaml up -dnpm installnode app

    如果您的機器中沒有泊塢窗圖像,泊塢引擎將從互聯網上提取所有圖像。

    對於執行順序,應首先部署zookeeper,然後是kafka,其餘部分。

    測試

    在Machine 1中打開一個新終端並運行./testAPIs.sh -l節點。

    如果沒有錯誤,恭喜

    您成功部署了跨機器Hyperledger Fabric網路

    如果您想了解有關源代碼的更多信息,可以從分支發行版1.1下的github存儲庫下載「Hyperledger Fabric技術指南for Intermediate 開發工程師s.docx」。如果您遇到任何問題,請隨時與我聯繫

    最後但並非最不重要的,如果你喜歡,請拍這篇文章吧 🙂

    使用Docker Swarm部署跨機器的基於Kafka的多訂購者Hyperledger Fabric網路最初發布在Coinmonks on Medium上,人們通過突出顯示和回應這個故事來繼續對話。

    你可能還喜歡