美文网首页
fabric 1.4.4 kafka到raft的迁移

fabric 1.4.4 kafka到raft的迁移

作者: CodingCode | 来源:发表于2020-04-29 06:26 被阅读0次

    fabric 1.4.4 kafka到raft的迁移

    参考文档是:https://hlf.readthedocs.io/en/latest/kafka_raft_migration.html,fabric的这份官方文档已经写的很清楚了,就是没有罗列1,2,3,显得阅读起来不那么优美。

    step 1: 停掉client

    在迁移过程中,不接受客户端访问。停掉所有的peer,以及其他client应用。

    step 2: 做备份

    万一迁移失败可以回退。基于文件系统的备份,是把zookeeper/kafka/orderer的相关目录备份。

    step 3: 切换状态到维护(STATE_MAINTENANCE)模式

    从testchainid channel开始,把所有的channel都切换到维护模式:

    $ jq '.channel_group.groups.Orderer.values.ConsensusType.value.state = "STATE_MAINTENANCE"' ...
    

    参考https://hlf.readthedocs.io/en/latest/channel_update_tutorial.html,如何修改channel的配置信息。

    step 4: 迁移kafka到raft

    从testchainid channel开始,把所有的channel都升级到raft类型:

    参考https://hlf.readthedocs.io/en/latest/channel_update_tutorial.html,如何修改channel的配置信息。

    其实这一步和step 3一样,只不过修改的不同的字段而已。

    step 5: 重启所有orderer节点

    如果一切正常,我们可以看到orderer日志包括如下类似消息:

    2020-04-28 21:11:33.520 UTC [orderer.consensus.etcdraft] serveRequest -> INFO 095 Raft leader changed: 0 -> 1 channel=<userchan1> node=2
    2020-04-28 21:11:52.052 UTC [orderer.consensus.etcdraft] serveRequest -> INFO 0ba Raft leader changed: 0 -> 3 channel=<userchan2> node=2
    2020-04-28 21:11:52.177 UTC [orderer.consensus.etcdraft] serveRequest -> INFO 0bd Raft leader changed: 0 -> 3 channel=testchainid node=2
    

    step 6: 切换状态到正常(STATE_NORMAL)模式

    参考step 3,一样的流程。

    $ jq '.channel_group.groups.Orderer.values.ConsensusType.value.state = "STATE_NORMAL"' ...
    

    step 7: 把client拉起

    迁移完成,继续提供服务。

    附录,kafka和raft修改的配置内容

    kafka类型是这样的:

    {                   
      "channel_group": {
        "groups": {   
          "Orderer": {
            "values": { 
              "ConsensusType": {
                "value": {
                  "metadata": null,
                  "state": "STATE_NORMAL",
                  "type": "kafka"
                },
            ...
          ...
        ...
    }
    

    raft类型是这样的:

    {                   
      "channel_group": {
        "groups": {   
          "Orderer": {
            "values": { 
              "ConsensusType": {
                "value": {
                  "metadata": {
                    "consenters": [
                      { 
                        "client_tls_cert": "<base64_TLS_ClientCert0>",
                        "host": "<rafthost0>",
                        "port": <raftport0>,
                        "server_tls_cert": "<base64_TLS_ServerCert0>"
                      },
                      {
                        "client_tls_cert": "<base64_TLS_ClientCert1>",
                        "host": "<rafthost1>",
                        "port": <raftport1>,
                        "server_tls_cert": "<base64_TLS_ServerCert1>"
                      },
                      {
                        "client_tls_cert": "<base64_TLS_ClientCert2>",
                        "host": "<rafthost2>",
                        "port": <raftport2>,
                        "server_tls_cert": "<base64_TLS_ServerCert2>"
                      }
                    ],
                    "options": {
                      "election_tick": 10,
                      "heartbeat_tick": 1,
                      "max_inflight_blocks": 5,
                      "snapshot_interval_size": 20971520,
                      "tick_interval": "500ms"
                    }
                  },
                  "state": "STATE_NORMAL",
                  "type": "etcdraft"
                },
            ...
          ...
        ...
    }
    

    看这两个kafka和raft配置的差异,基本就比较清楚要怎么改了。

    相关文章

      网友评论

          本文标题:fabric 1.4.4 kafka到raft的迁移

          本文链接:https://www.haomeiwen.com/subject/giywwhtx.html