redis cluster 集群畅谈(二)
上一篇http://www.cnblogs.com/qinyujie/p/9029482.html, 主要讲解 redis cluster 集群 搭建,本篇主要讲解实验多master写入、读写分离、实验自动故障切换(高可用性),下面直接开始吧。
上一篇我们搭建完了redis cluster 集群,下面进行数据存储测试
多master写入 - 海量数据的分布式存储
当我们set 数据的时候会发现如下图问题:

通过上图发现,当插入key1、key2、key3 时报错,它要求我们到相应的master 节点去进行写入,没错,这就是多master写入,以上就验证了,实际的数据写入是要到相应的master 进行操作的,每个master 都可以计算,然后将请求转发至真正的操作节点进行。
根据上图redis 切换到 192.168.43.17:7003 进行key1 1 的写入,如下图

总结:redis cluster写入数据的时候,可以将请求发送到任意一个master上去执行,但是每个 master 都会计算这个 key 对应的 CRC16 值,然后对16384个 hashslot 取模,找到 key 对应的 hashslot,根据 hashslot 寻找对应的master。如果对应的master就在自己本地的话,set key4 4,key4 这个 key 对应的 hashslot 就在自己本地,那么自己就进行写入了。但是如果计算出来的 hashslot 在其他 master 上,那么就会给客户端返回一个 moved error,告诉你,你得到哪个 master 上去执行这条写入的命令。
多master的写入保持每个master都可以进行数据的写入,每条数据只能存在于一个 master 和相应的 slave 上,每条数据只能由对应的 master 负责。
上面说了,每次写入一条数据,如果不在本地 master ,还需要手动切换到对应的master 上去执行,这就相当麻烦了。能不能将手动的方式交给redis 自动切换执行呢 ?
redis-cli -h 192.168.43.16 -p 7001 -c // -c 表示将数据写入move err 手动切换的方式让 redis 自身自动去做

上图可以看出,redis 做了redirected 重定向,读取数据也是一样的。
slave数据读取 - 读写分离
前面说过,redis cluster 支持读写分离,实际上这个概念在cluster 中已经不是那么重要了,因为水平扩容(多master就已经解决或者实现了 redis replication 主从架构 一主多从的读写分离效果),我们在生产环境中都会发现,直接使用 master 进行读写了。当然redis cluster 还是支持 slave 读的(默认是不支持slave节点读,在读的时候我们需要先执行下 readonly,如下图所示:
- 先看下 192.168.43.16:7001 对应的 slave 是啥
 

- 192.168.43.16:7002 slave 上读取数据
 

上图可以看出,redis cluster 默认slave 也是不能读的,如果要读取,需要执行 readonly,就可以了。
注意:在redis cluster的核心的理念里,slave 主要是用做高可用的,每个master挂一两个slave,主要是做数据的热备,还有master故障时的主备切换,实现高可用的。
自动故障切换 - 高可用性
查看集群信息
redis-trib.rb check 192.168.43.16:7001
下面我们来测试将 192.168.43.16:7001 master kill 掉,看看 192.168.43.16:7002 slave 是否自动切换为master,如下图所示:



通过上图可以看出,redis cluster 集群自身具备了redis repliction + sentinal 哨兵 的故障切换功能,从而实现了高可用性。
redis cluster 集群畅谈(二)的更多相关文章
- redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移
		
上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...
 - redis cluster 集群畅谈(一)
		
redis单机在大数据量情况的会出现瓶颈问题,通过redis 主从架构和 哨兵集群结合可以实现99.99% 高可用 .水平扩容支持更高QPS的解决方案. 在大数据量面前,主从架构结合哨兵集群的解决方案 ...
 - Redis Cluster集群搭建与配置
		
Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...
 - 深入分析redis cluster 集群
		
深入分析redis cluster 集群安装配置详解 下面小编来为各位介绍一篇深入分析redis cluster 集群安装配置详解,如果你希望做数据库集群就可以来看看此文章的哦. http://rub ...
 - Redis Cluster集群主从方案
		
本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...
 - Redis Cluster集群架构实现(四)--技术流ken
		
Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...
 - 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!
		
转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208 版权声明:本文为博主 ...
 - Redis Cluster集群知识学习总结
		
Redis集群解决方案有两个: 1) Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...
 - centos6下redis  cluster集群部署过程
		
一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...
 
随机推荐
- 最短路径问题-Dijkstra
			
概述 与前面说的Floyd算法相比,Dijkstra算法只能求得图中特定顶点到其余所有顶点的最短路径长度,即单源最短路径问题. 算法思路 1.初始化,集合K中加入顶点v,顶点v到其自身的最短距离为0, ...
 - Shader开发之三大着色器
			
固定功能管线着色器Fixed Function Shaders 固定功能管线着色器的关键代码一般都在Pass的材质设置Material{}和纹理设置SetTexture{}部分. Shader &qu ...
 - Servlet+Ajax实现搜索智能提示
			
一般在百度搜索框输入关键词时,会弹出一些相关信息提示,方便点选: 页面(search.jsp): <input type="text" name="keyWords ...
 - 数据库ADO方式读取图片
			
void Caccess_test_1Dlg::OnBnClickedButton3()//将偏振图像存入数据库 { // TODO: 在此添加控件通知处理程序代码 if (!PathFileExis ...
 - VS2010属性表的建立与灵活运用
			
问题引入:在VS2010当中,进行opencv.QT等的编程时,总是需要配置很多属性还有依赖项等,为了减少每次都重复配置属性的工作量,现在可以运行属性表这个东西来简化配置.opencv也可以这样建立使 ...
 - mysql数据库中的存储引擎是什么意思呢
			
需求描述: 在看mysql的内容,经常提到存储引擎,那么到底什么是存储引擎呢 在这里对于概念进行理解,记录下. 概念解释: 存储引擎(storage engine):存储引擎就是mysql中的一个组件 ...
 - javascript与 ios通讯解决办法
			
阔别1年半之久,一个JavaScript和ios通讯的想法终于被实现了(我不知道别人有没有早就实现过~). 记得早期ios内嵌html做通讯时,貌似做好的办法只能是 ios通过url来截取页面发送消息 ...
 - 使用python调用zxing库生成二维码图片
			
(1) 安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...
 - 关于直播学习笔记-002-Red5 & Sewise Player & Wirecast
			
一.工具软件 [1]. 视频采集端 Red5 Demo:http://192.168.31.107:5080/demos/simpleBroadcaster.html Telestream:Wirec ...
 - org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed
			
项目是使用activeMQ 发布订阅的模式,在本地测试正常,但是 放到服务器上出现这个错误: org.apache.activemq.transport.InactivityIOException: ...