相關概念
星形拓撲和并行多組
如下圖,星形組網拓撲和并行多組組網拓撲是區塊鏈應用中使用較廣泛的兩種組網方式。
- 星形拓撲:中心機構節點同時屬于多個群組,運行多家機構應用,其他每家機構屬于不同群組,運行各自應用;
- 并行多組:區塊鏈中每個節點均屬于多個群組,可用于多方不同業務的橫向擴展,或者同一業務的縱向擴展。
星形拓撲和并行多組的區別,星星之后一個中心節點同時屬于多個機構,向外延伸的節點,各自屬于不同群組。
并行多組,是里面的節點均屬于多個群組。
下面以構建八節點星形拓撲
和四節點并行多組區塊鏈
為例,詳細介紹多群組操作方法。
安裝依賴
# Ubuntu
$ sudo apt install -y openssl curl
星形拓撲
本章以構建上圖所示的單機、四機構、三群組、八節點的星形組網拓撲為例,介紹多群組使用方法。
星形區塊鏈組網如下:
agencyA
:在127.0.0.1
上有2個節點,同時屬于group1、group2、group3
;agencyB
:在127.0.0.1
上有2個節點,屬于group1
;agencyC
:在127.0.0.1
上有2個節點,屬于group2
;agencyD
:在127.0.0.1
上有2個節點,屬于group3
。
搭建星形區塊鏈
build_chain.sh支持任意拓撲多群組區塊鏈構建,可使用該腳本構建星形拓撲區塊鏈節點配置文件夾:
準備依賴
- 創建操作目錄
mkdir -p ~/fisco && cd ~/fisco
- 獲取build_chain.sh腳本
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.sh
生成星形區塊鏈系統配置文件
cat > ipconf << EOF
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
EOFcat ipconf
空格分隔的參數分別表示如下含義:
# ip:num: 物理機IP以及物理機上的節點數目
# agency_name: 機構名稱
# group_list: 節點所屬的群組列表,不同群組以逗號分隔
127.0.0.1:2 agencyA 1,2,3
127.0.0.1:2 agencyB 1
127.0.0.1:2 agencyC 2
127.0.0.1:2 agencyD 3
使用build_chain腳本構建星形區塊鏈節點配置文件夾
bash build_chain.sh -f ipconf -p 30300,20200,8545
# 生成的節點文件如下
nodes
|-- 127.0.0.1
| |-- fisco-bcos
| |-- node0
| | |-- conf #節點配置目錄
| | | |-- ca.crt
| | | |-- group.1.genesis
| | | |-- group.1.ini
| | | |-- group.2.genesis
| | | |-- group.2.ini
| | | |-- group.3.genesis
| | | |-- group.3.ini
| | | |-- node.crt
| | | |-- node.key
| | | `-- node.nodeid # 記錄節點Node ID信息
| | |-- config.ini #節點配置文件
| | |-- start.sh #節點啟動腳本
| | `-- stop.sh #節點停止腳本
啟動節點
bash nodes/127.0.0.1/start_all.sh
查看群組共識狀態
# 查看node0 group1是否正常共識(Ctrl+c退回命令行)
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:1.*++"# 查看node0 group2是否正常共識
$ tail -f nodes/127.0.0.1/node0/log/* | grep "g:2.*++"
...# ... 查看node1, node2節點每個群組是否正常可參考以上操作方法...# 查看node3 group1是否正常共識
$ tail -f nodes/127.0.0.1/node3/log/*| grep "g:1.*++"
.# 查看node5 group2是否正常共識
$ tail -f nodes/127.0.0.1/node5/log/* | grep "g:2.*++"
配置并啟動控制臺
也是一樣,那腳本,啟動,拷貝控臺臺證書,拷貝控制臺文件。
cd ~/fisco# 獲取控制臺
$ curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 拷貝控制臺證書
$ cp nodes/127.0.0.1/sdk/* console/conf/ -r# 獲取node0的channel_listen_port
$ grep "channel_listen_port" ~/fisco/nodes/127.0.0.1/node*/config.ini# 拷貝控制臺配置
$ cp console/conf/config-example.toml console/conf/config.tomlbash console/start.sh
向群組發交易
switch 2 # 切換群組
deplay HelloWorld 群組1,2都部署一次復制標簽
tail -f nodes/127.0.0.1/node0/log/log* | grep g:2.*++
發現塊高增加到2
節點加入群組
本章以將node2加入group2為例,介紹如何在已有的群組中,加入新節點。
通過 ls nodes/127.0.0.1/node2/conf/
目前屬于 grop 1
1.跟擴容新節點差不多,不就是先獲取節點腳本,生成腳本文件,復制節點配置文件,修改配置
2.然后就是復制group 文件,決定能不能再控制臺正常加入群組
# 進入節點目錄cd ~/fisco/nodes/127.0.0.1# ... 從node0拷貝group2的配置到node2...
cp node0/conf/group.2.* node2/conf# ...重啟node2(重啟后請確定節點正常共識)...
bash node2/stop.sh && bash node2/start.sh# 獲取node2的node id
cat node2/conf/node.nodeid
通過控制臺向group2發送命令,將node2加入到group2
cd ~/fiscobash console/start.sh 2 # 直接啟動群組2控制臺# node2 添加到共識節點列表
getSealerListaddSealer nodeidgetSealerList# 若在group2部署合約,node2日志塊高發生變化證明加入群組成功
deploy HelloWorld
tail -f node2/log/* | grep "g:2.*++"
并行多組
并行多組區塊鏈搭建方法與星形拓撲區塊鏈搭建方法類似,以搭建四節點兩群組
并行多鏈系統為例:
- 群組1:包括四個節點,節點IP均為
127.0.0.1
; - 群組2:包括四個節點,節點IP均為
127.0.0.1
。
這樣對比,就tm對比一條鏈4個節點,多了一個群組。
構建單群組四節點區塊鏈
mkdir -p ~/fisco && cd ~/fiscocurl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/build_chain.sh && chmod u+x build_chain.shbash build_chain.sh -l 127.0.0.1:4 -o multi_nodes -p 20000,20100,7545 # 這次指定了節點目錄# 啟動bash multi_nodes/127.0.0.1/start_all.sh# 檢查共識情況,(只有群組1)# 另外3個點共識情況自行檢查tail -f nodes/127.0.0.1/node0/log/log* | grep ++
將group2加入區塊鏈
并行多組區塊鏈每個群組的genesis
配置文件幾乎相同,但[group].id不同,為群組號。
# 進入節點目錄
cd ~/fisco/multi_nodes/127.0.0.1# 拷貝group1的配置
cp node0/conf/group.1.genesis node0/conf/group.2.genesis
cp node0/conf/group.1.ini node0/conf/group.2.ini# 修改群組ID
vim node0/conf/group.2.genesis 修改 id=2
cat node0/conf/group.2.genesis | grep id 如過id=2,修改成功# 將配置拷貝到各個節點
cp node0/conf/group.2.genesis node1/conf/group.2.genesis
cp node0/conf/group.2.genesis node2/conf/group.2.genesis
cp node0/conf/group.2.genesis node3/conf/group.2.genesis
cp node0/conf/group.2.ini node1/conf/group.2.ini
cp node0/conf/group.2.ini node2/conf/group.2.ini
cp node0/conf/group.2.ini node3/conf/group.2.ini# 重啟各個節點
bash stop_all.sh
bash start_all.sh# 查看共識,發現多了個2群組
tail -f node0/log/log* | grep ++
向群組發交易
配置控制臺
cd ~/fiscocurl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v2.9.2/download_console.sh && bash download_console.sh# 獲取channel_port
$ grep "channel_listen_port" multi_nodes/127.0.0.1/node0/config.ini
multi_nodes/127.0.0.1/node0/config.ini: channel_listen_port=20100# 拷貝控制臺證書
cp nodes/127.0.0.1/sdk/* console/conf/ -r
# 拷貝控制臺配置
cp console/conf/config-example.toml console/conf/config.toml
# 修改控制臺連接節點的端口,127.0.0.1:20200,20201
vim console/conf/config.toml
修改為20100,20101
發現控制臺連接節點的端口
,是node0的channel_listen_port
。
1.不對不對,假如說,在節點中定義了2個群組。那么群組id是不同的,其余大部分相同。
2.另外,我要在控制臺中去連接這個2個群組,他肯定連接你這個鏈,通過node0的chanal_listen_port,因為我是2個群組,20100自動延伸為 + 1。
通過控制臺向群組發交易
# 啟動控制臺
bash console/start.shswitch 2 # 切換群組
deplay HelloWorld 群組1,2都部署一次復制標簽
tail -f multi_nodes/127.0.0.1/node0/log/log* | grep g:2.*++
發現塊高增加到2