1. 啟動(dòng)鏈
? ? 使用如下命令檢查下鏈節(jié)點(diǎn)是否啟動(dòng)。如果看到有如下 4 個(gè)進(jìn)程钳降,則代表鏈啟動(dòng)成功厚宰。如果進(jìn)程數(shù)不滿足 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)行正常的交易處理。現(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)打電話触幼,發(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)被注釋,其他配置項(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 配置文件還原搀军,去掉其中的注釋侠驯,然后進(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ō)明诅福。