Redis --- 三种模式:主从、哨兵、集群

2021-06-07  本文已影响0人  _code_x

写在前

持久化解决了单机redis的数据保存问题,但是redis还是存在以下两个问题:

  1. 假如某天这台redis服务器挂了,redis服务将彻底丧失

  2. redis的读和写都集中到一台机上,如果请求量比较大时,将可能被击溃

redis的多机数据库实现,主要分为以下三种:

Redis主从复制

同步类型与同步过程

根据同步是否全量分为:全量同步和部分同步(增量同步)。

Redis的主从复制分为同步(sync)和命令传播两个操作。我们向从服务器发送SLAVEOF命令(异步命令),从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令来完成。步骤如下(全量同步),一般发生在SLAVE初始化阶段,需要将MASTER的数据全部复制一份

(1)从服务器连接主服务器,发送SYNC命令

(2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件,并使用缓冲区记录此后执行的所有写命令;

(3)主服务器BGSAVE执行完后,向【所有】从服务器发送快照文件,并在发送期间继续记录被执行的写命令;

(4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;

(5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令

(6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态。

Redis命令传播是指同步操作完毕后,开始正常工作时主服务器发生的写操作同步到从服务器的过程。命令传播的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

什么是部分重同步?

从Redis 2.8开始,如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步。它的工作原理是这样:

主从复制的特点

主从复制的优缺点

优点(开始的两个问题):

缺点:

哨兵Sentinel模式(基于主从模式)

使用哨兵模式进行主从替换与故障恢复!

Redis Sentinel 是一个分布式系统, 可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

Redis 2.8版开始正式提供名为Sentinel的主从切换方案,通俗的来讲,Sentinel可以用来管理多个Redis服务器实例,可以实现一个功能上实现HA的集群,Sentinel主要负责三个方面的任务

多哨兵模式:一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,多哨兵可以防止误判并且使整个哨兵集合更加健壮

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线

当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

对于不可用描述术语总结:

领导者哨兵选举流程:

当确定redis服务器确实挂了以后,哨兵要进行故障转移,并且只能有一个哨兵去完成该操作,所以这时候就要选举出一名哨兵来当此重任。

讲讲slave->master选举算法(怎么完成故障迁移)

如果master被判odown了,大部分哨兵允许主备切换,那么需要选举一个slave,依次考虑如下:

自动发现机制(三个定时任务)

监控redis服务器的运行状态:

哨兵模式的优缺点

优点:

缺点:

ps:“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

1. redis 集群模式的工作原理能说一下么?在集群模式下,****redis key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

Redis Cluster集群模式

工作原理

集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。一个Redis集群通常由多个节点组成;最初,每个节点都是独立的,需要将独立的节点连接起来才能形成可工作的集群。

Redis Cluster并没有使用一致性hash,而是采用hash slot(哈希槽) 算法,一共分成16384个槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽(每个节点对应若干个槽)。

关键点

redis cluster架构下的每个redis都要开放两个端口号,比如一个是6379,另一个就是加1w的端口号16379。

节点间的内部通信机制

写在前:任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等

在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。

基本通信原理,集群元数据的维护有两种方式:集中式、Gossip 协议(分布式)。redis cluster 节点间采用 gossip 协议进行通信。

补充

gossip协议

gossip 协议包含多种消息,包含 ping,pong,meet,fail 等等。

分布式寻址算法

在分布式系统中,对数据的准确定位以及整个系统的结构具有很高的要求。现代分布式寻址算法中,主要以下面三种算法为代表:

使用场景:

hash 算法

一致性hash算法(动态扩容和负载均衡)

ps:缓存热点问题解决方案

问题描述:同一时间访问同一个缓存key的请求数量过高,导致某台特定的redis服务器压力过大,而其他的redis服务器没有分担到压力。

举例说明:店铺活动查询的时候缓存key为店铺编码,value为店铺能够参加的活动编码信息,某个时候店铺搞活动瞬时redis访问命令数飙升,热点key 所在的redis服务器压力瞬间飙升。

解决方案

redis cluster hash slot 算法

redis cluster 的高可用与主备切换原理

巨人的肩膀

https://www.jianshu.com/p/d6dae5a7f830

https://blog.csdn.net/baidu_36161424/article/details/104945388

https://blog.csdn.net/khuangliang/article/details/109632820

上一篇 下一篇

猜你喜欢

热点阅读