1. 啟動(dòng)鏈
? ? 使用如下命令檢查下鏈節(jié)點(diǎn)是否啟動(dòng)。如果看到有如下 4 個(gè)進(jìn)程,則代表鏈啟動(dòng)成功。如果進(jìn)程數(shù)不滿(mǎn)足 4 個(gè),則進(jìn)入到?nodes/127.0.0.1 目錄,執(zhí)行?./start_all.sh 啟動(dòng)所有的鏈節(jié)點(diǎn)。
ps -ef|grep -i fisco

2. 檢查鏈節(jié)點(diǎn)共識(shí)? ?
? ? 鏈節(jié)點(diǎn)共識(shí)正常,則代表鏈正常,可以進(jìn)行正常的交易處理?,F(xiàn)在先讓我們檢查下節(jié)點(diǎn)共識(shí)是否 ok 。進(jìn)入?nodes/127.0.0.1/node0/log 目錄,ls -lrt ( 文件從舊到新進(jìn)行排列 )??梢钥吹饺缦螺敵?。? ??

????這里我們?nèi)∽钕旅娴?log 文件進(jìn)行查看,作者這里的文件是??log_2021030517.00.log, 各位讀者大大需要根據(jù)自身節(jié)點(diǎn)的實(shí)際情況,取最新的日志文件。執(zhí)行如下命令 tail 命令,可以看到有 “++++” 字樣的輸出,表示節(jié)點(diǎn)共識(shí)正常。這里大家只需要先了解下,節(jié)點(diǎn)有 "+++" 輸出,表示鏈工作正常 ( 可以想象為手機(jī)正常工作,可以用來(lái)打電話(huà),發(fā)短信等) ,具體共識(shí)的作用,大家可以百度下 pbft ,或是查看我的另一篇關(guān)于 group.x.genesis 文件的詳解。

tail -f log_2021030517.00.log |grep +++
3. p2p 配置之 listen_ip ,listen_port? ?
????進(jìn)入nodes/127.0.0.1/node0 目錄,看到其中的 p2p 配置項(xiàng)如下。其中 listen_ip 和 listen_port 的作用和 rpc 中 的 listen_ip , listen_port 的作用如下。具體可參考我的上篇文章 “FISCO BCOS 實(shí)戰(zhàn)教程(三)config.ini 配置詳解之 rpc“

4. p2p 配置之 node.x
? ? 查看 nodes/127.0.0.1/node0/config.ini,我們看到有四個(gè)配置項(xiàng)記錄,分別是 node.0, node.1, node.2, node.3 。還記得我們搭建的時(shí)候的命令嗎,搭鏈的時(shí)候,我們輸入的參數(shù)?127.0.0.1:4 中的 4 指定了?127.0.0.1 這個(gè)機(jī)器上 ( 也就是本機(jī)機(jī)器 ) 有 4 個(gè)節(jié)點(diǎn)。所以這里有 4 個(gè)配置項(xiàng),分別代表每個(gè)節(jié)點(diǎn)。以node0 為例,node0 就是通過(guò)這四個(gè)配置項(xiàng)和其他節(jié)點(diǎn)建立連接的。如果這幾個(gè)配置項(xiàng)配置錯(cuò)誤,會(huì)影響本節(jié)點(diǎn)和其他節(jié)點(diǎn)的共識(shí)。接下來(lái),我們看下看下修改這些配置項(xiàng)會(huì)有什么影響。
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

? ? ? ? 首先,進(jìn)入?nodes/127.0.0.1/node0 目錄,注釋掉 node.0, node.1 , node.2, node.3 這幾個(gè)配置項(xiàng)。然后執(zhí)行 ./stop.sh; ./start.sh 重啟 node0。

? ? 之后,進(jìn)入到?nodes/127.0.0.1/node0/log 目錄,執(zhí)行 ls -lrt 確認(rèn)最新的日志文件。然后執(zhí)行如下命令 ( 作者這里是?log_2021030517.41.log ,各位讀者大大根據(jù)自身的實(shí)際情況修改 ),查看共識(shí)是否正常。從輸出來(lái)看,共識(shí)是正常的,貌似修改這個(gè)配置不會(huì)造成任何影響。下面讓我們繼續(xù)進(jìn)行實(shí)驗(yàn)。
tail -f log_2021030517.41.log | grep ++

