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是去中心化,去中间件的,也就是 ...
随机推荐
- Android ImageButton android:scaleType
ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType). android:scaleType是控制图片如 ...
- 【spring】non-compatible bean definition of same name and class
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected excep tion parsing XML do ...
- 剑指offer系列45---和为s的两个数字
[题目]输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, package com.exe9.offer; /** * [题目]输入一个递增排序的数组和一个数字S,在数组中 ...
- 204. Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. ============= 找质数 ...
- C# 多线程网络通信
博客园 :梦工厂2012 本月由于事情太多,没能有太多的时间去写博客.不过还好在月底抽时间写了这个多线程网络通信的程序 .程序说明:控制端 创建一个写线程threadWrite和一个读线程thread ...
- 调试压缩后的Javascript文件:在 Chrome 和 Safari ,选择“脚本”标签,找到相应的文件,然后点击“{}”图标(pretty print,在面板底部)
- Oracle Erp常用网站
2014-01-01 Created By BaoXinjian
- catalan---卡特兰数(小结)
(关于卡特兰数的详细介绍)http://baike.baidu.com/view/2499752.htm 下面有练习的题目: 经过测试,_int64/long long 最大只能表示到33位,超过这个 ...
- cf 547B. Mike and Feet dp
题意: n个矩阵排成一排,n<=2e5,高度分别为hei[i],宽度为1 对于一些连续的矩阵,矩阵的size为矩阵的个数,矩阵的strength为这些矩阵中高度最低的那一个高度 求:for ea ...
- openmp并行计算
#include <omp.h>#include <stdio.h>#include <stdlib.h> void test(int n){ for (int i ...