Redis三种集群模式

Redis支持三种集群模式

1、主从复制模式

2、Sentinel(哨兵)模式

3、Cluster 模式

主从复制模式

在这里插入图片描述
参与复制的Redis实例划分为主节点和从节点。主节点可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从节点。从节点一般是只读的,并接受主节点同步过来的数据。一个主节点可以拥有多个从节点,而一个从节点只能拥有一个主节点。
复制的数据流是单向的,只能由主节点复制到从节点。引入主从复制机制的目的有两个:一个是读写分离,分担 “master” 的读写压力;一个是方便做容灾恢复。

主从复制原理

在这里插入图片描述
从数据库启动成功后,连接主数据库,发送 SYNC 命令;

主数据库接收到 SYNC 命令后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;

主数据库 BGSAVE 执行完后,向所有从数据库发送快照文件,并在发送期间继续记录被执行的写命令;

从数据库收到快照文件后丢弃所有旧数据,载入收到的快照;

主数据库快照发送完毕后开始向从数据库发送缓冲区中的写命令;

从数据库完成对快照的载入,开始接收命令请求,并执行来自主数据库缓冲区的写命令;(从数据库初始化完成)

主数据库每执行一个写命令就会向从数据库发送相同的写命令,从数据库接收并执行收到的写命令;(从数据库初始化完成后的操作)

出现断开重连后,2.8之后的版本会将断线期间的命令传给重数据库,增量复制。

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。Redis 的策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

主从复制优缺点

优点

1、支持主从复制,主机会自动将数据同步到从机,可以进行读写分离;

2、为了分载 Master 的读操作压力,Slave 服务器可以为客户端提供只读操作的服务,提高负载。写服务仍然必须由Master来完成;

缺点

1、Redis不具备自动容错和恢复功能,主机的宕机需要等待机器重启或者手动切换前端的IP才能恢复(也就是要人工介入);

2、主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性;

3、Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂;

Sentinel(哨兵)模式

Redis的主从复制模式下,当主节点不能提供服务,需要手动将一台从节点切换为主节点,这不是一种推荐的方式。为此,Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题。
在这里插入图片描述

哨兵模式的作用

由一个或多个Sentinel(哨兵)实例组成的Sentinel系统可以监控主从的运行状况。

当主节点出现故障的时候,会自动选举一个从节点切换成主节点,然而一个哨兵进程对Redis服务器进行监控有可能会出现误判。为此,一般使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

故障切换的过程

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行 failover(故障转移) 过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,也就是大部分哨兵节点对主节点的下线做了同意的判定,那么这个判定就是客观的,即客观下线。接着哨兵之间就通过投票的方式选举出一个哨兵节点作为领导者,负责进行故障转移(failover)的工作(故障转移的工作只需要一个哨兵节点来完成)。

具体包括:

(1)、在从节点列表中选出一个节点作为新的主节点。

(2)、Sentinel领导者节点会对第一步选出来的从节点执行slaveof no one命令让其成为主节点。

(3)、Sentinel领导者节点会向剩余的从节点发送命令,让它们成为新主节点的从节点。

(4)、Sentinel节点集合会将原来的主节点更新为从节点,并保持着对其关注。

哨兵模式的优缺点

优点

1、 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。

2、 主从可以自动切换,系统更健壮,可用性更高(可以看作自动版的主从复制)。

缺点

1、Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

Cluster 集群模式(Redis官方)

Redis 的哨兵模式解决了主从不能自动故障恢复的问题,但在这种模式下 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容。Redis Cluster是一种服务器 Sharding 技术。

集群的数据分片

Redis 集群没有使用一致性 hash,而是引入了虚拟槽分区的算法。会把Redis 集群分成16384 个槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽。集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
在这里插入图片描述
节点 A 包含 0 到 5460 号哈希槽

节点 B 包含 5461 到 10922 号哈希槽

节点 C 包含 10923 到 16383 号哈希槽

当客户端的请求过来,会首先通过对key进行 CRC16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作,这样就实现了数据的访问更新。
在这里插入图片描述

Redis 集群的主从复制

为了保证高可用,redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了。

集群的特点

所有的 redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

节点的 fail 是通过集群中超过半数的节点检测失效时才生效。

客户端与 Redis 节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

集群模式的优缺点

优点

1、集群模式是一个无中心的架构模式,将数据进行分片,分布到对应的槽中,每个节点存储不同的内容,通过路由能够找到对应的节点负责存储的槽,能够实现高效率的查询。

2、集群模式增加了横向和纵向的扩展能力,实现节点加入和收缩。

缺点

1、key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作。对于映射为不同slot值的key由于执行mset、mget等操作可能存在于多个节点上因此不被支持。

2、key事务操作支持有限。同理只支持多key在同一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能。

3、key作为数据分区的最小粒度,因此不能将一个大的键值对象如hash、list等映射到不同的节点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值