redis-cluster集群--伸缩

前戏废话

集群的伸缩: 如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容)

集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动

查看现有集群状态

  • 登录集群节点
cd /Users/izaodao/Documents/redis-cluster
./src/redis-cli -c -h 127.0.0.1 -p 7000  -a fatsnake
  • 查看状态
cluster nodes
image.png

集群为三主三从,端口号为7000、7001、7002、7003、7004、7005。

本文中的例子:

  • 新增主节点7006和从节点7007,并给7006分配4096个slots,设置7007为7006的从节点
  • 然后再将这两个节点从集群中删除,一定要先删除主节点,再删除从节点,要不然故障转移会生效。

一、 集群扩容

1.准备两个新节点
在集群目录redis_cluster目录下增加redis7006和redis7007目录
复制端口7000的redis.conf配置文件到redis7006和redis7007目录下,并修改配置文件中的端口为对应目录的端口号。

mkdir  redis7006
mkdir redis7007
cp ./7000/redis.conf ./7001/     
vim ./7000/redis.conf
执行 :%s/oldPort/newPort/g    全局替换端口 :wq  保存并退出  即可

redis.conf 主要内容:

#关闭保护模式用 于公网访问 
protected-mode no 
port 7000 
#开启集群模式 
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
# 后台启动 
daemonize yes
pidfile  /var/run/redis_7000.pid 
logfile 7000.log 
# 此处绑定 ip 可以是阿里内网 ip 和本地 ip 也可以直接注释掉该项 #bind127.0.0.1 
# 用于连接主节点密码 
masterauth fatsnake
#设置redis密码各个节点请保持密码一致 
requirepass fatsnake
#设置节点持久化文件或是目录名,让各个节点分开:rdb文件名或者aof文件名
dbfilename dump_7000.rdb
appendfilename "appendonly_7000.aof"
image.png

2.启动新节点

cd /opt/redis-5.0.7    #: 进入 redis 安装目录
./src/redis-server  ./7006/redis.conf
./src/redis-server  ./7007/redis.conf
ps -ef | grep  redis   //查看新的redis节点是否启动成功

启动后状态


image.png

3.登录7006查看节点状态

 ./src/redis-cli -c -h 127.0.0.1 -p 7006  -a fatsnake
cluster nodes

只有节点自己孤独的自己


image.png

3.添加节点
(1)向集群中添加节点7006,注意一定要保证节点里面没有添加过任何数据,不然添加会报错。
添加 主节点 7006

 cd /usr/local/redis/redis/src

redis-cli --cluster add-node -a fatsnake 127.0.0.1:7006 127.0.0.1:7000
 //第一次节点为新增的节点  第二个节点为集群中的节点 -a 参数节点登录密码,没有请忽略

(2)重新分配(迁移)哈希槽slot

redis-cli --cluster reshard  -a fatsnake 127.0.0.1:7000

询问迁移多少slot


image.png

一次要迁移多少个slot呢 先迁1000个吧


image.png

那个节点作为slot的接收方呢 必须使用nodeid 就是节点的唯一标示,就是前面执行的cluster nodes中最前面的一串

我这边设置7006作为接入方

image.png

设置slot的迁出方,我这边选择all,即所有的 节点 总共迁移1000个slot的节点7

查看7006的状态,发现slot已经从原有三个master节点 迁移过来


image.png

(3) 添加新增节点的从节点

redis-cli --cluster add-node -a fatsnake 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave --cluster-master-id c2c7fed1eb89e1ecba3ceb8dc1098e0b796d0eb5

把节点7007节点加入到集群,并且是以从节点的形式存在,并且指定masterid为节点7006


image.png
image.png

添加接电视遇到问题

添加节点时对哈希槽检查报错处理:


image.png

https://www.jianshu.com/p/af7fe5cd9577

二、集群缩容

需要注意

如果你要下线一对主从节点,请务必贤下线从节点(7007),并且讲主节点(7006)的slot的迁移到其他节点
如果先下线主节点(7006),会发生故障切换,原从节点(7007)会变为主节点

删除从节点

redis-cli --cluster del-node -a fatsnake 127.0.0.1:7007  7007节点id
image.png
image.png

删除主节点

1.将主节点7006的slots分配到其他主节点上

redis-cli --cluster reshard -a fatsnake 127.0.0.1:7006
image.png
image.png

输入yes,表示接受这个计划,然后回车,完成7006节点的槽的移除。


image.png

登录集群查看当前集群情况:


image.png

节点7006上没有任何槽。
2.使用del-node命令来删除7006主节点。
redis-cli --cluster del-node -a fatsnake 127.0.0.1:7006  7006节点id

删除成功


image.png

参考

redis3/4伸缩请移步

重新创建redis集群的注意事项

(error) MOVED 5798 127.0.0.1:7001
https://redis.io/topics/cluster-tutorial

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自:https://www.zybuluo.com/phper/note/195558 前言 redis 是我们...
    yannhuang阅读 5,625评论 0 2
  • 前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Red...
    Kevin_ZGJ阅读 13,990评论 19 133
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 9,480评论 2 27
  • redis集群分为服务端集群和客户端分片,redis3.0以上版本实现了集群机制,即服务端集群,3.0以下使用客户...
    hadoop_null阅读 5,473评论 0 6
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 10,764评论 0 36