• redis集群客户端实现中的注意事项


    在测试的过程中,我尝试搭建一个redis集群,实现redis集群的客户端,如果需要达到redis官方的标准,需要满足处理ASK错误。我搭建的redis集群部署如下(ip进行了修改):

    主节点: 1.1.1.1 7000      1b220196cbf1b2d870366d05097c1a56ff096479   0-5460

    主节点: 1.1.1.1 7001       6516f46a15a2745dd16e12b608f2420bdedf384e  5461-10922

    主节点: 1.1.1.2 7000      e2354ceeaf53451c932f6536d27a39e1be1090da   10923-16383

    从节点:1.1.1.2 7001 -> 1.1.1.1 7000       5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c     

    从节点:1.1.1.3 7000 -> 1.1.1.1 7001       fdc657db984ee6e00ede607413ede3458c1c45a2

    从节点:1.1.1.3 7001 -> 1.1.1.2 7000      35fff3049164196580b4398c6cca6a0398ca99bb

    为了测试ASK错误,我打算把1.1.1.1 7000中的一个槽位2中的一个key: vgqpx,从主节点1.1.1.1 7000,移动到1.1.1.1 7001,

    首先,我对节点1.1.1.1 7001调用

    CLUSTER SETSLOT 2 IMPORTING 1b220196cbf1b2d870366d05097c1a56ff096479

    然后对节点1.1.1.1 7000调用

    CLUSTER SETSLOT 2 MIGRATING 6516f46a15a2745dd16e12b608f2420bdedf384e

    然后对节点 1.1.1.1 7000调用

    CLUSTER GETKEYSINSLOT 2 10

    发现槽位中只有 vgqpx,然后将这个节点移动到 1.1.1.1 7001(还是对1.1.1.1 7000)调用:

    MIGRATE 1.1.1.1 7001 vgqpx 0 10

    操作到此为止。

    这时候,查看cluster nodes和cluster slots,和预想的结果一致。但是,如果这时候,我们把1.1.1.1 7000 kill掉。会看到如何下的redis nodes信息:

    1) 1) (integer) 0
       2) (integer) 1
       3) 1) "1.1.1.2"
          2) (integer) 7001
          3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
    2) 1) (integer) 3
       2) (integer) 5460
       3) 1) "1.1.1.2"
          2) (integer) 7001
          3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
    3) 1) (integer) 2
       2) (integer) 2
       3) 1) "1.1.1.1"
          2) (integer) 7000
          3) "1b220196cbf1b2d870366d05097c1a56ff096479"
    4) 1) (integer) 5461
       2) (integer) 10922
       3) 1) "1.1.1.1"
          2) (integer) 7001
          3) "6516f46a15a2745dd16e12b608f2420bdedf384e"
       4) 1) "1.1.1.3"
          2) (integer) 7000
          3) "fdc657db984ee6e00ede607413ede3458c1c45a2"
    5) 1) (integer) 10923
       2) (integer) 16383
       3) 1) "1.1.1.2"
          2) (integer) 7000
          3) "e2354ceeaf53451c932f6536d27a39e1be1090da"
       4) 1) "1.1.1.3"
          2) (integer) 7001
          3) "35fff3049164196580b4398c6cca6a0398ca99bb"
    

      然后,我们将1.1.1.1 7000重新启动,这个节点会自动加入集群。然后再重新调用cluster slots,结果如下:

    1) 1) (integer) 0
       2) (integer) 1
       3) 1) "1.1.1.2"
          2) (integer) 7001
          3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
       4) 1) "1.1.1.1"
          2) (integer) 7000
          3) "1b220196cbf1b2d870366d05097c1a56ff096479"
    2) 1) (integer) 3
       2) (integer) 5460
       3) 1) "1.1.1.2"
          2) (integer) 7001
          3) "5ff7670b43c0067fa54ab32d5ce4fad4c103cf4c"
       4) 1) "1.1.1.1"
          2) (integer) 7000
          3) "1b220196cbf1b2d870366d05097c1a56ff096479"
    3) 1) (integer) 5461
       2) (integer) 10922
       3) 1) "1.1.1.1"
          2) (integer) 7001
          3) "6516f46a15a2745dd16e12b608f2420bdedf384e"
       4) 1) "1.1.1.3"
          2) (integer) 7000
          3) "fdc657db984ee6e00ede607413ede3458c1c45a2"
    4) 1) (integer) 10923
       2) (integer) 16383
       3) 1) "1.1.1.2"
          2) (integer) 7000
          3) "e2354ceeaf53451c932f6536d27a39e1be1090da"
       4) 1) "1.1.1.3"
          2) (integer) 7001
          3) "35fff3049164196580b4398c6cca6a0398ca99bb"
    

      在这种情况下,cluster slots返回的槽位2的信息很奇怪,要么返回了已经断开连接的那个节点ip和port,要么,根本就不返回。对于这种特殊情况,我暂时不确定是否为redis的bug,还是我们需要特殊处理,先把这个记在这里。

  • 相关阅读:
    数据分析day04
    数据分析day03
    数据分析 day02
    Index of /android/repository
    WPF ListView 数据懒加载
    WPF TextBlock 文字超长截断并显示省略符号
    android adb socket 通信
    android 获取 cpu 频率信息
    Android 联系人导入导出(VCard格式)
    Android Contact 导入导出 vcf格式(不依赖第三方库)
  • 原文地址:https://www.cnblogs.com/albizzia/p/13501549.html
Copyright © 2020-2023  润新知