超級賬本Fabric的部署和使用(第九章)

標註:如有錯誤歡迎指正和探討,共同進步

  1. 四種不同的服務節點
    創新點:對網絡中的節點進行解耦,分爲四類
  • 背書節點:負責對交易的提案進行檢查和背書,計算交易執行的結果。
  • 確認節點:負責接受交易結果前再次檢查合法性,接受合法交易對賬本的修改,並寫入區塊鏈結構。
  • 排序節點::對所有發往網絡中的交易進行排序,將排序後的交易按照配置中的約定整理爲區塊,之後提交給確認節點進行處理。
  • CA證書節點:負責對網絡中所有的證書進行管理,提供標準的PKI 服務。

另外,網絡中支持多通道的特性使用一條獨立的系統通道( system channel )負責管理網絡中的各種配置信息,並完成對其他應用通道( application channel ,供用戶發送交易使用)的創建

本地編譯安裝

  • 超級賬本 Fabric 基於 Go 語言實現
  1. 操作系統:Ubuntu 16.04 操作系統
  2. 環境配置部分
  • 安裝 Go 語言環境
    參考:https://www.cnblogs.com/zhangbao/p/5898208.html

在/root/downloads/下

wget -c https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz

解壓文件至/usr/local

tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz

設置環境變量(讓命令go有效)

cd ~
vim .profile

在文件最後添加

export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath

保存退出,使語句生效

. .profile

測試

go version

輸出

go version go1.7.1 linux/amd64

  • 安裝依賴包
    編譯Fabric 關代碼,需要一些依賴包.

$ sudo apt-get update
$ apt-get install -y libsnappy-dev zliblg-dev libbz2 - d ev libltdl-dev btool

Docker簡介

Docker 是一個開源的應用容器引擎,基於 Go 語言並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
$ curl -fsSL https://get.docker.com/ I sh (根據docker的安裝腳本進行安裝即可)

安裝docker

參考文章:http://www.runoob.com/docker/ubuntu-docker-install.html
Fabric 網絡目前依賴 Docker 服務作爲鏈碼容器的支持,因此即使是本地環境運行。
Fabric 網絡,也需要在 Peer 節點上安裝 Docker 環境。

補充:如果是 Ubuntu 或者 Debian 操作系統,修改 Docker 的配置文件 etc/ default/ docker,增Docker的socket 綁定,運行在 Docker 中的進程才能通過映射的 socket 調用 Docker的API 執行鏡像編譯和創建容器

DOCKER_ OPTS=" -s=auf s -r=true --api-cors-header=’*’-H tcp://0.0.0.0:2375 -H
unix:///var/run/docker.sock

重啓 Docker 服務讓配置生效:

sudo service docker start

問題:如何解決docker下載慢的方法

在這裏插入圖片描述
操作方法:

一鍵配置鏡像地址:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

Docker 鏡像

可以從源碼編譯生成,或通過從 DockerHub 倉庫下載獲取

  • 方法一倉庫中獲取系統的源碼

$git clone http://gerrit.hyperledger.org/r/fabric 獲取鏡像。
git clone https://github.com/hyperledger/fabric.git(github獲取方式)
默認情況下,會下拉獲取帶有完整歷史的倉庫,這個過程取決於網絡速度,可能需要較長時間。

生成鏡像
在這裏插入圖片描述

  • 方法二:獲取dockerhub 中的fabric 鏡像
    在這裏插入圖片描述
    在這裏插入圖片描述
    下載必須docker 鏡像
  1. 建立bash 文件, setup_fabric_1.0.sh.

  2. 添加shell命令

docker pull yeasy/hyperledger-fabric-base:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-peer:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-orderer:0.8.9 \
&& docker pull yeasy/hyperledger-fabric-ca:0.8.9 \
&& docker pull yeasy/blockchain-explorer:latest \
&& docker tag yeasy/hyperledger-fabric-peer:0.8.9hyperledger/fabric-peer \
&& docker tag yeasy/hyperledger-fabric-orderer:0.8.9hyperledger/fabric-orderer \
&& docker tag yeasy/hyperledger-fabric-ca:0.8.9hyperledger/fabric-ca \
&& docker tag yeasy/hyperledger-fabric-base:0.8.9hyperledger/fabric-ccenv:x86_64-1.0.0-preview \
&&docker tag yeasy/hyperledger-fabric-base:0.8.9hyperledger/fabric-baseos:x86_64-1.0.0-preview
  1. 運行bash文件下載鏡像。

通過腳本來下載

官方提供的自動化部署腳本
參考網址:https://www.cnblogs.com/studyzy/p/6973334.html
下載時指定二進制版本號,CA證書的版本號,鏡像版本號。 注意涉及的主要內容。

curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.2.0 1.2.0 0.4.10

在這裏插入圖片描述

