一、主从复制Replication
redis反对主从复制的模式。
在主从复制模式下Redis节点分为两种角色:主节点(也称为master)和从节点(也称为slave)。这种模式集群是由一个主节点和多个从节点形成。
准则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连贯master来同步数据。

这是一个典型的分布式读写拆散模型。咱们能够利用master来解决写操作,slave提供读操作。这样能够无效缩小单个机器的并发拜访数量。
要实现主从复制这种模式非常简单,主节点不必做任何批改,间接启动服务即可。从节点须要批改redis.conf配置文件,退出配置:slaveof <主节点ip地址> <主节点端口号>,例如master的ip地址为192.168.200.129,端口号为6379,那么slave只须要在redis.conf文件中配置slaveof 192.168.200.129 6379即可。
别离连贯主节点和从节点,测试发现主节点的写操作,从节点立即就能看到雷同的数据。然而在从节点进行写操作,提醒 READONLY You can't write against a read only slave 不能写数据到从节点。
当初咱们就能够通过这种形式配置多个从节点进行读操作,主节点进行写操作,实现读写拆散。
二、哨兵sentinel [sentnl]
sentinel(哨兵)是用于监控redis集群中Master状态的工具,其自身也是一个独立运行的过程,是Redis 的高可用解决方案,sentinel哨兵模式曾经被集成在redis2.4之后的版本中。
sentinel能够监督一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,主动将该master下的某个从服务降级为master服务代替已下线的master服务持续解决申请,并且其余从节点开始从新的主节点复制数据。
在redis装置实现后,会有一个redis-sentinel的文件,这就是启动sentinel的脚本文件,同时还有一个sentinel.conf文件,这个是sentinel的配置文件。
sentinel工作模式:

留神:可能有些同学会有疑难,当初咱们曾经基于sentinel实现了高可用,然而如果sentinel挂了怎么办呢?其实sentinel自身也能够实现集群,也就是说sentinel也是高可用的。
故障转移如下图:

三、Redis内置集群cluster
Redis Cluster是Redis的内置集群,在Redis3.0推出的实现计划。在Redis3.0之前是没有这个内置集群的。Redis Cluster是无核心节点的集群架构,依附Gossip协定协同自动化修复集群的状态。
Redis cluster在设计的时候,就思考到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保留各自的数据和整个集群的状态。每个节点都和其余所有节点连贯,而且这些连贯放弃沉闷,这样就保障了咱们只须要连贯集群中的任意一个节点,就能够获取到其余节点的数据。
Redis cluster集群架构图如下:

哈希槽形式调配数据
须要留神的是,这种集群模式下集群中每个节点保留的数据并不是所有的数据,而只是一部分数据。那么数据是如何正当的调配到不同的节点上的呢?

Redis 集群是采纳一种叫做哈希槽 (hash slot)的形式来调配数据的。redis cluster 默认调配了 16384 个slot,当咱们set一个key 时,会用CRC16算法来取模失去所属的slot,而后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384
假如当初有3个节点曾经组成了集群,别离是:A, B, C 三个节点,它们能够是一台机器上的三个端口,也能够是三台不同的服务器。那么,采纳哈希槽 (hash slot)的形式来调配16384个slot 的话,它们三个节点别离承当的slot 区间是:

  • 节点A笼罩0-5460
  • 节点B笼罩5461-10922
  • 节点C笼罩10923-16383
    那么,当初要设置一个key ,比方叫my_name:
    set my_name iceshi
    依照redis cluster的哈希槽算法:CRC16('my_name')%16384 = 2412。 那么就会把这个key 的存储调配到 节点A 上了。
    Redis cluster的主从模式
    redis cluster 为了保证数据的高可用性,退出了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会在这些从节点中选取一个来充当主节点,从而保障集群不会挂掉。
    redis cluster退出了主从模式后的成果如下: