總結部署fabirc以及除錯go sdk 遇到的坑
阿新 • • 發佈:2018-11-14
最近在聯調fabirc網路遇到了很多坑,主要是對fabric不夠熟悉,所以解決問題的時候即使看到了錯誤資訊,也不能很快的確定具體是那裡出現了問題,而且問題確實谷歌不到,所以簡單記錄一下。
坑1:
CA Certificate is not valid, (SN: 234551506279605485472670524472959491447): could not obtain certification chain: the supplied identity is not valid: x509: certificate has expired or is not yet valid"
證書過期,錯誤提示的已經很明顯了,但是仔細看錯誤資訊顯示過期時間還沒到(這裡我沒把錯誤截全),但是還重新生成了證書,依然出現過期的錯誤。
解決辦法:
- 原來是伺服器上的時間問題,同步一下時間就好了(這裡我用的虛擬機器,正常的機器應該不會有這個問題…)
坑2:
Error: proposal failed (err: bad proposal response 500)
加入通道的時候出現這個錯誤,往往是重複加入channel了,這個問題主要是吃虧在沒仔細分析錯誤志,出現問題還是先不要複製貼上百度。
解決辦法:
- 將例項進行回滾
- 修改通道名稱和組織名
坑3:
使用fabric-go-sdk 例項化時報錯:users not found
讀取config.yml檔案來建立一個sdk 的例項發生的error,排除自己方法傳參無誤,配置檔案的使用者名稱和orgname 也沒有問題,谷歌也查不到,只能對著原始碼中的示例一個個去對比,對比哪裡缺少使用者資訊的配置。
解決辦法:
- 在organizations 這一層下對應的org 新增上相應的使用者名稱和證書路徑
organizations org1: users: Admin: cert: path: ****.pem User1: cert: path: ****.pem
坑4:
sending deploy transaction proposal failed: Transaction processing for endorser [peer0.org-maggie.ansible-example.ee-chain.com:7051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection timed out [peer0.org-maggie.ansible-example.ee-chain.com:7051]
sdk 例項化鏈碼時出現的錯誤:先去看了另一臺機器上的7051埠的程序是不是正常啟動的,確認了hosts 檔案也沒有問題,仔細想想peer節點部署都是ansible統一處理的,如果有問題的話,之前的步驟應該是不會成功的。而且為什麼是其中一臺機器連結正常的。
解決辦法:
- 在entityMatchers 配置項下 也需要加入
peer0.org-maggie.ansible-example.ee-chain.com:7051
對應的機器配置
entityMatchers:
peer:
- pattern: (\w*)org-martin(\w*)
urlSubstitutionExp: 47.96.230.111:7051
eventUrlSubstitutionExp: 47.96.230.111:7053
sslTargetOverrideUrlSubstitutionExp: peer0.org-martin.ansible-example.ee-chain.com
mappedHost: peer0.org-martin.ansible-example.ee-chain.com
- pattern: (\w*)org-maggie(\w*)
urlSubstitutionExp: 121.196.210.111:7051
eventUrlSubstitutionExp: 121.196.210.111:7053
sslTargetOverrideUrlSubstitutionExp: peer0.org-maggie.ansible-example.ee-chain.com
mappedHost: peer0.org-maggie.ansible-example.ee-chain.com
orderer:
- pattern: (\w*)org-martin(\w*)
urlSubstitutionExp: 47.96.230.111:7050
sslTargetOverrideUrlSubstitutionExp: orderer0.org-martin.ansible-example.ee-chain.com
mappedHost: orderer0.org-martin.ansible-example.ee-chain.com
坑5:
sending deploy transaction proposal failed: Transaction processing for endorser [121.196.210.111:7051]: Endorser Client Status Code: (23) CHAINCODE_NAME_NOT_FOUND. Description: cannot get package for chaincode (scc:1.0)
例項化鏈碼鏈碼時出現的問題:基於上一個坑,配置檔案沒錯的情況下,錯誤資訊是某臺機器上沒有這個包
解決辦法:
- 安裝鏈碼時應該在所有的peer節點上進行安裝
- 如果鏈碼時多個檔案,引入了一些第三方包,最好是直接將鏈碼放gopath下(之前遇到了這個問題,但是現在復現的話,又沒報錯了)
還有一部分問題,過程中沒有記錄,不願破壞現在的測試網路,所以就沒有覆盤,下次記錄:P
原理問題之後複習了fabirc 的理論知識在做補充
總結常見套路:
環境問題
- 測試除錯的時候還是要保證網路乾淨避免channel已存在,或者組織重複加入channel 等等問題
網路連線問題:
- 檢查程序是否正常執行
- 配置檔案中ip/hosts相關的配置項沒有寫錯
- 檢查容器是否正常
- hosts 檔案是不是不對
證書問題:
- 路徑問題或者用錯了證書
- 過期
鏈碼問題:
- 多個peer節點的網路不能只在一個peer節點上安裝鏈碼
- 放gopath下
- 例項化引數不要搞錯了在go sdk 中都是
[][]byte{[]byte("init"), []byte("A"), []byte("100"), []byte("B"), []byte("200")}
的形式
配置檔案問題:
- 不熟悉的情況下遇到配置項是
entityMatchers,organizations,orderers,peers
這類的複數的形式配置項的還是老老實實全部都填上 - 熟悉每個配置項的作用以及檔案的作用
另外重要的事情說三遍!
仔細看錯誤日誌!
仔細看錯誤日誌!
仔細看錯誤日誌!