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.

Redis Cluster 集群节点维护 (三)的更多相关文章

  1. redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移

    上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...

  2. Redis Cluster 集群节点信息 维护篇(二)

    集群信息文件: # cluster 集群内部信息对应文件,由集群自动维护. /data/soft/redis/6379data/nodes-6379.conf 集群信息查看: ./redis-trib ...

  3. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  4. JFinal redis cluster集群插件

    JFinal redis cluster集群插件 JFinal 框架到了2.1版本号,可是依旧仅仅支持redis的主从集群,没有看到Cluster集群的插件.笔者照着主从的插件方式,改了改,实现了个简 ...

  5. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  6. 输出redis cluster集群所有节点指定的参数的配置

    需要:实现类似redis-trib.rb call 命令的功能,输出redis cluster集群所有节点指定的参数的配置 redis-trib.rb的输出 [redis@lxd-vm3 ~]$ re ...

  7. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  8. Redis cluster集群:原理及搭建

    Redis cluster集群:原理及搭建 2018年03月19日 16:00:55 阅读数:6120 1.为什么使用redis? redis是一种典型的no-sql 即非关系数据库 像python的 ...

  9. Redis Cluster集群搭建<原>

    一.环境配置 一台window 7上安装虚拟机,虚拟机中安装的是centos系统. 二.目标     Redis集群搭建的方式有多种,根据集群逻辑的位置,大致可以分为三大类:基于客户端分片的Redis ...

随机推荐

  1. 四、git学习之——远程仓库

    Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版 ...

  2. k8s遇见的问题

    open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory 解决方案   ...

  3. Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. Windows 64位下安装php的redis扩展(php7.2+redis3.0)

    前置条件:为php7.2搭建redis扩展的前提是在本机上已经成功搭建好php的运行环境,我的电脑的运行环境时 apache2.4+mysql5.5+php7.2. 操作系统为64位,编译环境为Mic ...

  5. Another MySQL daemon already running with the same unix socket. & ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

    mysql 断电后启动失败解决 应该是mysql.sock文件还存在. 把这个文件删掉就可以了. mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.s ...

  6. burpsuite无法拦截本地流量

    参考文章链接:https://blog.csdn.net/tb_youth/article/details/103436796?utm_medium=distribute.pc_relevant.no ...

  7. HW之蓝队防守

    待看文章: https://blog.csdn.net/DBappSecurity_/article/details/107364216?utm_medium=distribute.pc_releva ...

  8. 2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)

    D题:小z与他的袜子 描述 小z每天会穿一双新袜子. 开始他的衣柜里有n双袜子,袜子会从1-n进行编号.每天早上他都会从衣柜里拿编号最小的袜子来穿.每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n ...

  9. java基础:switch语句应用,循环的详细介绍以及使用,附练习案列

    1. switch语句 1.1 分支语句switch语句 格式 switch (表达式) { case 1: 语句体1; break; case 2: 语句体2; break; ... default ...

  10. 安装篇六:安装PHP(7.2.29版本)

    准备环境,下载依赖软件 # No1:在前面安装好的基础上,关闭iptables.selinux # No2:安装依赖包 yum install zlib-devel bzip2-devel -y &l ...