Redis Cluster Goal:
     1. 最大支持1000个节点的高性能、可线性扩展集群;集群架构中无Proxy层,主从间采用异步同步机制(replication),无merge层(不支持跨节点操作)
     2. 可接受的写入安全性(存在数据丢失的可能)
     3. 可用性:当集群中大部分主节点可用,且失效的主节点至少有一个Slave可达时,集群可用;支持主节点失效从节点自动升级为主节点,支持从节点迁移以保证每个主节点至少有一个从节点。

Redis集群Key相关:
     1. 不支持需要跨节点的命令,这些命令当需要操作的Key在单个节点上时仍旧可用
     2. 支持指定某些特定Key存储于同一节点
     3. 集群不再支持多databases

单个Redis实例单进程运行,只能利用到单个CPU,若要利用服务器所有性能,可在单台服务器运行多个实例,以最大化利用CPU性能。但要考虑到机器可用性,若机器不可用,则会导致多个实例失效。

Redis集群数据一致性保证:
     Redis集群不提供强一致性保证。默认情况下,主节点接收到写入命令后返回客户端,然后与从节点进行同步。
     命令WAIT提供了集群近似强一致性保证。

Redis集群TCP端口:
每个节点需要开通两个TCP端口
     1. 接收来自客户端的连接,如6379,可称之为命令端口。该端口需像集群其他节点及客户端节点开放。
     2. 数据端口(data port),为连接端口+10000,如16379,用于集群总线(cluster bus)通信,主要功能有:failure检测,配置更新,failover认证等。该端口需向集群其他节点开放。
     3. 集群若要正常工作,上述两端口均需按要求开放。

Redis集群数据分片(Sharding):
     Redis集群未采用一致性Hash,而是将每个key映射到slot。一个Redis集群拥有16384个Hash slot,这些slot被平均分配到集群中的每个节点上。每个key对应的slot为:key的CRC16码对16384取模。
     这种数据分片方案使得在集群中添加或者删除节点变得非常方便,在添加或者删除节点时,集群无需停止。
    
Redis集群配置参数:
    
     cluster-enabled <yes/no>: 集群模式开关
     cluster-config-file <filename>: 集群配置文件,用于存储集群内节点的信息及集群配置信息。该文件由节点维护,每次集群有变化时重写,用户不能对该文件进行编辑。
     cluster-node-timeout <milliseconds> 集群内节点不可用的最大时间,超过该时间节点将被认为无效。
     cluster-slave-validity-factor <factor>: 设为0时集群内Slave将会持续询问Master的可用性。当设为其他值时,例如10,而cluster-node-timeout设为5 seconds,当Slave与Master间超过50 seconds没有通信时,Slave不会尝试再去使主节点失效,这有可能导致集群不可用。
     cluster-migration-barrier <count>: 当某些主节点不再具有从节点而需要migration时,其他主节点应保留的最小Slave个数
     cluster-require-full-coverage <yes/no>: 默认为yes,当集群内一定比例的Key没有被节点Cover的时候,集群不再可用。设为no,则这种情况下集群仍旧可用

Redis集群节点ID(Node ID):
     集群内每个节点具有一个唯一的ID,该ID在该节点全生命周期中不变,集群通过ID唯一标识节点,而不是可能发生变化的IP 和Port。
    
Redis集群在线操作:
     Resharding:
         当集群内某些节点负载过高时,可以通过在线Resharding来均衡负载。Resharding操作期间,集群仍旧可用。
         Resharding需要借助redis-trib.rb 脚本完成,需要自定Resharding的Slots数量,目标节点,源节点等信息。
    
     手动故障切换(Manually Failover):
         当集群内某些节点需要进行升级等操作时,Redis集群支持手动故障切换操作,而同时不影响集群的可用性。

动态添加节点:
         通过借助redis-trib脚本可以添加节点作为Master或者Slave。
         redis-trib.rb add-node
     动态删除节点:
         redis-trib.rb del-node 可以删除空Master或者Slave

集群升级:
         当集群需要升级时可以通过动态启停实现。
         a. 对于Slave: 通过1. 停机 2. 升级版本 3. 重启 即可实现
         b. 对于Master:
             1. 对Master实施Manually Failover
             2. 等待Master转变为Slave
             3. 实施Slave升级步骤
             4. 对新Master实施Manually Failover以使原节点重新成为Master
         c. 可以对集群内所有节点逐个实施上述步骤以达到升级整个集群的目的

