1. 程式人生 > >Hyperledger Fabric 1.0 從零開始(八)——Fabric多節點叢集生產部署

Hyperledger Fabric 1.0 從零開始(八)——Fabric多節點叢集生產部署

6.1平臺特定使用的二進位制檔案配置

該方案與Hyperledger Fabric 1.0 從零開始(五)——執行測試e2e類似,根據企業需要,可以控制各節點的域名,及聯盟鏈的統一域名。可以指定單獨節點的訪問,生成指定的公私鑰、證書等檔案。具體的引數配置可以參考generateArtifacts.sh檔案,可執行自動化生成,也可以按照該腳本里的命令手動生成。

參照3.1、執行fabric-samples的問題說明,首先我們在/opt/gopath/src/github.com/hyperledger/fabric下建立一個自定義目錄,該目錄名稱應與實際生產環境中組織節點的名稱一致,如:example。

我們計劃將在

orderer伺服器中生成必要的證書等檔案,因此在example下將繼續建立一個orderer目錄,我們將下載好的bin目錄上傳至/opt/gopath/src/github.com/hyperledger/fabric/example/orderer目錄下,具體效果如下檢視:

 

 正如3.1小節所述,在bin目錄中是Fabric平臺特定使用的二進位制檔案cryptogen,configtxgen,configtxlator, 以及peer。

我們可以通過configtxgen和cryptogen手動生成證書/金鑰以及各項配置檔案。

