设为首页 收藏本站
查看: 894|回复: 0

[经验分享] redis cluster 添加 删除 重分配 节点

[复制链接]

尚未签到

发表于 2018-11-5 07:10:18 | 显示全部楼层 |阅读模式
  redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢。
  一,redis cluster命令行

  •   //集群(cluster)
  •   CLUSTER INFO 打印集群的信息
  •   CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

  •   //节点(node)
  •   CLUSTER MEET   将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
  •   CLUSTER FORGET  从集群中移除 node_id 指定的节点。
  •   CLUSTER REPLICATE  将当前节点设置为 node_id 指定的节点的从节点。
  •   CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。

  •   //槽(slot)
  •   CLUSTER ADDSLOTS  [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
  •   CLUSTER DELSLOTS  [slot ...] 移除一个或多个槽对当前节点的指派。
  •   CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
  •   CLUSTER SETSLOT  NODE  将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
  •   CLUSTER SETSLOT  MIGRATING  将本节点的槽 slot 迁移到 node_id 指定的节点中。
  •   CLUSTER SETSLOT  IMPORTING  从 node_id 指定的节点中导入槽 slot 到本节点。
  •   CLUSTER SETSLOT  STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

  •   //键 (key)
  •   CLUSTER KEYSLOT  计算键 key 应该被放置在哪个槽上。
  •   CLUSTER COUNTKEYSINSLOT  返回槽 slot 目前包含的键值对数量。
  •   CLUSTER GETKEYSINSLOT   返回 count 个 slot 槽中的键。
  这些命令是集群所独有的。执行上述命令要先登录

  •   [root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.220    //登录
  •   192.168.10.220:6382> cluster info   //查看集群情况
  •   cluster_state:ok
  •   cluster_slots_assigned:16384
  •   cluster_slots_ok:16384
  •   cluster_slots_pfail:0
  •   cluster_slots_fail:0
  •   cluster_known_nodes:6
  •   cluster_size:3
  •   cluster_current_epoch:8
  •   cluster_my_epoch:4
  •   cluster_stats_messages_sent:82753
  •   cluster_stats_messages_received:82754
  二,添加节点
  1,新配置二个测试节点

  •   # cd /etc/redis

  •   //新增配置
  •   # cp redis-6379.conf redis-6378.conf && sed -i "s/6379/6378/g" redis-6378.conf
  •   # cp redis-6382.conf redis-6385.conf && sed -i "s/6382/6385/g" redis-6385.conf

  •   //启动
  •   # redis-server /etc/redis/redis-6385.conf > /var/log/redis/redis-6385.log 2>&1 &
  •   # redis-server /etc/redis/redis-6378.conf > /var/log/redis/redis-6378.log 2>&1 &
  2,添加主节点
  # redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379
  注释:
  192.168.10.219:6378是新增的节点
  192.168.10.219:6379集群任一个旧节点
  3,添加从节点
  # redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379
  注释:
  --slave,表示添加的是从节点

  --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主节点的node>  192.168.10.220:6385,新节点
  192.168.10.219:6379集群任一个旧节点
  4,重新分配slot

  •   # redis-trib.rb reshard 192.168.10.219:6378 //下面是主要过程

  •   How many slots do you want to move (from 1 to 16384)? 1000 //设置slot数1000
  •   What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node id
  •   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.
  •   Source node #1:all //表示全部节点重新洗牌
  •   Do you want to proceed with the proposed reshard plan (yes/no)? yes //确认重新分
  新增加的主节点,是没有slots的,
  M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378
  slots:0-332,5461-5794,10923-11255 (0 slots) master
  主节点如果没有slots的话,存取数据就都不会被选中。

  可以把分配的过程理解成打扑克牌,all表示大家重新洗牌;输入某个主节点的node>  5,查看一下,集群情况

  •   [root@slave2 redis]# redis-trib.rb check 192.168.10.219:6379
  •   Connecting to node 192.168.10.219:6379: OK
  •   Connecting to node 192.168.10.220:6385: OK
  •   Connecting to node 192.168.10.219:6378: OK
  •   Connecting to node 192.168.10.220:6382: OK
  •   Connecting to node 192.168.10.220:6383: OK
  •   Connecting to node 192.168.10.219:6380: OK
  •   Connecting to node 192.168.10.219:6381: OK
  •   Connecting to node 192.168.10.220:6384: OK
  •   >>> Performing Cluster Check (using node 192.168.10.219:6379)
  •   M: 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 192.168.10.219:6379
  •   slots:5795-10922 (5128 slots) master
  •   1 additional replica(s)
  •   S: 9c240333476469e8e2c8e80b089c48f389827265 192.168.10.220:6385
  •   slots: (0 slots) slave
  •   replicates 03ccad2ba5dd1e062464bc7590400441fafb63f2
  •   M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378
  •   slots:0-332,5461-5794,10923-11255 (1000 slots) master
  •   1 additional replica(s)
  •   M: 19b042c17d2918fade18a4ad2efc75aa81fd2422 192.168.10.220:6382
  •   slots:333-5460 (5128 slots) master
  •   1 additional replica(s)
  •   M: b2c50113db7bd685e316a16b423c9b8abc3ba0b7 192.168.10.220:6383
  •   slots:11256-16383 (5128 slots) master
  •   1 additional replica(s)
  •   S: 6475e4c8b5e0c0ea27547ff7695d05e9af0c5ccb 192.168.10.219:6380
  •   slots: (0 slots) slave
  •   replicates 19b042c17d2918fade18a4ad2efc75aa81fd2422
  •   S: 1ee01fe95bcfb688a50825d54248eea1e6133cdc 192.168.10.219:6381
  •   slots: (0 slots) slave
  •   replicates b2c50113db7bd685e316a16b423c9b8abc3ba0b7
  •   S: 9a2a1d75b8eb47e05eee1198f81a9edd88db5aa1 192.168.10.220:6384
  •   slots: (0 slots) slave
  •   replicates 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052
  •   [OK] All nodes agree about slots configuration.
  •   >>> Check for open slots...
  •   >>> Check slots coverage...
  •   [OK] All 16384 slots covered.
  三,改变从节点的master
  查看复制打印?
  //查看一下6378的从节点
  # redis-cli -p 6378 cluster nodes | grep slave | grep 03ccad2ba5dd1e062464bc7590400441fafb63f2
  //将6385加入到新的master
  # redis-cli -c -p 6385 -h 192.168.10.220
  192.168.10.220:6385> cluster replicate 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052  //新master的node id
  OK
  192.168.10.220:6385> quit
  //查看新master的slave
  # redis-cli -p 6379 cluster nodes | grep slave | grep 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052
  四,删除节点
  1,删除从节点
  查看复制打印?
  # redis-trib.rb del-node 192.168.10.220:6385 '9c240333476469e8e2c8e80b089c48f389827265'
  2,删除主节点
  如果主节点有从节点,将从节点转移到其他主节点
  如果主节点有slot,去掉分配的slot,然后在删除主节点

  •   # redis-trib.rb reshard 192.168.10.219:6378 //取消分配的slot,下面是主要过程
  # redis-trib.rb reshard 192.168.10.219:6378 //取消分配的slot,下面是主要过程
  How many slots do you want to move (from 1 to 16384)? 1000 //被删除master的所有slot数量
  What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收6378节点slot的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.
  Source node #1:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被删除master的node-id
  Source node #2:done
  Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot后,reshard
  新增master节点后,也进行了这一步操作,当时是分配,现在去掉。反着的。
  查看复制打印?
  # redis-trib.rb del-node 192.168.10.219:6378 '03ccad2ba5dd1e062464bc7590400441fafb63f2'
  新的master节点被删除了,这样就回到了,就是这篇文章开头,还没有添加节点的状态


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630821-1-1.html 上篇帖子: Redis 集群cluster 下篇帖子: redis+keepalived 主从热备 实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表