一、主从复制 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 [ˈsentɪnl]
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 退出了主从模式后的成果如下: