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. hack (浏览器兼容css hack)

    1.hack的原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内 ...

  2. 微软Azure虚拟机备份服务在中国发布

    近期,Azure虚拟机备份服务在微软智能云上发布. 相关功能阐述: Azure IaaS虚拟机备份服务针对Windows操作系统,提供了应用一致性的备份技术:同时针对Linux操作系统,提供了文件系统 ...

  3. 实现UILabel渐变色效果

    实现UILabel渐变色效果 效果如下图: 源码: // // CombinationView.h // ChangeColorLabel // // Created by YouXianMing o ...

  4. 生成证书,用于签名Android应用

    1. keytool 命令 1)使用JDK中的一个命令keytool,都有哪些命令呢,使用 keytool -help 进行查看 2)本次使用 keytool -genkeypair 命令生成签名,查 ...

  5. eclipse中对Hadoop项目进行mvn clean install时报错的处理

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...

  6. 重新认识KCP

    什么是KCP KCP是一种网络传输协议(ARQ,自动重传请求),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠传输,它的特点是牺牲带宽来降低延迟.因为TC ...

  7. 【深入理解JAVA虚拟机】第三部分.虚拟机执行子系统.3.函数调用与执行

    这章原名叫“虚拟机字节码执行引擎”,实际就是讲的函数如何调用和执行的. 1.概述 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力, 其区别是物理机的执行引擎是直接建立在处理器. 硬 ...

  8. 020hashlib模块

    #里面内容没有见过,可能会比较难懂,需要找资料.我只是记录了视频中的用法,其他理解的东西,我直接理解,就没有写下来了.下面内容是视频演示过程 import    hashlib m = hashlib ...

  9. Ubuntu Tweak (linux下的优化大师)

    Ubuntu Tweak 是中国人开发的一款专门为Ubuntu准备的配置.调整工具,它类似与compiz,但是界面更友好. 下面是安装命令: 第一步:添加tweak源 sudo add-apt-rep ...

  10. Webpack笔记(三)——一款破产版脚手架的开发

    前些天一直在学习入门Webpack,后来尝试了自己搭建一下一个简单的React开发环境,后来就在想可不可以自己写一个简单的脚手架,以免每次搭建一个简单的开发环境都需要自己一个个的配置,这样很麻烦,使用 ...