Redis集群功能概述
在单机Redis中介绍过Redis的复制特性以及Redis Sentinel和twemproxy,其中:
复制:可以创建指定服务器的复制品,这些复制品可以用户扩展系统处理读请求的能力;
Redis Sentinel:可以在复制特性的基础上,通过监视主从服务器并在主服务器故障时执行自动故障转移来保证系统的可用性;
twemproxy:使用分片策略来讲数据库划分到多个不同的服务器,以此来扩展系统存储的数据量,并通过将命令请求分散给不同的服务器来处理,以此来扩展系统处理命令请求的能力;
但是以上的特性都是独立的,如果我们需要一个完整地包含复制、高可用和分片特性的Redis服务器集群,那么就需要用到Redis的集群(Cluster)特性;
Redis集群
Redis的分布式数据库实现
分布式
Redis集群是一个由多个Redis服务器组成的分布式网络服务器群,集群中的各个服务器被称为节点(Node),这些节点会相互连接并进行通信;
分布式的Redis集群没有中心节点,所以用户不必当心某个节点会成为整个集群的性能瓶颈;

复制
Redis集群的每个节点都有两种角色可选:主节点(master node)和从节点(slave node),其中主节点用于存储数据,而从节点则是某个主节点的复制品;
当用户需要处理更多的请求时,添加从节点可以扩展系统的读性能。因为Redis集群重用了单机Redis复制特性,所以集群的复制行为和单机复制行为是完全一样的;
下图展示了为每个主节点各添加一个从节点:

节点故障检测和自动故障转移
Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移;
集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel。
举个栗子:当7000下线时,7001和7002会觉察到这一点,并对7000进行故障转移。

分片
集群使用分片来扩展数据库的容量,并将命令请求的负载交给不同的节点来分担;
集群将使用这个数据库分为16384个槽(slot),所有键都属于这16384个槽的其中一个,计算键key属于哪个槽的公式:slot_number = crc16(key)%16384,其中crc16为16位的循环冗余校验和函数;
集群中的每个主节点都可以处理0到16384个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求;
举个栗子:
有三个主节点7000,7001和7002,那么:
将槽0到5460指派给节点7000负责处理;
将槽5461到10922指派给节点7001负责处理;
将槽10923到16383指派给节点7002复制处理;
这样就可以将16384个槽平均地指派给三个节点负责处理;
转向
对于一个被指派了槽的主节点来说,这个主节点只会处理属于指派给自己的槽的命令请求;
如果一个节点接收到了和自己处理的槽无关的命令,那么节点会向客户端反馈一个转向错误(redirection error),告诉客户端,哪个节点才是负责处理这条命令的,之后客户端需要根据错误中包含的地址和端口号重新向正确的节点发送命令请求;

Redis集群功能概述的更多相关文章
- Redis集群功能预览
目前Redis Cluster仍处于Beta版本,Redis 3.0将会加入,在此可以先对其主要功能和原理进行一个预览.参考<Redis Cluster - a pragmatic approa ...
- 基于Twemproxy的Redis集群方案(转载)
原文地址:基于Twemproxy的Redis集群方案 概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的 ...
- Redis集群方案(来自网络)
参考: https://www.zhihu.com/question/21419897 http://www.cnblogs.com/haoxinyue/p/redis.html 为什么集群? 通常, ...
- Redis总结(八)如何搭建高可用的Redis集群
以前总结Redis 的一些基本的安装和使用,大家可以这这里查看Redis 系列文章:https://www.cnblogs.com/zhangweizhong/category/771056.html ...
- 就publish/subscribe功能看redis集群模式下的队列技术(一)
Redis 简介 Redis 是完全开源免费的,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中 ...
- 峰Redis学习(9)Redis 集群(概述)
第一节:Redis 集群概述 redis cluster是去中心化,去中间件的,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态.每个节点都和其他所有节点 ...
- 详细介绍redis的集群功能,带你了解真正意义上的分布式
Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset). ...
- 一种简单实现Redis集群Pipeline功能的方法及性能测试
上一篇文章<redis pipeline批量处理提高性能>中我们讲到redis pipeline模式在批量数据处理上带来了很大的性能提升,我们先来回顾一下pipeline的原理,redis ...
- Redis集群概述
Redis Cluster与Redis3.0.0同时发布,以此结束了Redis无官方集群方案的时代,目前,Redis已经发布了3.0.7版本. redis cluster是去中心化,去中间件的,也就是 ...
随机推荐
- Linux下Memcached-1.4.10安装
memcache是一款流行的缓存产品,它分为两个部分:一个是运行在服务器端的memcached进程,一个是在客户端进行调用获取缓存中数据客户端,例如比较常用的PHP客户端.这里,记录一下安装服务器端的 ...
- nginx ssi 配置小细节(一)
最近工作需要使用nginx的ssi (server side include)技术,在这里,将使用中的一点心得分享一下,也是一种备忘! 首先,nginx的ssi启用很简单,就只有三个最基本的指令: s ...
- mongodb不同版本之间有很大的差异
今天主要说下我为了给mongodb数据库添加authorization,大家应该知道,mongo默认是无auth运行的.这可能是方便小伙伴学习命令吧. 由于之前发布的一个项目,在亚马逊的云上,处于内部 ...
- window.location.search
http://i.cnblogs.com/EditPosts.aspx?opt=1&opt2=x 就拿上面这个URL来说window.location.search的返回值为opt=1& ...
- 加了GO后报 'GO' 附近有语法错误
单独运行SQL无问题,了加GO就报错. 是你的SQL语句中,有些行的结尾处只有Char(13)没有Char(10),即:只有回车符没有换行符,这种状态在视觉上是没办法区分的. 参考:http://ww ...
- C语言每日一题之No.3
几天下来,感慨学习要坚持下来真的是件很难的事,本来说了每天一题,可是毕竟这是个细活,需要用心雕琢,有时候真的不能当天拿下来>_<.虽然说只是一题,却涉及到很多小细节,慢慢的琢磨直至完全摸透 ...
- 从官方下载 Bootstrap 版本 并写 第一个页面
从官方下载 Bootstrap 版本 页面内容参考自 http://www.cnblogs.com/sanjuantianshu/p/3935120.html bootstrap-3.2.0.zip ...
- 限制页面内部链接访问源-HTML注释
不知道大家有没有碰到过这样一个问题:我修改的是别人的网页,他的超连接是指向一个服务器的某个HTML文件,我把超连接地址修改成了我本地机器的跟首页 同一目录下的一个HTML文件,却发现超连接根本 ...
- Segment fault及LINUX core dump详解 (zz)
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...
- DBA_Oralce Enterprise Manager OEM管理应用介绍(案例)
2014-08-16 BaoXinjian