超級賬本Fabric介紹與部署

一、簡介

簡介 Fabric。從 1.0 版本開始,在架構上進行了重新設計,解禍了節點的角色,同時在安全性、性能可擴展性和可插拔性方面都有了不少改進。在將交易發送到網絡中之前,需要先向背書節點收集足夠多的背書支持,同時採用專門的排序節點來負責整個網絡中十分核心的排序環節。目前,網絡中存在以下 4 種不同種類的服務節點,彼此協作完成整個區塊鏈系統的功能。對網絡中節點角色進行解藕是 Fabric 設計中的一大創新,這也是聯盟鏈場景下的特殊需求和環境所決定的。

超級賬本Fabric介紹與部署

  • 背書節點( Endorser ) :負責對交易的提案( proposal )進行檢查和背書,計算交易執行結果;

  • 口確認節點( committer ) :負責在接受交易結果前再次檢查合法性,接受合法交易對賬本的修改,並寫人區塊鏈結構;

  • 口排序節點( Orderer ) :對所有發往網絡中的交易進行排序,將排序後的交易按照配置中的約定整理為區塊,之後提交給確認節點進行處理;

  • 口證書節點( CA ) :負責對網絡中所有的證書進行管理,提供標準的 PKi 服務。

超級賬本Fabric介紹與部署

另外,網絡中支持多通道的特性。使用一條獨立的系統通道( system channel )負責管理網絡中的各種配置信息,並完成對其他應用通道( application channel ,供用戶發送交易使用)的創建。目前,要啟動一個 Fabric 網絡,需要遵循如下的主要步驟:

  1. 預備網絡內各項配置,包括網絡中成員的組織結構和對應的身份證書(使用 cryptogen 工具完成);生成系統通道的初始配置區塊文件,新建應用通道的配置更新交易文件以及可能需要的錨節點配置更新交易文件(使用 configtxgen 工具完成)。

  2. 使用系統通道的初始配置區塊文件啟動排序節點,排序節點啟動後自動按照指定配置創建系統通道。

  3. 不同的組織按照預置角色分別啟動 Peer 節點。這個時候網絡中不存在應用通道, Peer 節點也並沒有加人網絡中。

  4. 使用新建應用通道的配置更新交易文件,向系統通道發送交易,創建新的應用通道。

  5. 讓對應的 Pee :節點加人所創建的應用通道中,此時 Peer 節點加人網絡,可以準備接收交易了。

  6. 用戶通過客戶端向網絡中安裝註冊鏈碼(相關定義參見後面 9 . 5 節),鏈碼容器啟動成功後用戶即可對鏈碼進行調用,將交易發送到網絡中。後續章節將詳細介紹各個步驟的操作順序及方法。

二、本地編譯安裝

動手能力較強的讀者,建議通過本地編譯安裝來部署超級賬本 Fabric 網絡,以便對相關組件有更深人的理解。超級賬本 Fabric 基於 Go語言實現,本地編譯推薦配置 Golang 1.7 或更高版本的環境。下面將講解如何編譯生成 fabric-peer 、fabric-orderer和fabric-ca等組件的二進制文件,以及如何安裝一些配置和開發相關工具。

2.1、環境安裝

1、安裝Go語言環境:

常見的 Linux 發行版(包括飾 ubuntu 、 Redhat 、 centos 等)和 MacOS 等都可以原生支持 Fabric 編譯和運行。操作系統推薦 Linux 內核 3.10 +版本,支持 64 位環境。另外,作為 Fabric 節點,物理內存建議至少為 2 GB ,如果有較多的鏈碼則需要更多容器;預留足夠硬盤空間(一般建議 20 GB 或更多)以存儲區塊文件。在生產環境中對性能和穩定性要求高的場景下,甚至要預留更多的物理資源。下面將默認以 Ubuntu 1 6 . 04 操作系統為例進行操作。

提示:運行 Fabric 。節點需要的資源並不苛刻,作為實驗, Fabric 。節點甚至可以在樹毒派 ( Raspberry Pi )上正常運行。

安裝Go語言環境,Go語言環境可以自行訪問golang.org網站下載二進制壓縮包安裝,這裡不推薦使用包資源管理器安裝,版本往往比較舊,如下載Go1.10版本,可以採用如下命令

$ sudo wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

下載完成後,解壓目錄,並移動到合適的位置(推薦為/usr/local下)

$ tar xvf go1.10.2.linux-amd64.tar.gz
$ sudo mv go /usr/local

安裝完成後記得配置GOPATH環境變量:然後執行 source /etc/profile 使文件立即生效

export GOPATH=/usr/local/Go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

此時,可以通過go version命令驗證是否安裝成功:

$ go version
go version go1.10.2 linux/amd64

2、安裝依賴包

編譯Fabric相關代碼,需要一些依賴包,可以通過如下命令安裝:

$ sudo apt-get update && apt-get install -y libsnappy-dev zlib1g-dev libbz2-dev libltdl-dev libtool 

3、安裝Docker

Fabric網絡目前依賴Docker服務作為鏈碼容器支持,所以即使是本地環境運行Fabric網絡,也需要在Peer節點上安裝Docker環境。推薦使用1.12或更新的版本。Linux可以通過一下命令快速安裝Docker最新版本:

url -fsSL https://get.docker.com/ | sh

MacOS下可以通過訪問https://docs.docker.com/docker-for-mac/install下載Docker for Mac 安裝包進行安裝。

2.2、獲取代碼

目前,Fabric代碼的官方倉庫在社區的Gerrit上,並實時同步到Github倉庫中,大家可以從任意倉庫中獲取代碼。首先,將Fabric代碼按照Go語言推薦方式存放,創建目錄結構並切換到該目錄,命令如下:

