第六章 Fisco Bcos 多服務器分佈式部署

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

前提概要

前面幾章,咱們經過單機部署,在單臺服務器上搭建四個節點,完成Fisco Bcos 底層搭建,並完成相關合約開發、sdk 開發。java

本次,咱們將經過多態服務器的形式,多機構、多節點分佈式部署。node

備註:本文如下采用一鍵部署方式,可是想要了解分佈式部署等原理的,仍是要了解深層次的每一個細節,詳細狀況請看如下官方linux

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

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

 

一鍵部署

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

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

 

第一部分 基礎底層搭建

一、先準備兩臺測試服務器

 

 

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

機構 節點 所屬羣組 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服務器不一致。

二、搭建機構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/*

 

 三、搭建機構B部署

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

 

 

 

二、啓動機構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.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.1 先在機構A和機構B的控制檯查看 

查看區塊命令:

getBlockNumber

機構A和機構B 結果爲0

 

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

 

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

 

 相同的,在機構A中查看,發現區塊高度也變爲1,因此可能證實兩個機構是共識的。

 

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

 

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

 

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

 

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

 得到區塊高度

 

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

相關文章
相關標籤/搜索