第六章 FISCO BCOS 多服務器分布式部署


想了解相關區塊鏈開發,技術提問,請加QQ群:538327407

前提概要

前面幾章,我們通過單機部署,在單台服務器上搭建四個節點,完成FISCO BCOS 底層搭建,並完成相關合約開發、sdk 開發。

本次,我們將通過多態服務器的形式,多機構、多節點分布式部署。

備注:本文以下采用一鍵部署方式,但是想要了解分布式部署等原理的,還是要了解深層次的每個細節,詳細情況請看以下官方

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/enterprise_quick_start.html

(很重要,里面介紹了一條鏈,鏈證書、機構證書、節點證書使用,以及各節點是如何保證p2p通信,身份認證等)

 

一鍵部署

首先 先附上 官方教程 詳細地址:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/enterprise_quick_start.html

由於官方教程是在單機上部署,模擬多服務器分布式,其實有些細節上還是有很大差距,對於小白,如果沒有比較扎實的區塊鏈底層改造實力,可能就會陷入卡殼狀態。

 

第一部分 基礎底層搭建

1、先准備兩台測試服務器

 

 

 其中 將測試服務器1 作為機構A,同時也是生成創世區塊的機構,測試服務器2 作為機構B,兩個機構 分別代表兩台服務器,每台服務器 又分別生成兩個節點。

機構 節點 所屬群組 P2P地址 RPC/channel監聽地址
機構A 節點0 群組1 172.27.16.14:30300 172.27.16.14:8545/:20200
  節點1 群組1 172.27.16.14:30301 172.27.16.14:8546/:20201
機構B 節點2 群組1 172.27.16.17:30302 172.27.16.17:8547/:20202
  節點3 群組1 172.27.16.17:30303 172.27.16.17:8548/:20203

 

官方的關於端口配置講解:https://mp.weixin.qq.com/s/IiHsPlxmvEEBTC84n27I9A

建議使用內網地址,筆者調測p2p 使用外網地址 或者0.0.0.0 都失敗了。

針對雲服務器中的vps服務器,RPC監聽地址需要寫網卡中的真實地址(如內網地址或127.0.0.1),可能與用戶登錄的ssh服務器不一致。

2、搭建機構A 部署

2.1 下載

cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git && cd ./generator

2.2 配置各個機構配置文件 node_deployment.ini

 當我們下載文件,通過winscp 直觀查看到底層項目,進入one_click,里面分別有agencyA和AgencyB,一開始時候,里面只有 node_deployment.ini 配置文件。

 機構A的配置,機構B只要把對應的p2p和rpc的ip 修改為服務器2 的就可以了。

2.3 搭建節點

執行命令:

bash ./one_click_generator.sh ./one_click

ls ./one_click

 

 我們可以看到 生成對應的結構證書和對應的generator 文件,包括對應的sdk 等生成

 

2.4 啟動節點

執行腳本命令

bash ./one_click/agencyA/node/start_all.sh

查看節點進程:

ps -ef | grep fisco

查看節點log:

tail -f log/*

 

 3、搭建機構B部署

3.1 將機構A中one_click 文件夾下agencyB 里面的node copy到機構B服務器中

 

 

 

2、啟動機構B節點

 

在node目錄下,執行以下命令

bash ./start_all.sh 

此時有可能出現權限問題,主要node文件夾下面兩個節點中fisco-bcos 會有權限問題

 

授權文件權限(指定的命令要根據當前自己的目錄位置動態調整)

sudo chmod u+rwx node_172.27.16.17_30300/fisco-bcos
sudo chmod u+rwx node_172.27.16.17_30301/fisco-bcos

 

在node目錄下,執行以下命令

bash ./start_all.sh 

 

4、兩個機構、多個節點共識等校驗

4.1 創世區塊查看


到 各自機構下查看節點創世區塊,發現哈希值基本一致


機構A,創世區塊
ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30300$  cat log/* |grep Report
info|2019-07-02 18:17:21.672828|[g:1][CONSENSUS][PBFT]^^^^^^^^Report,num=0,sealerIdx=0,hash=63ab4477...,next=1,tx=0,nodeId

機構B 
root@VM-16-17-ubuntu:/home/ubuntu/node/node_172.27.16.17_30300#  cat log/* |grep Report
info|2019-07-03 09:33:37.319783|[g:1][CONSENSUS][PBFT]^^^^^^^^Report,num=0,sealerIdx=0,hash=63ab4477...,next=1,tx=0,nodeId

 

4.2 查看共識

在各自節點 查看日志:

ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30301$ tail -f log/*

 

打印輸出:

 命令解釋
# +++即為節點正常共識

 

 5.搭建控制台

由於控制台需要java 環境,所以先要搭建java

5.1:添加ppa源


sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

 

5.2 安裝openjdk

  sudo apt install openjdk-8-jre-headless

 

5.3 下載jdk 1.8.211 

 地址如下:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

5.4 解壓文件,並配置環境

 新建software 文件夾,將 jdk-8u211-linux-x64.tar.gz 放置其中

在/usr/lib/ 新建jdk 文件夾,執行解壓命令

 sudo tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/lib/jdk

修改配置:

sudo vi /etc/profile
#set java env
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_211  //這里是要指定的文件位置
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH 

執行命令,立即生效:

source /etc/profile
sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.8.0_211/bin/java 300 //這里也是要改成指定的位置
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.8.0_211/bin/javac 300
在終端輸入,出現版本號則表示安裝成功
java -version

 

 5.5 機構A、B下載控制台程序

./generator --download_console ./

 

配置A機構控制台:

 

拷貝控制台至對應機構A:

cp -rf ./console ./one_click/agencyA/console

配置機構A控制台對應文件,控制台啟動時需要相關證書、私鑰以及控制台配置文件:

cp ./one_click/agencyA/sdk/* ./one_click/agencyA/console/conf
啟動控制台程序
cd ./one_click/agencyA/console && bash ./start.sh 1

配置B機構控制台:

同樣在node 同等級目錄下載 依照機構A方式下載

 

 

 

 

 

從機構A中one_click 目錄下 agencyB 的sdk 里面的配置和證書copy 到機構B的fisco目錄下的console 中的conf 文件中,然后運行如下命令:

 

bash ./start.sh 1

 

 6、成果校驗

6.1 先在機構A和機構B的控制台查看 

查看區塊命令:

getBlockNumber

機構A和機構B 結果為0

 

6.2 部署測試合約(該合約是控制台自帶的)

 

在機構B中部署測試合約,再用命令查看 ,此時區塊為1

 

 相同的,在機構A中查看,發現區塊高度也變為1,所以可能證明兩個機構是共識的。

 

6.3 將機構A的sdk 里面的證書等copy 給sdk項目中

 

sdk項目中的放到resources 文件夾下

 

 對如下配置文件進行修改,改為指定的服務器外網地址:

 

 6.4 通過sdk的單元測試校驗成果

 獲得區塊高度

 

 部署自定義合約,並進行測試,成功返回結果

 

讀后感覺不錯,有收獲可以微信請作者喝杯咖啡,讀后有疑問請加微信,拉群研討,注明來意

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM