想了解相關區塊鏈開發,技術提問,請加QQ群:538327407
前提概要
前面幾章,我們通過單機部署,在單台服務器上搭建四個節點,完成FISCO BCOS 底層搭建,並完成相關合約開發、sdk 開發。
本次,我們將通過多態服務器的形式,多機構、多節點分布式部署。
備注:本文以下采用一鍵部署方式,但是想要了解分布式部署等原理的,還是要了解深層次的每個細節,詳細情況請看以下官方
(很重要,里面介紹了一條鏈,鏈證書、機構證書、節點證書使用,以及各節點是如何保證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的單元測試校驗成果
獲得區塊高度
部署自定義合約,並進行測試,成功返回結果
讀后感覺不錯,有收獲可以微信請作者喝杯咖啡,讀后有疑問請加微信,拉群研討,注明來意