写在前面的话:读书破万卷,编码如有神

----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
1、复制的问题
由于复制中,每个数据库都是拥有完整的数据,因此复制的总数据存储量,受限于内存最小的数据库节点,如果数据量过大,复制就无能为力了。
2、分片(partitioning)
分片就是将你的数据拆分到多个Redis实例的过程,这样每个redis实例将只包含完整数据的一部分。常见的分片方式:
  • 按照范围分片
  • 哈希分片,比如一致性哈希
3、常见的分片实现
  1. 在客户端进行分片
  2. 通过代理来进行分片,比如:Twemproxy
  3. 查询路由:就是发送查询到一个随机实例,这个实例会保证转发你的查询到正确的节点,Redis集群在客户端的帮助下,实现了查询路由的一种混合形式,请求不是直接从Redis实例转发到另一个,而是客户端收到重定向到正确的节点。
  4. 在服务器端进行分片,Redis采用哈希槽(hash slot)的方式在服务器端进行分片:Redis集群有16384个哈希槽,使用键的CRC16编码对16384取模来计算一个键所属的哈希槽。
4、Redis分片的缺点
  1. 不支持涉及多键的操作,如mget,如果所操作的键都在同一个节点,就正常执行,否则会提示错误
  2. 分片的粒度是键,因此每个键对应的值不要太大
  3. 数据备份会比较麻烦,备份数据时你需要聚合多个实例和主机的持久化文件
  4. 扩容的处理比较麻烦
  5. 故障恢复的处理也比较麻烦,可能需要重新梳理Master和Slave的关系,并调整每个复制集里面的数据
5、Redis集群
由于数据量过大,单个复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展,每个复制集只负责存储整个数据集的一部分,这就是Redis的集群
  1. 在以前版本中,redis的集群是依靠客户端来分片来完成,但是这会有很多缺点,比如维护成本高,需要客户端编码解决;增加、移出节点都比较繁琐等。
  2. Redis3.0新增的一大特性就是支持集群,在不降低性能的情况下,还提供了网络分区后的可访问下和支持对主数据库故障的恢复
  3. 使用集群后,都只能使用默认的0号数据库
  4. 每个Redis集群节点需要两个TCP连接打开,正常的TCP端口用来服务客户端,列如6379,增加10000的端口用作数据端口,必须保证防火墙打开着两个端口。
  5. Redis集群不保证强一致性,这意味着在特定的条件下,Redis集群可能会丢掉一些被系统受到的写入请求命令。
6、集群架构
  1. 所有的Redis节点彼此互联,内部使用二进制协议优化传输速度和带宽
  2. 节点的fail是通过集群中超过半数的节点检测失效时才生效
  3. 客户端与Redis节点直连,不需要中间proxy层。客户端不需要连接集群的所有节点,连接集群中任何一个可用节点即可
  4. 集群把所有的物理节点映射到[0-16383]插槽上,集群负责维护:节点-插槽-值 的关系
7、集群操作的基本命令
(1)cluster info : 获取集群的信息
(2)cluster nodes : 获取集群当前已知的所有节点,以及这些节点的相关信息
(3)cluster meet <ip> <port> : 将ip和port所指定的节点添加到集群中
(4)cluster forget <node_id> : 从集群中移除node_id指定的节点
(5)cluster replicate <node_id> : 将当前节点设置为node_id指定的节点的从节点
(6)cluster saveconfig :将节点的配置文件保存到硬盘里面
(7)cluster addslots <slot> [slot ...] :将一个或者多个槽分配给当前节点
(8)cluster delslots <slot> [slot ...] : 从当前节点移除一个或者多个槽
(9)cluster flushslots : 移除分配给当前节点的所有槽
(10)cluster setslot <slot> NODE <node_id> : 将槽分配给node_id指定的节点,如果槽已经分配给了另一个节点,那么先让另一个节点删除该槽,然后再进行分配。
(11)cluster setslot <slot> migrate <node_id> : 将本节点的槽迁移到指定的节点中
(12)cluster setslot <slot> importing <node_id> : 从指定节点导入槽到本节点
(13)cluster setslot <slot> stable : 取消对槽的导入(importing)或迁移(migrate)
(14)cluster keyslot <key> : 计算键key应该被放置在哪个槽
(15)cluster countkeysinslot <slot> : 返回槽目前包含的键值对数量
(16)cluster getkeysinslot <slot> <count> : 返回count个槽中的键
(17)migrate 目的节点ip 目前节点port 键名 数据库号 超时时间 [copy] [replace] : 迁移某个键值对
 