參考網址:
Unbuntu 18.04下 Hyperledger Fabric 1.0 的搭建
Fabric0.6/1.0鏡像文件拉取
下載官方腳本

問題:什麼是Peer節點

首先需要明確的是,Peer節點是一個物理的概念(與之對比,通道是一個邏輯的概念,通道並沒有實體),一臺服務器可以充當Peer的作用。這臺服務器既可以是私有物理機,也可以是雲上的資源。Peer是整個Fabric體系的基礎設施,下面會解釋爲什麼。Peer節點存儲關鍵的數據,並且執行特定的程序。****存儲的數據包括賬本、鏈碼(智能合約執行的程序主要包括背書以及鏈碼的執行。所有的賬本查詢以及賬本修改必須通過鏈碼來操作,所有的鏈碼操作必須通過Peer節點在喚起,所以SDK或者應用需要存取賬本數據時,必須通過Peer。這就是爲什麼說Peer是Fabric的基礎設施。

第二種部署Fabric 的方式

除了前面講解的在服務器上手動部署的方式,讀者還可以基於容器方式快速部署一套本地的 Fabric 網絡進行體驗(第一種在分佈式服務器上的部署方式參考:區塊鏈的設計與應用的章節九9.4.6之前)

Fabric基於容器的一套Fabric 的快速部署方式 的部署方式

  1. 下載Compose模板文件

git clone https://github.com/yeasy/docker-compose-files

  1. docker 中的鏡像的地址
    https://github.com/yeasy/docker-compose-files/tree/master/hyperledger_fabric/latest/scripts

bash download_images.sh

  1. 啓動docker 中的網絡
    在這裏插入圖片描述

操作部分

關於fabric的使用操作部分筆記

  1. 下載fabric 制定版本源碼
  • git clone -b 分支 地址,github項目倉庫 download or clone網址位置
  • git clone -b release-1.0 https://github.com/hyperledger/fabric.git

問題:
遇到問題

  • error: RPC failed; curl 18 transfer closed with outstanding read data remaining
    fatal: The remote end hung up unexpectedly
    fatal: early EOF
    fatal: index-pack failed
  • 解決方法:
    擴展緩存即可:文件大小的上限設置大點
    git config --global http.postBuffer 524288000
  1. 下載fabric 鏡像文件

進入fabric /examples/e2e_cli ,執行 ./download-dockerimages.sh
/opt/gopath/fabric/examples/e2e_cli# ./download-dockerimages.sh

此時 fabric 1.0鏡像下載完畢。

  1. 執行network_setup.sh
    network_setup.sh 是一件測 試腳本 , 該腳本啓動 5 個 Docker 容器 , 其中 4 容器運行 Peer 節點和 1 個容器運行 Orderer 節點,它組成一個 Fabric 網絡。另外,還有一個 cli容器用於執行創建 channel 、加入 channel 、 安裝和執行 chaincode 等操作 。 測試用的 chaincode定義了兩個變量,在實例化的時候會給這兩個變量賦予初始值,並通過 invoke 操作可以使兩個變量的值發生變化。

錯誤:

API error (404): {“message”:“network e2ecli_default not found”}
參考:https://www.jianshu.com/p/22c108e0b463

在這裏插入圖片描述
參考文章:https://blog.csdn.net/vivian_ll/article/details/79966210

錯誤2

由於在這裏卡了好久,所以重點記一下。不要使用beta版本

Error: Error endorsing query: rpc error: code = Unknown desc = could not find chaincode with name ‘mycc’ - make sure the chaincode mycc has been successfully instantiated and try again -
!!! Query result on peer0 is INVALID !!!
在這裏插入圖片描述
操作

  1. 刪除下載的原來1.0.0-beta(網上建議不要使用beta 版本鏡像)
docker rmi `docker images -q`
  1. 下載新的 原版源碼指定 1.0.0 版本。具體內容看download-dockerimages.sh 文件
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

重新運行就可以了。1

部署fabric 1.4 筆記

  • 步驟一
# 下載最新的 sample ,二進制可執行文件,鏡像文件
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh|bash -s 
  • 步驟二
# 當以上步驟完成後, 將fabric sample 路徑下
# 前提是配置了go 語言環境
$GOPATH=/opt/gopath 
# /opt/gopath/src/github.com/hyperledger/fabric-samples/
cd fabric-samples/first-network
./byfn.sh generate
./byfn.sh up  (./byfn.sh up -l java , 調用java鏈碼)

./byfn.sh down (關閉 first network )

補充:如何調用raft 排序服務啓動網絡

./byfn.sh up -o etcdraft

同理

#使用kafka啓動kafka 網絡
./byfn.sh up -o kafka 

完成後出現這個. 說明fabric 1.4.3 版本 first-network 運行成功。
在這裏插入圖片描述
具體參考官方文檔:https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html


  1. 參考:https://blog.csdn.net/PistachioGuoGuo/article/details/81008038 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章