Redis Cluster Notes的更多相关文章

  1. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  2. Redis Cluster 分区实现原理

    Redis Cluster本身提供了自动将数据分散到Redis Cluster不同节点的能力,分区实现的关键点问题包括:如何将数据自动地打散到不同的节点,使得不同节点的存储数据相对均匀:如何保证客户端 ...

  3. Redis Cluster

    使用 Redis Cluster Redis 3.0 在2015年出了Stable版本,3.0版本相对于2.8版本带来的主要新特性包括: 实现了Redis Cluster,从而做到了对集群的支持: 引 ...

  4. Redis Cluster 介绍与使用

    Redis Cluster 功能特性 Redis 集群是分布式的redis 实现,具有以下特性: 1. 高可用性与可线性扩张到1000个节点 2. 数据自动路由到多个节点 3. 节点间数据共享 4. ...

  5. Redis Cluster原理

    Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写. ...

  6. 安全稳定实现redis cluster自动化迁移

    背景 目前redis集群最火的是codis和redis cluster(官方),但官方自带工具并没有支持密码操作.那么需要密码认证使用redis cluster集群的同学要仔细看了哦. 相信大家很多人 ...

  7. redis cluster php 客户端 predis

    php有redis的扩展,目前来说,还不支持redis cluster,推荐一下predis,功能比较全,从单个,到主从,到cluster都是支持的.效率怎么样,要靠自己去测试一下. 1,下载pred ...

  8. Redis Cluster搭建方法简介22211111

    Redis Cluster搭建方法简介 (2013-05-29 17:08:57) 转载▼       Redis Cluster即Redis的分布式版本,将是Redis继支持Lua脚本之后的又一重磅 ...

  9. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

随机推荐

  1. spring-wind 搭建过程问题记录

    最近想搭一个 shiro+ssm的快速开发框架,用于后台管理以及微信公众号的开发.后台主要是权限管理,于是选择有spring+shiro,微信公众号的前端页面搜了下有用velocity开发的,刚好看到 ...

  2. 浏览器环境下的javascript DOM对象继承模型

    这张图是我直接在现代浏览器中通过prototype原型溯源绘制的一张浏览器宿主环境下的javascript DOM对象模型,对于有效学习和使用javascript DOM编程起到高屋建瓴的指导作用, ...

  3. SpringBoot页面访问处理

    SpringBoot页面访问处理 1.介绍 Springboot推荐使用thymeleaf模板引擎搭载html页面实现jsp动态渲染效果,因此这里才会用该种方案进行. 2.集成步骤 引入thymele ...

  4. Eigen参考资料

    Getting started https://eigen.tuxfamily.org/dox/GettingStarted.html long tutorial https://eigen.tuxf ...

  5. CefSharp 浏览器核心,爬虫

    CefSharp是什么 A framework for embedding web-browsing-like capabilities to a standard .NET application ...

  6. 贝叶斯网络(Bayesian network))简介(PRML第8.1节总结)概率图模型(Graphical models)

    转:http://www.cnblogs.com/Dzhouqi/p/3204353.html 部分图为手写,由于本人字很丑,望见谅,只是想把PRML书的一些部分总结出来,给有需要的人看,希望能帮到一 ...

  7. 自开发Web应用和SAP Customer Data Cloud Identity服务的集成

    今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...

  8. mongodb常用基础命令

    查看当前使用的数据库,也可以直接用dbdb.getName() 显示当前db状态db.stats() 当前db版本 db.version() 查看当前db的链接机器地址db.getMongo() 查看 ...

  9. MongoDB排序记录

    MongoDB sort()方法 要在MongoDB中排序文档,需要使用sort()方法. 该方法接受包含字段列表及其排序顺序的文档.使用指定排序顺序1和-1. 1用于升序,而-1用于降序. 语法 s ...

  10. 51nod 1837 砝码称重【数学,规律】

    题目链接:51nod 1837 砝码称重 小 Q 有 n 个砝码,它们的质量分别为 1 克. 2 克.……. n 克. 他给 i 克的砝码标上了编号 i (i = 1, 2, ..., n),但是编号 ...