想了解相關區塊鏈開發,技術提問,請加QQ羣:538327407html
前面幾章,咱們經過單機部署,在單臺服務器上搭建四個節點,完成Fisco Bcos 底層搭建,並完成相關合約開發、sdk 開發。java
本次,咱們將經過多態服務器的形式,多機構、多節點分佈式部署。node
備註:本文如下采用一鍵部署方式,可是想要了解分佈式部署等原理的,仍是要了解深層次的每一個細節,詳細狀況請看如下官方linux
(很重要,裏面介紹了一條鏈,鏈證書、機構證書、節點證書使用,以及各節點是如何保證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服務器不一致。
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git && cd ./generator
node_deployment.ini
當咱們下載文件,經過winscp 直觀查看到底層項目,進入one_click,裏面分別有agencyA和AgencyB,一開始時候,裏面只有 node_deployment.ini 配置文件。
機構A的配置,機構B只要把對應的p2p和rpc的ip 修改成服務器2 的就能夠了。
執行命令:
bash ./one_click_generator.sh ./one_click
ls ./one_click
咱們能夠看到 生成對應的結構證書和對應的generator 文件,包括對應的sdk 等生成
執行腳本命令
bash ./one_click/agencyA/node/start_all.sh
查看節點進程:
ps -ef | grep fisco
查看節點log:
tail -f log/*
在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
到 各自機構下查看節點創世區塊,發現哈希值基本一致
機構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
在各自節點 查看日誌:
ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30301$ tail -f log/*
打印輸出:
命令解釋
# +++即爲節點正常共識
因爲控制檯須要java 環境,因此先要搭建java
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update
sudo apt install openjdk-8-jre-headless
地址以下:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
新建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
./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
查看區塊命令:
getBlockNumber
機構A和機構B 結果爲0
在機構B中部署測試合約,再用命令查看 ,此時區塊爲1
相同的,在機構A中查看,發現區塊高度也變爲1,因此可能證實兩個機構是共識的。
sdk項目中的放到resources 文件夾下
對以下配置文件進行修改,改成指定的服務器外網地址:
得到區塊高度
部署自定義合約,並進行測試,成功返回結果