15、Redis的集群的更多相关文章

  1. Redis分布式集群几点说道

    原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html  Redis分布式集群几点说道 Redis数据量日益 ...

  2. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

    上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 ​一.步骤如下: 1.配 ...

  3. Redis集群(八):Redis Sharding集群

    一.Redis目前的集群方案主要有两种:Redis Sharding和Redis Cluster 1.Redis Sharding:3.0以前基本上使用分片实现集群,目前主流方案,客户端实现 2.Re ...

  4. 170103、Redis官方集群方案 Redis Cluster

    前面我们谈了Redis Sharding多服务器集群技术,Redis Sharding是客户端Sharding技术,对于服务端来说,各个Redis服务器彼此是相互独立的,这对于服务端根据需要灵活部署R ...

  5. 【Redis】Redis分布式集群几点说道

    Redis数据量日益增大,使用的公司越来越多,不仅用于做缓存,同时趋向于存储这一块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片 ...

  6. nginx+tomcat+redis的集群+session共享

    nginx+tomcat+redis的集群+session共享 环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 ...

  7. redis —主从&&集群(CLUSTER)

    REDIS主从配置 为了节省资源,本实验在一台机器进行.即,在一台机器上启动两个端口,模拟两台机器. 机器准备: [root@adailinux ~]# cp /etc/redis.conf /etc ...

  8. Redis Cluster搭建高可用Redis服务器集群

    一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节 ...

  9. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

随机推荐

  1. Google-403-Forbidden

    Author:KillerLegend Date:2014.8.14 From:http://www.cnblogs.com/killerlegend/p/3913554.html www.googl ...

  2. 《翻译》PEP 380 – 委托子生成器语法

     PEP 380 – 委托子生成器语法 翻译自: https://www.python.org/dev/peps/pep-0380/ 摘要 一项新的语法被提出了:生成器委托其部分操作给另一个生成器.委 ...

  3. XMPP 基础

    CHENYILONG Blog XMPP 基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong ...

  4. P4549 【模板】裴蜀定理

    题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1X1+...AnXn>0,且S的值最小 输入输出格式 输入格式: 第一行给出数字N,代表有N个数 下面一行给出 ...

  5. async异步注解和aspect切面注解等注解的原理

    在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下spring是如何完成这个功能的. 1.spring 在扫描bean的 ...

  6. django Rest Framework---缓存通过drf-extensions扩展来实现

    什么情况下使用缓存 1.不经常更新的数据 2.用户经常访问的一些页面,比如商品列表页.商品详情页等 3.用户经常修改的一些操作:购物车.订单中心等 关于DRF缓存扩展可以参考文档:http://chi ...

  7. IDEA配置文件的配置文件配置

    IDEA配置文件的配置文件配置: 路径 /Applications/IntelliJ IDEA 3.app/Contents/bin/idea.vmoptions (/IntelliJ IDEA 3. ...

  8. java虚拟机规范(se8)——java虚拟机结构(三)

    2.6. 栈帧 栈帧用于存储数据和部分结果,同样也用于执行动态链接,返回方法的值和分派异常. 当方法被调用的时候会创建一个新的栈帧.当一个方法调用结束时,它对应的栈帧就被销毁了,不管是正常调用结束还是 ...

  9. PHP中的__clone()

    1 <?php 2 class Account { 3 public $balance; 4 5 public function __construct($balance) { 6 $this- ...

  10. 【前端开发】关于闭包最通俗易懂的解释 for循环,定时器,闭包混合一块的那点事。

    for循环,定时器,闭包混合一块的那点事. 1,对于一个基本的for循环,顺序输出变量值. for(var i = 1; i < 4; i++){ console.log(i);//结果不多说了 ...