Redis系列(三):Redis集群的水平扩展与伸缩
一、Redis集群的水平扩展
Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群如何做水平扩展,在原集群的6个节点的基础上新增2个节点,由原来的3主3从变成4主4从,原先的3主3从部署详见Redis系列(二):Redis高可用集群,如下图:

二、水平扩展具体操作
① 将redis-5.0.2文件夹拷贝到新的主机192.168.160.154上去,(1)scp -r /usr/local/redis-5.0.2 root@192.168.160.154:/usr/local/ 进去到192.168.160.154主机 (2)cd /usr/local

② 新启动2个redis实例,然后检查是否启动成功 (1)/usr/local/redis-5.0.2/bin/redis-server /usr/local/redis-5.0.2/redis-cluster/700*/redis.conf (2)ps -ef | grep redis 查看是否启动成功

③ 查看redis集群的命令帮助 (1)cd /usr/local/redis-5.0.2 (2)bin/redis-cli --cluster help
create:创建一个集群host1:port1 ... hostN:portN
call:可以执行redis命令
add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
del-node:移除一个节点
reshard:重新分片
check:检查集群状态
④ 使用add-node命令新增一个主节点192.168.160.154:7001(master),前面的ip:port为新增节点,后面的ip:port为集群中已存在节点(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7001 192.168.160.146:7001

⑤(1)连接任意一个客户端即可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.146 -p 700* (2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)

⑥ 使用redis-cli命令为192.168.160.154:7001分配slots槽位,找到集群中的任意一个主节点,对其进行重新分片工作。(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.146:7001
How many slots do you want to move (from 1 to 16384)? 4000
(ps:需要多少个槽移动到新的节点上,自己设置,比如4000个hash槽)
What is the receiving node ID? 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d
(ps:把这4000个hash槽移动到哪个节点上去,需要指定节点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
(ps:输入all为从所有主节点中分别抽取相应的槽数指定到新节点中,抽取的总槽数为4000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为4000个)
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:输入yes确认开始执行分片任务)
⑦ 查看下最新的集群状态

⑧ 添加从节点192.168.160.154:7002到集群中去并查看集群状态
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7002 192.168.160.146:7001

(2)cluster nodes

(3)如上图所示,还是一个master节点,没有被分配任何的hash槽。我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的192.168.160.154:7002节点的客户端,然后使用集群命令进行操作,把当前的192.168.160.154:7002(slave)节点指定到一个主节点下(这里使用之前创建的192.168.160.154:7001主节点)
(3-1)/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.154 -p 7002

(3-2)cluster replicate 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d #后面这串id为192.168.160.154:7001的节点id

(3-2)cluster nodes

三、水平伸缩具体操作
目的还原成原始集群,如下图:

① 删除192.168.160.154:7002从节点,用del-node删除从节点192.168.160.154:7002,指定删除节点ip和端口,以及节点id(192.168.160.154:7002节点id)
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster del-node 192.168.160.154:7002 564963541c243365cbb20aed69e98048d21d68fd

(2)cluster nodes

② 删除192.168.160.154:7001主节点,这个步骤相对麻烦一些,因为主节点的里面是有分配了slots槽位,所以必须先把192.168.160.154:7001里的slots槽位放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.154:7001
How many slots do you want to move (from 1 to 16384)? 4000
(ps:需要多少个槽移动到新的节点上,自己设置,比如4000个hash槽)
What is the receiving node ID? e7f80ba80749904838b6d779a0646e7f22313624
(ps:把这4000个hash槽移动到哪个节点上去,需要指定节点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:44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d
Source node 1:done
(ps:输入all为从所有主节点中分别抽取相应的槽数指定到新节点中,抽取的总槽数为4000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为4000个)
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:输入yes确认开始执行分片任务)
(2)cluster nodes 已经成功的把192.168.160.154:7001主节点的数据迁移到192.168.160.146:7001上去了

(3)最后我们直接使用del-node命令删除192.168.160.154:7001主节点即可

(4)最后执行cluster nodes

Redis系列(三):Redis集群的水平扩展与伸缩的更多相关文章
- 一文掌握Redis的三种集群方案
在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...
- redis系列--深入哨兵集群
一.前言 在之前的系列文章中介绍了redis的入门.持久化以及复制功能,如果不了解请移步至redis系列进行阅读,当然我也是抱着学习的知识分享,如果有什么问题欢迎指正,也欢迎大家转载.而本次将介绍哨兵 ...
- redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群. 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用 ...
- Redis实战(十三)Redis的三种集群方式
序言 能聊聊redis cluster集群模式的原理吗 资料 https://www.cnblogs.com/51life/p/10233340.html Redis 集群分片原理
- Dubbo源码学习总结系列三 dubbo-cluster集群模块
Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...
- redis(三) 集群 codis
参考文档 http://blog.csdn.net/ztsinghua/article/details/48134377
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
- Redis系列三 Redis数据类型
一 .Redis的五大数据类型 1.String(字符串) string是redis最基本的数据类型,可以理解成与 Memached一模一样的数据类型,一个key对应一个value. string 类 ...
- redis解决方案之三种集群模式的概念与部署
上篇文章为大家总结了redis命令并讲述了持久化,今天我们来看一下redis的三种集群模式:主从复制,哨兵集群,Cluster集群 本篇文章先介绍redis-cluster集群模式,然后再依次介绍它的 ...
随机推荐
- unity 基于scrollRect实现翻页显示
unity 基于scrollRect实现翻页显示,并定为到某一页,而不是某一页的中间方法(第二个脚本采用实际位置计算,并在update里实现平滑过渡): 组场景时,经常需要获取鼠标(或者点击)开始结束 ...
- vue事件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 第三十九章 POSIX信号量与互斥锁
POSIX信号量相关函数 sem_open 功能: initialize and open a named semaphore 原型: sem_t *sem_open(const char *name ...
- 12 Zabbix4.4.0系统sendEmail邮件报警优化
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 12 Zabbix4.4.0系统sendEmail邮件报警优化 接上一章节 Zabbix4.4. ...
- MIT线性代数:15.子空间的投影
- Pandas IO 操作
数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API 格式类型 数据描述 Reader Writer text CSV read_csv to_csv text JSON r ...
- 「2019.8.11 考试」一套把OI写的很诗意的题
这次写的更惨了,T2暴力再次挂掉了. 先写了T1的75暴力,然后写了T2的70分暴力(挂成了25),T3啥也不会骗了12分.T3看完题一点思路没有,心态爆炸了,一直在观察数据,忽略的思考的重要性,以至 ...
- CSPS模拟 59
经ooo提醒咕题解会掉rp 我反正也冒着改不完题的风险,就开始颓博了 话说好久没这么舒坦的垫过底了233 上来一看T1,立刻就转化题意为有奇偶性和距离限制的bfs 然后就没考虑子串不能越过母串边界的事 ...
- cdq分治 陌上花开(内无题解)
由于有归并排序 要注意是对原来的那个元素进行更新答案和删除操作 而不是占据原来那个元素下标的元素
- 如何在Vue项目中给路由跳转加上进度条
1.前言 在平常浏览网页时,我们会注意到在有的网站中,当点击页面中的链接进行路由跳转时,页面顶部会有一个进度条,用来标示页面跳转的进度(如下图所示).虽然实际用处不大,但是对用户来说,有个进度条会大大 ...