ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis Cluster 集群节点维护 (三)

2020-05-09 20:55:02  阅读:324  来源: 互联网

标签:... 6379 redis Redis Cluster 10.10 slots 节点


Redis Cluster 集群节点维护:

集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器等
增加节点和删除节点会涉及到已有槽位的重新分配及数据迁移。

一 ) Redis Cluster节点添加:

# 1.1 节点添加环境:
           主从 1       主从 2     主从 3       主从4(待添加) 
master   10.10.5.11   10.10.5.12  10.10.5.13    10.10.5.17
slave    10.10.5.15   10.10.5.16  10.10.5.14    10.10.5.18

# 1.2 三个节点的slots区间是:
      节点A覆盖0-5460;
      节点B覆盖5461-10922;
      节点C覆盖10923-16383.


# 1.3  

二 ) 集群维护之动态添加节点:

# 2.1 增加节点需要与之前的redis node 版本相同,配置一致,然后分别启动两台 redis nodes(一主一从). 
案例:
   因公司业务发展迅猛现有的三主三从 Redis Cluster 架构可能无法满足现有业务的并发写入需求,因此公司采购服务器,需要将它动态添加到集群当中,因为是生产业务的redis cluster 不能影响使用和数据丢失,整体如下:

同步之前redis node 的配置文件到 10.10.5.17 - 18 redis 编译安装目录,注意配置文件的监听ip

# 2.2 提前做好两台主机的redis,安装并启动redis.
    master   10.10.5.17  
    slave    10.10.5.18
    控制节点 10.10.5.11
    
    2.2.1  将17 18两台主机都加入到cluster 集群。
    2.2.2  将18加入17变成slave. (刚加入cluster 两者均为master).
    2.2.3  给新加入的节点(17)分配槽位.
    

# 2.3 在控制节点上操作添加命令:
  # 添加一个node节点, 后面需要跟着集群内的主机(任意一台即可),别忘记加端口号.
 ./redis-trib.rb add-node 10.10.5.17:6379 10.10.5.16:6379
 ./redis-trib.rb add-node 10.10.5.18:6379 10.10.5.16:6379
  
# 2.4  进入集群内执行命令
  redis-cli  -a 123456 cluster nodes    # 查找一下17和18的ID
  10.10.5.17  390a1809c3312fc3c01ef69382e6836cdbbe8977
  10.10.5.18  bfd4dbea0b85db2895c5152246638832ba1d2ce2
  
  # 在10.10.5.18(slave)上执行命令后面加的是5.17(master)的ID,执行后主从成功创建:
    *** 注意此处的命令需要在新加入cluster内,即将成为从的redis 内执行!***
  cluster replicate 390a1809c3312fc3c01ef69382e6836cdbbe8977   
  
   验证主从是否创建成功:
   [root@srv-1 src]# ./redis-trib.rb info 10.10.5.16:6379
