fabric框架繁雜的部署程序,會出現各種意料之外的錯誤,由于錯誤提示不明確,往往很簡單的一個疏忽都會浪費大量的時間去找出問題,特此記錄一下浪費了兩天時間的處理程序,
為了在生產環境使用區塊鏈,需要改造之前基于solo共識機制部署的fabric框架,參考該博主(HyperLedger Fabric 1.4 kafka生產環境部署)的方法將solo共識改為kafka集群,程序一切都順風順水,不過將其中的三個zookeeper改成了兩個(后來才發現zookeeper集群數量有問題),在一切都安裝好之后開始在peer節點上創建通道,此時報錯一下錯誤:
Error: failed to create deliver client: orderer client failed to connect to orderer0.example.com:7050: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp 192.168.0.204:7050: connect: connection refused"
乍一看還以為是網路問題,于是逐一測驗網路連接一切正常,此時開始了罵罵咧咧中一個一個的重新一遍,還是同樣的問題,于是在網上重新找了一篇部署的檔案開始比對看看有什么不一樣的地方,于是發現了zookeeper集群數量的問題,
Zookeeper 集群的數量可以是 3, 5, 7, 它值需要是一個奇數以避免腦裂問題(split-brain)的情況,同時選擇大于1的值是為了避免單點故障,如果集群的數量超過7個Zookeeper服務將會無法承受,
重新添加zookeeper2、kafka2、orderer2節點后重啟所有服務,問題照舊,看來不是這里的問題,不過無意中解決了重要的問題,下一步開始逐一測驗服務是否啟動,使用telnet測驗orderer節點發現無法連接,
$telnet 192.168.0.204 7050
Trying 192.168.0.204...
telnet: Unable to connect to remote host: Connection refused
于是查看orderer日志,報錯,網上也找不到同樣的錯誤,又開始罵罵咧咧,
$docker logs -f orderer1.example.com
...
2021-10-13 09:25:49.862 UTC [orderer.consensus.kafka] startThread -> PANI 010 [channel: testchainid] Cannot post CONNECT message = circuit breaker is open
panic: [channel: testchainid] Cannot post CONNECT message = circuit breaker is open
最后翻了翻zookeeper日志,發現這個broken問什么互相訪問不到,打開docker-compose-zookeeper.yaml茅塞頓開,
$docker logs -f zookeeper0
...
2021-10-14 03:15:40,410 [myid:1] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@1025] - Connection broken for id 2, my id = 1, error =
java.io.EOFException
原來是環境變數里面的ZOO_MY_ID問題,部署第三臺zookeeper的時候是從前面復制過來的,這個ID沒改到,于是修改docker-compose-zookeeper.yaml、docker-compose-kafka.yaml兩個檔案的對應內容,重啟,問題解決,
一個困擾了我兩天的問題原來就是這個小小的疏忽造成的,幸好在我罵罵咧咧不斷嘗試的程序中及時發現了問題,哎…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/317519.html
標籤:區塊鏈
