web-dev-qa-db-ja.com

実行中のハイパーレジャーファブリックネットワークにオーダーノードを追加する方法

1つの注文ノードでハイパーレジャーファブリックネットワークをセットアップしましたが、実行中の本番ハイパーレジャーネットワークに注文ノードを追加する方法がわかりません。

助けていただければ幸いです、ありがとう。

11
Rohit Khatri

まず、ネットワーク注文サービスは、単独ではなく、Kafkaサービスとして設定する必要があります。 OrdererTypeの下のconfigtx.yamlファイルでこれを行うことができます。次に、kafkaブローカー、動物園の飼育係を作成し、それらすべてを構成する必要があります。これに慣れていない場合は、このリポジトリの実験と調査が非常に役立ちます https://github.com/keenkit/fabric-sample-with-kafka

Kafka Ordering Serviceを備えたネットワークが機能していると仮定すると、追加の注文者の追加は、新しい組織の追加と非常によく似たチャネル更新を介して行われます。かなりの数の手順が含まれますが、それらはすべてここにリストされ、説明されています http://hyperledger-fabric.readthedocs.io/en/release-1.1/channel_update_tutorial.html 。最初に組織の追加がどのように機能するかを理解することをお勧めしますが、快適に感じる場合は、注文者を追加する場合の唯一の違いは次のとおりです。

  • 明らかに、新しい組織の暗号素材を作成する必要はありませんが、別の注文者のために暗号素材が必要になります
  • 新しい組織暗号素材をネットワークに追加するコマンド_jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json_を実行する代わりに、jsonファイルを開いて「OrdererAddresses」を探します。別のタグ「addresses」の下に注文者の配列があるはずです。ここに注文者を追加し、ファイルをmodified_config.jsonとして保存します。その後、同じコマンドを実行して先に進むことができます。
  • _peer channel signconfigtx -f org3_update_in_envelope.pb_ bootstrapを使用してエンベロープに署名すると、アクティブな注文者とCLIを使用し、OrdererMSPを使用します。そうしないと、注文者はトランザクションを拒否します。新しい組織を追加するために使用される組織MSPは機能しません。

トラブルシューティングに役立てるために、上記のgithubリポジトリが作成する2 Ordererセットアップを最初に起動してから、1 Ordererを削除してから、再度追加する方が簡単であることがわかりました。その後、3番目を追加してさらに実験します。

補足として、チャネルの更新で変更できる他のすべてのものをここで見つけることができます: http://hyperledger-fabric.readthedocs.io/en/release-1.1/config_update.html 。 「ここをクリックして構成を表示」をクリックして、json構成の例を表示します(注:例はKafkaではなくソロです)。

ステップバイステップ(要求に応じて):

  1. OrdererOrgsの下のcrypto-config:仕様:注文者の新しいホスト名を作成します(他のドメインと名前と同じドメインと名前を使用します)。
  2. コマンド_cryptogen extend --config=./crypto-config.yaml_を実行します。注:「extend」部分は、すべてを再生成するのではなく、必要なものを生成するようにします。
  3. 暗号ボリュームがステップ2で生成された新しい暗号を指していることを除いて、別の注文者と本質的に同一である新しい注文コンテナをスピンアップします(そしておそらくセットアップに応じて異なるポート)。この時点で、kafkaブローカーに接続されており、同じジェネシスブロックを使用しているため、チャネルとブロックがあります。ただし、実行する必要があるのは、ネットワークにこの新しい注文者のアドレスを認識させる必要があることです。
  4. _docker exec -it cli bash_をCLIコンテナに入れ、bootstrapアクティブな注文者情報を入力します。この変更を承認するにはOrdererMSPが必要になるためです。

ブートストラップ(例: (あなたのものは異なるかもしれません):_CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/[email protected]/msp_

_CORE_PEER_ADDRESS=orderer0.example.com:7050_

_CORE_PEER_LOCALMSPID=OrdererMSP_

_CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/ca.crt_

_ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem_

_CHANNEL_NAME=mychannel_

  1. cLIコンテナにjqをインストールして、ブロックをjsonに変換し、_apt update && apt install -y jq_に戻します。
  2. 最新の構成ブロックをフェッチします_peer channel fetch config config_block.pb -o orderer0.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA_
  3. jsonに変換し、ヘッダーをトリムします_configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json_
  4. jsonファイルを開いて「OrdererAddresses」を探し、その見出しの下に別のタグ「addresses」があるはずです。そのアレイに新しい注文者の新しいIPとPORTを追加します。変更をmodified_config.jsonとして保存します
  5. _configtxlator proto_encode --input config.json --type common.Config --output config.pb_をブロックするための秘密のjsonフォームステップ7
  6. jsonをステップ8からブロック_configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb_に変換します
  7. ステップ9と10でブロック間のデルタを計算します_configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb_
  8. デルタをjsonに戻します_configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json_
  9. jsonをヘッダーでラップしますecho '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json
  10. ブロックに戻す_configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb_
  11. あなたはアクティブな注文者としてbootstrapなので、送信するだけで送信できます。送信側から無料の署名が提供され、必要なのは_peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer0.example.com:7050 --tls --cafile $ORDERER_CA_だけです。

ピアがこの新しいブロックを取得すると、新しい注文者のアドレスがわかり、連絡できるようになります。

18

アントニオの答えに加えて、システムチャネルのジェネシスブロックを新しい注文者にボリューム化する必要があります。

既存の注文者から取得し、testchainid(デフォルト名)となるチャネル名を選択することで取得できます。

0
CChyuan