1. 程式人生 > >總結部署fabirc以及除錯go sdk 遇到的坑

總結部署fabirc以及除錯go sdk 遇到的坑

最近在聯調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這類的複數的形式配置項的還是老老實實全部都填上
  • 熟悉每個配置項的作用以及檔案的作用

另外重要的事情說三遍!
仔細看錯誤日誌!
仔細看錯誤日誌!
仔細看錯誤日誌!