? ? 分別進(jìn)入到 nodes/127.0.0.1/node1,??nodes/127.0.0.1/node2,??nodes/127.0.0.1/node3 目錄,修改其中的 config.ini 文件配置如下。注釋 node.0 的配置,然后重啟 node1, node2, node3 節(jié)點(diǎn)。

? ? ? ? 下面我們進(jìn)入到?nodes/127.0.0.1/node0 目錄,然后首先 ls -lrt 查看下最新的日志文件,然后使用 tail -f xxx.log |grep ++? 查看共識(shí)。 這里我們可以看到,grep 沒(méi)有輸出任何信息,表示 node0 沒(méi)有參與到共識(shí)之中。(如果去 node1/node2/node3 的 log 目錄中 grep ++ 查看日志中的共識(shí)信息,可以發(fā)現(xiàn) node1/node2/node3 的共識(shí)是正常的 ) 那么這個(gè)現(xiàn)象的原因是什么呢 ? 當(dāng)我們把 node0/config.ini 中 node.0, node.1, node.2, node.3 的配置注釋后, node0 就不會(huì)主動(dòng)去和 node1/node2/node3 建立 p2p 連接,但又因?yàn)?node1/node2/node3 的 config.ini 中存在 node0 的配置,所以這些節(jié)點(diǎn)會(huì)主動(dòng)和 node0 建立 p2p 連接,注意到?jīng)]有,這里只要有一方發(fā)起建立 p2p 連接就可以成功的建立 p2p 連接。到后面,當(dāng)我們把 node1/node2/node3 的 config.ini 中 node0 的配置項(xiàng)也注釋后,所有的節(jié)點(diǎn)都不主動(dòng)發(fā)起和? node0 的 p2p 連接,所以 node0 和 其他節(jié)點(diǎn)斷鏈了,無(wú)法進(jìn)行共識(shí)。?
? ? 這里,相當(dāng)于模擬了 node0 和 node1/node2/node3 斷鏈的情況。即當(dāng) node0? 和? node1/node2/node3 因?yàn)榫W(wǎng)絡(luò)問(wèn)題和建立 p2p 連接時(shí),會(huì)出現(xiàn)節(jié)點(diǎn) ( node0 ) 共識(shí)異常的情況。關(guān)于共識(shí),可以百度搜索下 pbft 共識(shí)算法,在后續(xù)的文章中也會(huì)進(jìn)行詳細(xì)的說(shuō)明。

? ? 下面,我們繼續(xù)做下面的實(shí)驗(yàn)。node0/config.ini 配置內(nèi)容如下。只保留 node.1 配置項(xiàng),其他配置項(xiàng)注釋。

? ? node1/config.ini 配置如下。配置項(xiàng)正常,沒(méi)有注釋。

? ? node2/node3 的 config.ini 配置項(xiàng)如下。 node0 配置項(xiàng)被注釋?zhuān)渌渲庙?xiàng)正常。

? ? 之后,進(jìn)入到?nodes/127.0.0.1 目錄,執(zhí)行 ./stop_all.sh ;? ./start_all.sh 重啟所有節(jié)點(diǎn)。重啟成功,進(jìn)入到?nodes/127.0.0.1/node0/log 目錄。ls -lrt 找出最新的日志文件,然后執(zhí)行 tail -f xxx |grep ++ 查看共識(shí),我們可以看到共識(shí)正常。這是因?yàn)?node1 和 node0/node2/node3 都有 p2p 連接, node0 可以通過(guò) node1 中轉(zhuǎn),把消息發(fā)送到 node2/node3 上。

5. 配置還原
? ? 為了后續(xù)的實(shí)驗(yàn),我們需要把 node0/node1/node2/node3 中的 config.ini 配置文件還原,去掉其中的注釋?zhuān)缓筮M(jìn)行節(jié)點(diǎn)重啟。
5. 總結(jié)
? ? p2p 配置項(xiàng)是節(jié)點(diǎn)之間的配置項(xiàng),當(dāng)出現(xiàn)網(wǎng)絡(luò)異常時(shí),會(huì)導(dǎo)致共識(shí)節(jié)點(diǎn)無(wú)法共識(shí),就如我們上面模擬的一樣。同時(shí)在節(jié)點(diǎn)遷移和擴(kuò)容的時(shí)候,會(huì)涉及到修改這里的配置,在后續(xù)的章節(jié)中會(huì)有詳細(xì)說(shuō)明。