RAFT 配置问题:如何从特定通道中删除节点,但保持它为其他通道提供服务

Posted

技术标签:

【中文标题】RAFT 配置问题:如何从特定通道中删除节点,但保持它为其他通道提供服务【英文标题】:RAFT config question: how to Remove a node from a specific channel, but keeping it servicing other channels 【发布时间】:2019-10-06 15:44:37 【问题描述】:

我读过this guide。

从特定通道中删除一个节点,但保持它为其他通道服务是通过以下方式完成的:

    从频道的频道配置中删除其端点。

    从通道配置中删除其条目(由其证书标识)。

我想知道该怎么做?和configtx中的这些部分有关系吗?

    在以下列表中删除其端点:

    "OrdererAddresses":common.OrdererAddresses,
    

    在 MSP 映射中删除其条目(由其证书标识)

    "Orderer":&ConfigGroup... map<string, *ConfigValue>"MSP":msp.MSPConfig
    

我使用 5 个 RAFT 订购者运行了默认的超级账本样本。 我尝试使用configtxlator 从频道获取频道配置。

peer channel fetch config config_block.pb  -o orderer.example.com:7050 -c mychannel  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

为什么只有一个地址?我应该对其进行更改吗?

  "OrdererAddresses": 
    "mod_policy": "/Channel/Orderer/Admins",
    "value": 
      "addresses": [
        "orderer.example.com:7050"
      ]
    ,

提前感谢您提供有用的提示来配置此“从特定通道中删除节点,但保持它为其他通道提供服务”。

【问题讨论】:

【参考方案1】:

为什么只有一个地址?我应该对其进行更改吗?

  "OrdererAddresses": 
    "mod_policy": "/Channel/Orderer/Admins",
    "value": 
      "addresses": [
        "orderer.example.com:7050"
      ]
    ,

首先,此配置部分包含订购服务节点端点以供对等方连接,您真正需要的是驻留在以下位置的同意器配置:


  "ConsensusType": 
    "mod_policy": "Admins",
    "value": 
      "metadata": 
        "consenters": [
          
            "client_tls_cert": LS0tCg==
            ",
            "host": "127.0.0.1",
            "port": 36003,
            "server_tls_cert": LS0tCg==
            "
          ,
          
            "client_tls_cert": LS0tCg==
            ",
            "host": "127.0.0.1",
            "port": 36000,
            "server_tls_cert": LS0tCg==
            "
          ,
          
            "client_tls_cert": LS0tCg==
            ",
            "host": "127.0.0.1",
            "port": 36006,
            "server_tls_cert": LS0tCg==
            "
          
        ],
        "options": 
          "election_tick": 10,
          "heartbeat_tick": 1,
          "max_inflight_blocks": 5,
          "snapshot_interval_size": 1024,
          "tick_interval": "500ms"
        
      ,
      "state": "STATE_NORMAL",
      "type": "etcdraft"
    
  

因此您需要更新它并根据您的需要删除或添加同意者。

【讨论】:

【参考方案2】:

根据this post,您需要重新配置您的通道以从元素.channel_group.values.OrdererAddresses.value.addresses.channel_group.groups.Orderer.values.ConsensusType.value.metadata.consenters 数组中排除排序节点。

可以在此处找到示例脚本:https://github.com/hyperledger/fabric-test/blob/master/tools/PTE/CITest/scenarios/PTECIutils.sh#L194

【讨论】:

以上是关于RAFT 配置问题:如何从特定通道中删除节点,但保持它为其他通道提供服务的主要内容,如果未能解决你的问题,请参考以下文章

Hyperledger Fabric动态配置Raft节点

如何从 ListView 中删除 Firebase Android 中的特定节点

Raft实战系列,什么是选主?为什么需要选主?如何进行选主?

如何从特定的 UICollectionViewCell 中删除 firebase 子节点 - Swift

快速从音频文件中删除音频通道

如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点