如何向正在运行的超级分层结构网络添加更多订购者节点

时间:2018-05-03 11:24:50

标签: hyperledger-fabric

我设置了一个带有1个订购者节点的超级结构网络,但不知道如何将更多的订购者节点添加到正在运行的生产超级广告网络。

任何帮助都将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:12)

首先,您的网络订购服务必须设置为Kafka,而不是单独。您可以在OrdererType下的configtx.yaml文件中执行此操作。然后,您还必须创建kafka经纪人,动物园管理员并配置所有这些。如果你不熟悉这个,我发现试验和研究这个回购https://github.com/keenkit/fabric-sample-with-kafka非常有帮助。

假设您有一个使用Kafka订购服务的工作网络,则通过频道更新添加额外的订购者,这与添加新组织非常相似。涉及了很多步骤,但它们都列在此处并在此处进行了解释http://hyperledger-fabric.readthedocs.io/en/release-1.1/channel_update_tutorial.html。我建议您了解如何首先添加组织,但如果您觉得舒适,那么添加订购者的唯一区别是:

  • 显然没有必要创建新的org加密材料,但你需要另一个订货人的加密材料
  • 而不是运行将新的org加密材料添加到网络的命令jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json,打开json文件并查找“OrdererAddresses”。在另一个标签“地址”下应该有一系列的订货人。在这里添加您的订货人,只需将文件保存为modified_config.json即可。然后,您可以直接运行相同的命令。
  • 当您使用peer channel signconfigtx -f org3_update_in_envelope.pb签署信封时,使用有效订货人引导您的CLI并使用OrdererMSP,否则订货人将拒绝您的交易。用于添加新组织的组织MSP将无效。

为了帮助排除故障,我发现最初启动上面创建的github repo的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容器并使用有效的订购者信息进行引导,因为您需要OrdererMSP来签署此更改。
  5. Bootstrap,例如(你的可能会有所不同):CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/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. 隐蔽json表单第7步阻止configtxlator proto_encode --input config.json --type common.Config --output config.pb
    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. 中的块之间的差值
    9. 将delta更改回json configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json
    10. 将json包装在标题echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json
    11. 将其转换回阻止configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb
    12. 由于您是一个活跃的订货人,因此您可以提交它,因为提交方为您提供免费签名并且是您唯一需要的签名peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer0.example.com:7050 --tls --cafile $ORDERER_CA
    13. 一旦你的同伴获得这个新区块,他们现在知道新订货人的地址并可以联系它。

答案 1 :(得分:0)

加上Antonio的答案,您将需要将系统通道的创世纪模块放入新的订购器中。

您可以通过从现有订购者那里获取并选择频道名称作为testchainid(默认名称)来获取它