(注:英文閱讀能力好的同學可以直接參考官方文件

在正式使用上述兩個檔案之前,我們需要在

bin目錄下先建立兩個yaml檔案,分別是crypto-config.yaml和configtx.yaml,這兩個檔案具體可以在/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli這個目錄下找到對應的官方示例,以官方示例為基礎進行修改,改成我們生產上所需的具體內容。

6.2、生成組織證書與私鑰

我們假定要組建一個名為example的聯盟,且我們自己的組織名稱為Demo,我們會建立一個Orderer排序服務節點,同時還會建立一個peer節點。

那麼修改後的crypto-config.yaml如下:

 1 OrdererOrgs:
 2   - Name: Orderer
3 Domain: example.com 4 Specs: 5 - Hostname: orderer 6 PeerOrgs: 7 - Name: Demo 8 Domain: demo.example.com 9 Template: 10 Count: 1 11 Users: 12 Count: 1

 這裡我們使用crytogen工具給我們不同的網路實體(peer/client)生成加密證書(X509 certs)。這些證書代表了身份,當我們的網路實體在進行通訊以及transact的時候進行簽名與驗證身份。

crypto-config.yaml配置檔案將被crytogen工具呼叫,檔案中包括了網路拓撲,同時允許我們給organization(Demo)以及component(隸屬於organization的元件)生成一個證書與私鑰的集合。每一個organization(Demo)被分配一個唯一的根證書(綁定了隸屬於organization(Demo)的具體的component,包括peers與orderers)。Hyperledger Fabric的transaction與通訊均被節點的私鑰(keystore)進行簽名,截止被公鑰進行驗證(signcerts)。 這個配置檔案中有一個計數(count)的變數,我們使用其定義organization(Demo)中peer的數量,在本例中我們定義Demo組織有一個peer。

在crypto-config.yaml配置檔案中,我們可以看到在ordererOrgs頭下面的“Name”, “Domain” 以及 “Specs”這三個引數,命名規則約定如下:“{{.Hostname}}.{{.Domain}}”。使用官方提供的的crypto-config.yaml中的ordering node作為參考,我們能看到一個名稱為 - orderer.example.com的ordering node,該node與Orderer的MSP ID關聯。

接下來開始使用crytogen工具執行crypto-config.yaml配置檔案,crytogen工具在bin目錄下,我們需要先進入該目錄,並執行crypto-config.yaml配置檔案,具體命令如下:

cd /opt/gopath/src/github.com/hyperledger/fabric/example/orderer/bin
./bin/cryptogen generate --config=./crypto-config.yaml

 根據上述命令,可以看出crypto-config.yaml被上傳至bin目錄下,執行結果如下檢視:

 

 此過程中可能會提示許可權不足,如下檢視:

 

 這裡使用chmod +x來賦權即可,不做詳細說明。

完成之後會在bin目錄下生成一個新的目錄crypto-config,其中會有ordererOrganizations和peerOrganizations兩個目錄,具體結果檢視如下:

 

6.3、定義configtx.yaml配置檔案

接下來,我們需要使用configtxgen工具來執行configtx.yaml檔案建立orderer Genesis block,在此之前需要為configtxgen工具指定configtx.yaml檔案的路徑,我們需要設定一個環境變數,執行如下命令:

export FABRIC_CFG_PATH=$PWD

 隨後可以列印檢視該目錄是否正確,具體執行命令如下:

echo $PWD

結果如下檢視:

 

 bin目錄下建立channel-artifacts目錄,用來存放各種渠道的原始檔。

編輯configtx.yaml檔案,結果如下:

 1 Profiles:
 2 
 3     ExampleOrdererGenesis:
 4         Orderer:
 5             <<: *OrdererExample
 6             Organizations:
 7                 - *OrdererDemo
 8         Consortiums:
 9             ExampleConsortium:
10                 Organizations:
11                     - *Demo12     ExampleChannel:
13         Consortium: ExampleConsortium
14         Application:
15             <<: *ApplicationExample
16             Organizations:
17                 - *Demo18 Organizations:
19 
20     - &OrdererDemo
21         Name: OrdererDemo
22         ID: OrdererMSP
23         MSPDir: crypto-config/ordererOrganizations/example.com/msp
24 
25     - &Demo26         Name: DemoMSP
27         ID: DemoMSP
28         MSPDir: crypto-config/peerOrganizations/demo.example.com/msp
29         AnchorPeers:
30             - Host: peer0.demo.anti-moth.com
31               Port: 7051
32 
33 Orderer: &OrdererExample
34 
35     OrdererType: solo
36 
37     Addresses:
38         - orderer.example.com:7050
39 
40     BatchTimeout: 2s
41     BatchSize:
42         MaxMessageCount: 10
43         AbsoluteMaxBytes: 99 MB
44         PreferredMaxBytes: 512 KB
45 
46     Kafka:
47         Brokers:
48             - 127.0.0.1:9092
49     Organizations:
50 
51 Application: &ApplicationExample
52 
53     Organizations:

 在該檔案中,我們定義了組織名稱、組織排序服務名稱、組織渠道名稱、應用渠道名稱、應用聯盟名稱等。

6.4、生成orderer原始檔

根據6.3中配置檔案的描述,我們將生成的orderer源為ExampleOrdererGenesis。

本步驟將生成genesis.block檔案,具體執行命令如下:

./bin/configtxgen -profile ExampleOrdererGenesis -outputBlock ./channel-artifacts/example_genesis.block

 該命令會在/opt/gopath/src/tk/bin/channel-artifacts目錄下生成一個genesis.block檔案,根據官方demo中的configtx.yaml檔案描述,該檔名由於未知原因,不得命名為order.genesis.block。

完成命令後的檢視如下:

 

 具體官方指定方案截圖如下,可參考官網實現:

 

6.5、生成channel原始檔

根據6.3中配置檔案的描述,我們將生成的channel源為ExampleChannel。

本步驟將生成channel.tx檔案,具體執行命令如下:

./bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/example_channel.tx -channelID channel01

 完成命令後的檢視如下:

 

 按照官方給定的方案,執行該方法前可以先指定channel的環境變數,如下檢視:

 

 上圖官方描述的具體執行命令如下:

1 export CHANNEL_NAME=mychannel
2 
3 # this file contains the definitions for our sample channel
4 ../bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

該步驟最終執行結果檢視如下:

 

6.6、生成channel下節點集合認證檔案

根據6.3中配置檔案的描述,我們將生成的channel源為ExampleChannel。

本步驟將生成channel.tx檔案,具體執行命令如下:

./bin/configtxgen -profile ExampleChannel -outputAnchorPeersUpdate ./channel-artifacts/DEMOMSPanchors.tx -channelID channel01 -asOrg DemoMSP

 完成命令後的檢視如下:

 

具體官方指定方案截圖如下,可參考官網實現:

最終我們可以在channel-artifacts目錄下看到成功建立了TKMSPanchors.tx檔案,如下檢視:

【注:請無視這其中目錄等名稱的一些小細節,這一章主要是講述如何通過官方給定的二進位制檔案來生成我們需要的生產證書等配置資源】