【问题标题】:Hyperledger Fabric Chaincode instantiation failure in newly joined Organisation新加入的组织中的 Hyperledger Fabric 链码实例化失败
【发布时间】:2019-08-28 15:20:08
【问题描述】:

我们有一个 2 Org Fabric 网络。最初我们正在处理的频道只定义了一个组织“org1”,后来通过添加“org2”将其扩展为具有两个组织。

现在我们想将链码添加到“org2”中的节点。

chaincode可以安装,但是在“org1”中实例化时,在“org2”中实例化失败。

我们能够在日志中看到的唯一错误是 Gossip 问题。 “org2”中的节点显然不能加入 Gossip 网络。在“org2”中启动对等点时,我们在对等点日志中看到以下消息:

2019-08-28 13:48:41.804 UTC [gossip.comm] Handshake -> WARN 21b Authentication failed: Could not acquire policy manager for channel mychannel
2019-08-28 13:48:41.804 UTC [gossip.gossip] func1 -> WARN 21c Deep probe of peer0-org1-ch:7051 failed: Could not acquire policy manager for channel mychannel

“org2”中似乎存在一个潜在问题,即“无法获取策略管理器”。

这是无法在“Org2”中实例化链码的根本原因吗?

什么是策略管理器,是什么导致它在“org2”中不可用?

请注意,我们的创世块创建时只知道“org1”:

Profiles:
    MyConsOrdererGenesis:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            MyConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    MyChannel:
        <<: *ChannelDefaults
        Consortium: MyConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2

【问题讨论】:

    标签: hyperledger-fabric


    【解决方案1】:

    让我先说一下概念,

    在超级账本结构中,可以将链码安装到对等节点中并实例化到唯一时间的通道

    以这个场景为例:

    初始设置:

    一个组织,两个同行和一个渠道 如果假设您在两个对等点上安装链码 abc 并在通道上实例化一次

    稍后如果您将第二个 Org 添加到频道并加入第二个 org peers,那么您所要做的就是安装,无需实例化。

    当您在运行中调用或查询第二个组织对等方时,将创建链码容器。

    确保您在对等体中具有以下提到的 env,以便 gossip 正常工作

      - CORE_PEER_GOSSIP_BOOTSTRAP=[org1-peer1:7051,org1-peer2:7051] #<a list of peer endpoints within the peer's org>
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=org1-peer2:7051
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
    

    我强烈建议更新锚节点,查看Anchor peer vs CORE_PEER_GOSSIP_EXTERNALENDPOINT? 我已经提到了更新锚节点的明确说明

    【讨论】:

    • 这就是理论。在实践中,情况并非如此。
    • 我已经完成了将近 7 个生产项目,并且很多时候我注意到它运行良好,我是它实际发生的见证人。
    • 给我一个 aws ec2 实例,我将向您展示带有示例 org 的演示。我的 Skype ID:nnrthota
    • 不幸的是,在这种情况下,我们得到了链码不存在的消息。我确信一旦 Gossip 起作用,它就会起作用,因此问题是关于 Gossip 问题。
    • 我确认已设置“CORE_PEER_GOSSIP_USELEADERELECTION=true”和“CORE_PEER_GOSSIP_ORGLEADER=false”。我们目前没有“CORE_PEER_GOSSIP_BOOTSTRAP”的配置。我会添加并更新。
    【解决方案2】:

    首先它与 Gossip 初始化无关。每个通道只能实例化一次链码。这意味着对于第二个组织,在您的情况下 Org2 您只需要等到对等方将同步并拉取已经包含您的链码的实例化交易的块。

    现在,为了清楚说明您需要实例化 Gossip,有两个特殊原因:

    1. 允许跨组织状态转移落后于同行或网络分区中的某些组织无法访问排序服务。
    2. 启用私有数据,因为它通过 gossip 网络跨组织域分发。

    无论如何,失败与 Gossip 本身无关。您只是不能两次实例化链码。

    如果您想启用 gossip,您只需为您的两个组织更新锚节点,例如为每个发布其锚节点的组织运行配置更新事务,这将用于建立跨组织域通信。

    【讨论】:

    • 感谢 Artem 对 Gossip 的澄清。但是,我们已经在同一通道上安装并实例化了 new 链码,甚至创建了一个新通道并在其上安装了链码。结果总是一样的:Org1 得到新的链码,Org2 没有。
    • @ISparkes 你说 Org2 没有链码是什么意思?
    • Org1 中的链码已安装并实例化。在 Org2 中已安装但未实例化
    • 请详细说明未实例化是什么意思,如何检查?您从 Org2 向对等方发送事务但它失败了?您可以发布该对等方的日志吗?你是否等到这个对等节点赶上所有块,包括实例化你的链码的块?
    • 我们正在使用“peer chaincode list --instantiated”来检查它。我们从“org1”实例化。我们已经确认使用发现 cli 在任何地方都可以看到相同的块高度。
    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多