10.10.5.17:6379 (390a1809...) -> 0 keys | 0 slots | 1 slaves.           # 主上已经显示有了一个slave.
10.10.5.13:6379 (3a311c96...) -> 0 keys | 5461 slots | 1 slaves.
10.10.5.15:6379 (761fbb98...) -> 4 keys | 5461 slots | 1 slaves.
10.10.5.12:6379 (905e3ecb...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 4 masters.
0.00 keys per slot on average.
  
  #  重新分配槽位:
   ./redis-trib.rb reshard 10.10.5.11:6379  
   .............省略部分
   M: 390a1809c3312fc3c01ef69382e6836cdbbe8977 10.10.5.17:6379
   slots: (0 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096                  # 要分多少个槽位slots给新的节点. 
What is the receiving node ID? 390a1809c3312fc3c01ef69382e6836cdbbe8977     # 接收槽位的节点ID(master)。
Please enter all the source node IDs.                             
  Type 'all' to use all the nodes as source nodes for the hash slots.       # 所有节点匀给新节点
  Type 'done' once you entered all the source nodes IDs.                    # 单个节点ID拿出来给新节点
Source node #1:all                                                          # 这是新的集群 我就直接ALL,生产环境可能会碰见分配错误.
   .............省略部分 
       Moving slot 1364 from 761fbb98a72600b8322fc34e3b2bbf0adbd3822e
Do you want to proceed with the proposed reshard plan (yes/no)?             # 确认分配的槽位

   ** 从哪些节点上分配槽位给新节点, 数据不多的可以选择all
   ** 会问一些分多少slots给新的节点。 参考 16382 / 4 = 4096个
   
 # 重新分配的时候因为之前在其他老节点添加过数据,所以产生如下问题:
  Moving slot 5798 from 10.10.5.12:6379 to 10.10.5.17:6379:                 # 5799 这个slots这个位置发生了错误.
[ERR] Calling MIGRATE: ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)
   
  *** 笨点的方法竟然是清除所有数据,如果是生产环境有大量数据 不建议这么操作 *** 
  # 根据提示 5799发生了错误, 看slots数值应该是在B节点上 10.10.5.12 
    redis-cli -h 10.10.5.12 -a 123456 flushall
    redis-cli -h 10.10.5.12 -a 123456 bgsave
  
  # 至此重新执行分配槽位, 不负众望再次出现了错误, 提示需要fix 来修复.(此时如果是生产环境一定要淡定!整个关老爷在边上镇着.)   
  ./redis-trib.rb reshard 10.10.5.11:6379  
  [WARNING] The following slots are open: 5798
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** Please fix your cluster problems before resharding
 
 # 修复cluster集群数据:
 ./redis-trib.rb fix 10.10.5.11:6379
 
 .............省略部分
>>> Check for open slots...
>>> Fixing open slot 5798
Set as importing in: 10.10.5.17:6379
Moving slot 5798 from 10.10.5.12:6379 to 10.10.5.17:6379: 
>>> Check slots coverage...
[OK] All 16384 slots covered.
      *** 至此redis cluster 添加节点并分配槽位完成 ***
 
# 查看最后分配的slots情况:
 [root@srv-1 src]# ./redis-trib.rb info 10.10.5.11:6379
10.10.5.13:6379 (3a311c96...) -> 0 keys | 5461 slots | 1 slaves.
10.10.5.15:6379 (761fbb98...) -> 0 keys | 5461 slots | 1 slaves.
10.10.5.17:6379 (390a1809...) -> 0 keys | 338 slots | 1 slaves.    # 由于分配槽位时发生了错误,导致仅仅分配了338个slots.
10.10.5.12:6379 (905e3ecb...) -> 0 keys | 5124 slots | 1 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.

*** 由于分配槽位时发生了错误,导致仅仅分配了338个slots,这在生产环境是绝对不能原谅的, 为了均衡每个机器上的slots数量 可以再次进行重新分配
*** 生产环境还是 建议一台一台操作 分配每台多余的slots给新加入的节点, 不要用all 这个自动分配的选项. 虽然单台操作比较麻烦,数据无价.

  # 查看集群节点上的key 和 slots个数:
[root@srv-1 src]# ./redis-trib.rb info 10.10.5.16:6379
10.10.5.17:6379 (390a1809...) -> 0 keys | 0 slots | 0 slaves.        # 5.17 没有slots和slave
10.10.5.13:6379 (3a311c96...) -> 0 keys | 5461 slots | 1 slaves.
10.10.5.18:6379 (bfd4dbea...) -> 0 keys | 0 slots | 0 slaves.        # 5.18 没有slots和slave
10.10.5.15:6379 (761fbb98...) -> 4 keys | 5461 slots | 1 slaves.
10.10.5.12:6379 (905e3ecb...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 5 masters.
0.00 keys per slot on average.

  # 查看添加到集群内主机的信息,
[root@srv-1 src]# ./redis-trib.rb check 10.10.5.16:6379
>>> Performing Cluster Check (using node 10.10.5.16:6379)
S: 57e6cc3af523aa829705cd0072d6283b988a43c7 10.10.5.16:6379
   slots: (0 slots) slave
   replicates 905e3ecb99a4723b12bb5d7fda91372ee72909be
M: 390a1809c3312fc3c01ef69382e6836cdbbe8977 10.10.5.17:6379       # 新添加的节点主机
   slots: (0 slots) master                                        # 没有分配任何slots,是个master.
   0 additional replica(s)                                        # 没有主从关系, 没有从库.
M: 3a311c961450d50f6236d814106fcd0f7723e071 10.10.5.13:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: bfd4dbea0b85db2895c5152246638832ba1d2ce2 10.10.5.18:6379      # 新添加的节点主机
   slots: (0 slots) master                                       # 没有分配任何slots,是个master.
   0 additional replica(s)                                       # 没有主从关系, 没有从库.
S: bad22bcf6c5c42b13c3692c4d1cfcbde7fd7ce14 10.10.5.14:6379
   slots: (0 slots) slave
   replicates 3a311c961450d50f6236d814106fcd0f7723e071
M: 761fbb98a72600b8322fc34e3b2bbf0adbd3822e 10.10.5.15:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 905e3ecb99a4723b12bb5d7fda91372ee72909be 10.10.5.12:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 291faee66636effee60e8409894a4ebae40fe4a6 10.10.5.11:6379
   slots: (0 slots) slave
   replicates 761fbb98a72600b8322fc34e3b2bbf0adbd3822e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

标签:...,6379,redis,Redis,Cluster,10.10,slots,节点
来源: https://www.cnblogs.com/zhenxing06/p/12860037.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有