gpt4 book ai didi

hyperledger-fabric - 如何使用 raft 在正在运行的 super 账本结构网络中添加新的排序节点?

转载 作者:行者123 更新时间:2023-12-04 07:59:35 32 4
gpt4 key购买 nike

我想向我现有的运行网络添加一个新的订购者。目前我的网络如下:

docker ps -a

CONTAINER ID        IMAGE                               COMMAND                  CREATED              STATUS              PORTS                                        NAMES
998b93eb81c6 hyperledger/fabric-tools:latest "/bin/bash" About a minute ago Up About a minute cli
87bada2d914b hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:8050->7050/tcp orderer2.example.com
5907f35bb5b4 hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:8750->7050/tcp orderer6.example.com
7876e35f2fb9 hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:10050->7050/tcp orderer4.example.com
fba3185ec9c6 hyperledger/fabric-peer:latest "peer node start" About a minute ago Up About a minute 0.0.0.0:7051->7051/tcp peer0.org1.example.com
8b5e4348f04c hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:9050->7050/tcp orderer3.example.com
a5cffb73ceca hyperledger/fabric-couchdb "tini -- /docker-ent…" About a minute ago Up About a minute 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb0
6be4405ec45b hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:11050->7050/tcp orderer5.example.com
790c9aa84911 hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:8055->7050/tc

我尝试在 etcdraft 文件中添加一个排序器,但它不起作用。我在这里使用 First-network。

最佳答案

您可以按照以下步骤在 RAFT 共识协议(protocol)设置中添加新的排序节点。这是一个漫长的过程,所以我稍后还会添加一个脚本,但现在您可以按照以下步骤操作。在这里,我使用结构样本中的 first-network 来启动具有 5 个订购者的网络。

  • 首先在 OrdererOrgs 下的加密配置中: 规范:为您的订购者创建一个新的主机名(使用与其他人相同的域和名称)。
  • 然后,运行命令 cryptogen extend --config=./crypto-config.yaml注意:“扩展”部分因此它生成您需要的内容而不是重新生成所有内容。
  • 现在首先我们将向 添加订购者系统 channel 然后当它拥有系统 channel 的所有块时,我们将把它移动到 申请 channel 所以请确保你做得正确。
  • 使用 docker exec -it cli bash 进入您的 cli 容器并使用事件的订购者信息引导它,因为您将需要 订购者MSP 签署此更改。

  • 以下是使用 orderer 引导 cli 所需的一些环境变量:
    CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp

    CORE_PEER_ADDRESS=orderer.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/orderer.example.com/tls/ca.crt

    ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

    CHANNEL_NAME=[system-channel-name]
  • 下一步是确保你的所有二进制文件都在你的 cli 容器中工作,因为我们将使用 jq 配置转换器这里的工具将块从 protobuf 转换为 json 并返回
  • 获取最新的配置块:peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
  • 转换为 json 并修剪标题:configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
  • 打开 json 文件寻找 “共识类型”部分,在该标题下应该有另一个标签 “同意者” .现在您必须在上面创建的最新订购者的这一部分中添加新的 TLS 证书。但是这里的证书是 Base64 编码的形式,所以首先你必须注意你的 tlscert 然后你必须在 中进行转换base64 然后将其插入此部分。

  • 在我的情况下,tls 证书在这里:
    crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt

    现在以与其他人相同的方式将其添加到上面给出的部分中,如下所示:
       {
    "client_tls_cert": "xxxxxxxxxxxx",
    "host": "new_orderer.example.com",
    "port": 7050,
    "server_tls_cert": "xxxxxxxxxxxx"
    }

    添加 base64 编码证书而不是上面给出的 xxxxxxxx 并将更改保存为 modified_config.json
  • 将第 6 步中的 json 形式转换为块 configtxlator proto_encode --input config.json --type common.Config --output config.pb
  • 将第 7 步中的 json 转换为块 configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
  • 计算第 8 步和第 9 步中的块之间的增量:configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output orderer_update.pb
  • 将增量更改回 json:configtxlator proto_decode --input orderer_update.pb --type common.ConfigUpdate | jq . > orderer_update.json
  • 现在,我们有一个解码的更新文件 – orderer_update.json – 我们需要将它包装在一个信封消息中。这一步将返回我们之前剥离的头字段。我们将此文件命名为:orderer_update_in_envelope.json
  • echo '{"payload":{"header":{"channel_header":{"channel_id":"$CHANNEL_NAME", "type":2}},"data":{"config_update":'$(cat orderer_update.json)'}}}' | jq . > orderer_update_in_envelope.json
  • 现在我们将把它转换回 Fabric 需要的完全成熟的 protobuf 格式。我们将最终更新对象命名为 orderer_update_in_envelope.pb
  • configtxlator proto_encode --input orderer_update_in_envelope.json --type common.Envelope --output orderer_update_in_envelope.pb
  • 由于您的 cli 已经作为活跃的订购者引导,您可以提交它,因为提交方为您提供了一个免费签名,并且它是您唯一需要的签名:
  • peer channel update -f orderer_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA

    通过检查获取的配置块是否包含(即将添加的)节点的证书,确保将添加的节点是系统 channel 的一部分。
  • 启动一个新的 orderer 容器,该容器基本上与另一个 orderer 相同,除了加密卷指向步骤 2 中的新加密生成,(可能还有不同的端口,具体取决于您的设置)。 最重要的是将此排序器与最新的配置块合并,为此您必须获取配置块 :
  • peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

    然后,将此配置块移动到 channel-artifacts 文件夹并将路径添加到此 环境变量 在订购者的 docker-compose 文件中:
    ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block

    启动排序器后,您可能会注意到此时它已连接到 raft 并且 Steprequests 成功并且拥有您的 channel 和块,因为它使用相同的创世块。但是需要做的是让网络知道这个新排序者的地址。
  • 等待 Raft 节点 从现有节点复制其证书已添加到的所有 channel 的块。完成此步骤后,节点开始为 channel 提供服务。
  • 添加端点 将新添加的 Raft 节点添加到系统 channel 的 channel 配置中,为此你必须再次重复 channel 更新事务的整个过程,就像我们之前从(5 日到 14 日)所做的那样,唯一需要做的不同是在第 7 步中,您必须这样做:

  • 打开 json 文件查找 “订购者地址”部分,在该标题下应该有另一个标签 “地址” .为该数组中的新排序节点添加新 IP 和端口。将更改保存为 modified_config.json,然后按上述方式执行其余操作。

    一旦您的同行获得这个新区块,他们现在就知道新订购者的地址并且可以联系它。
  • 现在您必须通过将其添加到应用程序 channel 来重复所有步骤,为此只需在您的 docker 环境变量中进行更改:
  • CHANNEL_NAME=[application-channel-name]

    您必须将相同的 tls 证书添加到 同意者 部分,然后在复制了应用程序 channel 的块后,您可以在 中添加订购者的端点地址 部分,然后它将开始反射(reflect)您将对应用程序 channel 所做的所有最新更改。

    关于hyperledger-fabric - 如何使用 raft 在正在运行的 super 账本结构网络中添加新的排序节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57571629/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com