$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger

通過下面命令獲取fabric-peer和fabric-orderer組件編譯所需的代碼,兩者目前在同一倉庫中:

$ git clone http://gerrt.hyperledger.org/r/fabric

默認情況下,惠下拉獲取帶有完整歷史的倉庫,這個過程取決於網絡的速度,可能需要較長的時間。大家可以通過–single-branch -b master –depth 1 命令選項指定只獲取master分支最新提交的代碼,如下命令(注意“1”和“l”的區別):

$ git clone --single-branch -b master --depth 1 http://gerrt.hyperledger.org/r/fabric

fabric 組件則在另外一個倉庫中,同理,通過下面命令獲取:

$ git clone http://gerrit.hyperledger.org/r/fabric-ca

2.3編譯安裝fabric-peer組件

通過下面命令手動編譯安裝fabric-peer到$GOPATH/bin下。目前fabric處於1.0.0大版本階段,這裡我們指定相關版本好為1.0.0:

$ cd $GOPATH/src/github.com/hyperledger/fabric
$ ARCH=x86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \\
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE} \\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \\
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"

$ CGO_CFLAGS=” ” go install -ldflags “$LD_FLAGS -linkmode external -extldflags ‘-static -lpthread'” \\

github.com/hyperledger/fabric/peer

用戶也可以使用源碼中的Makefile來進行編譯。這種方式下,需要自動從DockerHub上獲取包括基礎鏡像在內的依賴文件,花費時間可能稍長,相關命令如下:

$ cd $GOPATH/src/github.com/hyperledger/fabric
$ make peer

2.4編譯安裝fabric-orderer組件

通過下面命令手動編譯並安裝fabric-orderer到$GOPATH/bin下:

$ cd $GOPATH/src/github.com/hyperledger/fabric 

$ ARCH=x86_64
$ BASEIMAGE_RELEASE=0.3.1
$ PROJECT_VERSION=1.0.0
$ LD_FLAGS="-X github.com/hyperledger/fabric/common/metadata.Version=${PROJECT_VERSION} \\
-X github.com/hyperledger/fabric/common/metadata.BaseVersion=${BASEIMAGE_RELEASE} \\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric \\
-X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger \\
-X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger"
$ CGO_CFLAGS=" " go install -ldflags "$LD_FLAGS -linkmode external -extldflags '-static -lpthread'" \\
github.com/hyperledger/fabric/orderer

同樣使用源碼中的Makefile來進行編譯命令如下:

$ cd $GOPATH/src/github.com/hyperledger/fabric
$ make orderer

2.4編譯安裝fabric-ca組件

可以通過下面命令手動編譯並安裝fabric-ca到$GOPATH/bin下:

$ go install -ldflags " -linkmode external -extldflags '-static -lpthread'" github.com/hyperledger/fabric-ca/cmd/..

2.5編譯安裝輔助工具

Fabric中提供了一系列輔助工具,包括cryptogen(生成組織結構和身份文件)、configtxgen(生成配置區塊和配置交易)、configtxlator(解讀配置信息)等,通過下面命令進行編譯和安裝:

#編譯安裝cryptogen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \\
go install -tags "" \\
-ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=${PROJECT_VERSION}" \\
github.com/hyperledger/fabric/common/tools/cryptoge
#編譯安裝configtxgen
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \\
go install -tags "nopkcsll" \\
-ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.Version=${PROJECT_VERSION}" \\

github.com/hyperledger/fabric/common/tools/configtxgen
#編譯安裝configtxlator
$ PROJECT_VERSION=1.0.0
$ CGO_CFLAGS=" " \\
go install -tags "" \\
-ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.Version=${PROJECT_VERSION}" \\
github.com/hyperledger/fabric/common/tools/configxlato

2.6獲取chaintool

chaintool可以協助用戶對聯鏈碼進行打包和部署,方便鏈碼的開發測試,用戶可以通過下面命令進行安裝:

$ curl -L https://github.com/hyperledger/fabric-chaintool/releases/download/v0.10.3/chaintool > /usr/local/bin/chaintool
$ chmod a+x /usr/local/bin/chaintool

2.7安裝Go語言相關工具

Fabric代碼由Go語言構建,開發者可以選擇安裝如下的Go語言相關工具,方便開發和調試:

$ go get github.com/golang/protobuf/protoc-gen-go \\
&& go get github.com/kardianos/govendor \\
&& go get github.com/golang/lint/golint \\
&& go get golang.org/x/tools/cmd/goimports \\
&& go get github.com/onsi/ginkgo/ginkgo \\
&& go get github.com/axw/gocov/... \\
&& go get github.com/client9/misspell/cmd/misspell \\
&& go get github.com/AlekSi/gocov-xm

2.8示例配置

sampleconfig目錄下包括一些配置文件,可以參考基礎進行編寫,將它們複製到默認的配置目錄(/etc/hyperledger/fabric)下:

$ cd $GOPATH/src/github.com/hyperledger/fabric/sampleconfig
$ cp configtx.yaml /etc/hyperledger/fabric
$ cp core.yaml /etc/hyperledger/fabric
$ cp orderer.yaml /etc/hyperledger/fabric

$ cp msp/config.yaml /etc/hyperledger/fabric

以上為手動進行本地編譯,除了這種方式還可以採用(Docker)鏡像的方式快速獲取和運行Fabric網絡,可以省去本地編譯的時間。後續小編會繼續分享使用Docker獲取和運行方法,喜歡的可以關注我,感謝大家支持!

主頁鏈接:https://www.leepeng.com.cn/


分享到:


相關文章: