FISCO BCOS 多服務器分布式部署


最近在搭建FISCO BCOS 多服務器平台上花了些許時間,寫篇博客記錄一下,方便項目里的其他小伙伴借鑒。官方文檔上是在一台服務器上模擬多服務器進行搭建的,要在實際生成環境中進行部署,有些許不同。接下來我將在兩台服務器上進行搭建。以下部分內容摘自官方文檔,不再贅述:

FISCO BCOS官方文檔:使用企業級部署工具

下載安裝

下載

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

安裝

cd ~/generator && bash ./scripts/install.sh

獲取二進制節點

拉取最新fisco-bcos二進制文件到meta中

./generator --download_fisco ./meta

錯誤解決

這一步有可能出現兩個問題,一個是網絡錯誤,如下面這樣

這個問題是因為github由於眾所周知的原因,網絡不是很穩定,所以下載失敗,但是其實應該也不至於這么穩定,總之可以在后面加上--cdn指令,從國內的鏡像進行下載。

還有一個問題則是由--cdn導致的,從cdn下載的壓縮文件似乎損壞了,導致解壓會出問題,如下圖:

解決這個問題的辦法是用直接瀏覽器在github下載二進制文件,也可以直接在服務器使用wget下載,地址如下:

https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.4.0/fisco-bcos.tar.gz

然后使用winrar等解壓軟件,或直接在linux使用如下命令進行解壓:

tar -xzvf fisco-bcos.tar.gz

然后會得到一個fisco-bcos文件,移動到generator目錄下,並賦予運行權限:

chmod +x fisco-bcos

即可跳過./generator --download_fisco ./meta這一步

檢查二進制版本

./meta/fisco-bcos -v

若看到版本號信息則說明二進制文件已經生效可用

初始化鏈證書

這里我就直接用機構A來初始化證書了,首先進入到generator目錄下

cd ~/generator

執行命令:

./generator --generate_chain_certificate ./dir_chain_ca

不出問題的話,在dir_chain_ca目錄下應該出現了證書文件:

root@blockchain-1:~/plumk/generator# ls dir_chain_ca/
ca.crt  ca.key

ca.crt為鏈證書,ca.key為鏈私鑰

機構A、B構建群組1

初始化機構A

教程中為了簡化操作直接生成了機構證書和私鑰,實際應用時應該由機構本地生成私鑰agency.key,再生成證書請求文件,向證書簽發機構獲取機構證書agency.crt。 ————官方文檔如是說到

由於我直接在機構A生成證書了,那就直接在機構A的generator目錄下進行操作

生成機構A的證書:

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA

執行完命令后機構A證書應該就生成到dir_agency_ca/agencyA/目錄下了,我們查看一下:

root@blockchain-1:~/plumk/generator# ls dir_agency_ca/agencyA/
agency.crt  agency.key  ca.crt

然后將這些文件移動到機構A的meta目錄下,這里我就直接移動到本機目錄下

 cp ./dir_agency_ca/agencyA/* ./meta/

初始化機構B

同樣的操作,生成證書,並移動到機構B目錄下,我這里直接用scp傳送過去了

./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB
scp ./dir_agency_ca/agencyB/* root@10.13.1.12:~/generator/meta/

一條聯盟鏈中只能用到一個根證書ca.crt,多服務器部署時不要生成多個根證書和私鑰。一個群組只能有一個群組創世區塊group.x.genesis ———— 官方文檔如是提醒

機構A修改配置文件

編輯機構A下generator/conf/node_deployment.ini文件:

這里並不全是填一樣的ip,一般來講P2P填的是外網ip,而RPC填的是內網ip,這里由於分配到的服務器只有內網ip,我就全填內網了,也只有內網的機子能訪問,實際開發過程中RPC切記不能填外網ip,關於配置文件中的3個接口的詳細資料,具體可看這篇文章

[group]
group_id=1

[node0]
; Host IP for the communication among peers.
; Please use your ssh login IP.
p2p_ip=[機構A ip]
; Listening IP for the communication between SDK clients.
; This IP is the same as p2p_ip for the physical host.
; But for virtual host e.g., VPS servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=[機構A ip]
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545

[node1]
p2p_ip=[機構A ip]
rpc_ip=[機構A ip]
channel_ip=0.0.0.0
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546

機構B修改配置文件

機構B同上

機構A生成並發送節點信息

以下為在機構A上generator目錄下的操作

./generator --generate_all_certificates ./agencyA_node_info

命令操作完可以在agencyA_node_info目錄下發現以下文件:

# 從左至右分別為需要交互給機構A的節點證書,節點P2P連接地址文件(根據node_deployment.ini生成的本機構節點信息)摘自官方
root@blockchain-1:~/plumk/generator# ls agencyA_node_info
cert_10.13.1.11_30300.crt  cert_10.13.1.11_30301.crt  peers.txt

機構生成節點,需要指定其他節點的P2P連接地址,這里我是用scp將P2P地址連接文件發送給機構B

scp ./agencyA_node_info/peers.txt root@10.13.1.12:~/generator/meta/peersA.txt

機構B生成並發送節點信息

與上一步一樣,這里不過多贅述,放上命令

./generator --generate_all_certificates ./agencyB_node_info

生成創世區塊的機構需要節點證書,示例中由A機構生成創世區塊,因此B機構除了發送節點P2P連接地址文件外,還需發送節點證書至機構A

scp ./agencyB_node_info/cert*.crt root@10.13.1.11:~/generator/meta/

同樣的,發送節點P2P連接地址文件:

scp ./agencyB_node_info/peers.txt root@10.13.1.11:~/generator/meta/peersB.txt

機構A生成群組1創世區塊

修改機構A的conf文件夾下的group_genesis.ini,初始內容如下:

[group]
group_id=1

[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
node2=127.0.0.1:30302
node3=127.0.0.1:30303

修改為如下,這里要結合個人主機的ip地址來看,注意端口要對上,與前面node_deployment.ini文件中端口的對應:

;命令解釋
[group]
;群組id
group_id=1

[nodes]
;機構A節點p2p地址
node0=10.13.1.11:30300
;機構A節點p2p地址
node1=10.13.1.11:30301
;機構B節點p2p地址
node2=10.13.1.12:30300
;機構B節點p2p地址
node3=10.13.1.12:30301

教程中選擇機構A生成群組創世區塊,實際生產中可以通過聯盟鏈委員會協商選擇。 ————摘自官方文檔

接下來就是用命令生成群組創世區塊,這步會用到A機構meta文件下面的節點證書,包括A和B

./generator --create_group_genesis ./group

然后我們將這個群組創世區塊分發至機構B

scp ./group/group.1.genesis root@10.13.1.12:~/generator/meta

機構A生成所屬節點

此命令在機構A上操作,會根據node_deployment.ini文件生成節點配置文件:

./generator --build_install_package ./meta/peersB.txt ./nodeA

注意,此步指定的節點P2P連接信息peers.txt為群組內其他節點的鏈接信息,多個機構組網的情況下需要將其合並。 ————摘自官方

此時nodeA文件夾下應該已經有文件了

root@blockchain-1:~/plumk/generator# ls nodeA/
monitor  node_10.13.1.11_30300  node_10.13.1.11_30301  scripts  start_all.sh  stop_all.sh

機構A啟動節點:

bash ./nodeA/start_all.sh

啟動成功:

try to start node_10.13.1.11_30300
try to start node_10.13.1.11_30301
 node_10.13.1.11_30301 start successfully
 node_10.13.1.11_30300 start successfully

機構B生成所屬節點

與機構A類似,不贅述,放代碼:

./generator --build_install_package ./meta/peersA.txt ./nodeB

啟動

bash ./nodeB/start_all.sh

查看群組1節點運行狀態

查看節點log:

tail -f ./node*/node*/log/log*  | grep +++

出現下面這樣的字符串說明成功了

info|2020-05-19 22:40:46.229945|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=3,hash=5d19a569...
info|2020-05-19 22:40:47.237060|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=0,hash=b95fc203...
info|2020-05-19 22:40:50.255719|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=3,hash=8f9eb369...
info|2020-05-19 22:40:51.260244|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=0,hash=2c82cb3f...
info|2020-05-19 22:40:54.276552|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=3,hash=f1f629d9...

搭建控制台

首先安裝一下JAVA JDK

sudo apt install -y default-jdk

輸入java -version出現類似一下版本信息就是成功了

openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

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

我們先下載控制台程序,這個命令會自動為我們配置好控制台的配置文件

./generator --download_console ./   

錯誤解決

這里可能會出現之前下安裝二進制文件的錯誤,處理起來比較麻煩,需要手動操作,首先從下面鏈接下載:

https://github.com/FISCO-BCOS/console/releases/download/v1.0.9/console.tar.gz

然后直接解壓可得console文件夾,如果說文件格式錯誤,多半是下載的時候文件出錯了,多下幾次即可

配置A機構控制台(B機構同理):生成sdk證書

./generator --generate_sdk_certificate ./dir_sdk_ca ./dir_agency_ca/agencyA

執行完命令后,在dir_sdk_ca/sdk目錄下可以看到如下文件:

root@blockchain-1:~/plumk/generator# ls dir_sdk_ca/sdk
ca.crt  node.crt  node.key  sdk.crt  sdk.key

將文件復制至console目錄下的conf文件夾:

cp -rf dir_sdk_ca/sdk/* console/conf/

然后復制樣例文件applicationContext-sample.xml為新文件:

cp applicationContext-sample.xml applicationContext.xml

applicationContext.xml中應該可以看到一個value標簽,修改value標簽為兩個:

<value>[你的ip]:20200</value>
<value>[你的ip]:20201</value>

這樣就配置完了

啟動控制台

回到console目錄,執行:

./start.sh

過一會就能看見控制台了

=============================================================================================
Welcome to FISCO BCOS console(1.0.9)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
 ________ ______  ______   ______   ______       _______   ______   ______   ______
|        |      \/      \ /      \ /      \     |       \ /      \ /      \ /      \
| $$$$$$$$\$$$$$|  $$$$$$|  $$$$$$|  $$$$$$\    | $$$$$$$|  $$$$$$|  $$$$$$|  $$$$$$\
| $$__     | $$ | $$___\$| $$   \$| $$  | $$    | $$__/ $| $$   \$| $$  | $| $$___\$$
| $$  \    | $$  \$$    \| $$     | $$  | $$    | $$    $| $$     | $$  | $$\$$    \
| $$$$$    | $$  _\$$$$$$| $$   __| $$  | $$    | $$$$$$$| $$   __| $$  | $$_\$$$$$$\
| $$      _| $$_|  \__| $| $$__/  | $$__/ $$    | $$__/ $| $$__/  | $$__/ $|  \__| $$
| $$     |   $$ \\$$    $$\$$    $$\$$    $$    | $$    $$\$$    $$\$$    $$\$$    $$
 \$$      \$$$$$$ \$$$$$$  \$$$$$$  \$$$$$$      \$$$$$$$  \$$$$$$  \$$$$$$  \$$$$$$

=============================================================================================
[group:1]>

嘗試deploy一個HelloWorld,應該可以看到類似如下內容:

[group:1]> deploy HelloWorld
contract address: 0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


免責聲明!

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



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