hg0088:老司机带你玩转面试(3):Redis 高可用之主从模式

2020-07-15 17 views 0

扫一扫用手机浏览

前文回首

建议前面文章没看过的同砚先看下前面的文章:

「{老司机带你玩转面试}(1):缓存中间件 Redis 基础知识以及数据持久化」

「{老司机带你玩转面试}(2):Redis 过时[计谋以及缓存雪崩、击穿、穿透」

Redis 主从模式

在生产环境使用 Redis ,完全克制使用单机模式,单机模式风险太高,一台机械出于某些缘故原由挂掉,『就会导致整个』缓存服务死掉,以是,我们需要使用多台机械来保证 Redis 的高可用,同时也顺便提升了并发性。

对于 Redis “缓存而言”,‘更常见的应用场景是支持读高并发’,《而写高并发的场景相对比》较少(不能说没有,只能说相对读高并发比较少)。

因此,使用主从模式,‘一主多从’,主卖力写,而且将数据复制到其它的 slave 节点,从节点卖力读。所有的读请求所有走从节点。这样也可以很轻松实现水平扩容,支持读高并发。

经典的主从模式架构图如下:

「主从同步计谋」:

master 和 slave 《刚刚毗邻的时刻》,举行(全量同步)。(全量同步)竣事后,举行增量同步。

固然, 若是有需要[,slave 在任何时刻都可以提议(全量同步)。redis 计谋是,无论如何,“首先会实验”举行增量同步,如不乐成,要求从机举行(全量同步)。

(全量同步):

master 执行 BGSAVE 下令, 天生[一个 RDB 「文件」, “发送”给 slave , slave 加载 RDB “「文件」到达与” master 《维持一致》。

  1. slave 毗邻 master 后,“发送” SYNC 下令。
  2. master 吸收到 SYNC ‘命名后’,最先执行 BGSAVE 天生[ RDB 「文件」,并使用缓冲区纪录今后执行的所有写下令。
  3. master BGSAVE {执行完后},向所有 slave “发送”快照「文件」,并在“发送”时代继续纪录被执行的写下令。
  4. slave <收到快照「文件」后抛弃所有旧数据>,「载入收到的快照」。
  5. master 快照“发送”完毕后最先向 slave “发送”缓冲区中的写下令。
  6. salve 完成对快照的载入,{最先吸收下令请求},并执行来自主服务器缓冲区的写下令。
  7. 第一次(全量同步)完成。

增量同步

Redis 增量复制是指 slave 初始化后最先正常事情时 master 发生的写操作同步到 slave ‘的历程’。

增量复制‘的历程’主要是 master 每执行一个写下令就会向 slave “发送”相同的写下令,从服务器吸收并执行收到的写下令。

心跳信息

主从节点相互都市“发送”心跳信息。

master 默认每隔 10 秒“发送”一次心跳信息,slave 每隔 1 秒“发送”一个心跳信息。

注重点:

  • Redis 使用异步的方式将数据从 master 节点复制到 slave 节点,slave 会周期性地确认自己每次复制的数据量。
  • slave 做复制的时刻,不会 block master 正常事情。
  • slave 做复制的时刻,也不会 block 自己当前的查询事情,「只是查询的时刻依然会使用旧数据」,「等到」复制完成后,需要删除老数据加载新数据的时刻才会 block 当前的查询事情。
  • slave <主要用来做横向扩容>,提升读的吞吐量,一定程度‘上’做到了读的高可用。
  • slave 纷歧定要毗邻到 master ,也可以 slave 毗邻到 slave 。
  • slave 『不会处置 过时[』 key , 只会守候[ master 过时[ key。若是 master 过时[了一个 key,《或者通过》 LRU {镌汰了一个} key,“那么会模拟一条” del 下令“发送”给 slave。

<无磁盘化主从复制>

master 节点可以在内存中直接建立 RDB 「文件」,<然>后将 RDB 「文件」直接“发送”给 salve 节点,不在自己内陆落地到磁盘,这个操作只需要在设置「文件」中开启 repl-diskless-sync yes

然则这样做的风险会比较高,因此, 强烈建议在[ master ‘上’开启持久化服务。

若是一定要在 master 『节点‘上’设置不开启持久化』,请在确保 Redis 「实」例不会自动重启。

为啥要确保「实」例不会自动重启?

下面给人[人分享一个案例,<这是生>产环境真实发生过的事情,都是血的教训。

“一”个主从结构的 Redis 集群,当 master ‘没有设置开启数据持’久化,某个时间, 突然[ master 节点宕机,然后自动重启,当 master 节点自[动重启后,由于没有开启数据持久化,这时的 master 节点中是无数据的,当 salve 节点举行数据同步的时刻,会把 salve “节点的数据也做清空操作”。这时,整个主从结构的 Redis 集群全都 没有数据[,『大量的请求过来发现』 Redis 没有数据[,导致请求落到了 DB ‘上’,《结果》是毁灭性的。

主从模式存在的问题是,(它仅仅只做到了读高可用),若是一旦 master 节点挂掉了,就没办法写数据了,只剩下 slave 节点还能读数据,‘然则数据同步也没有了’,《只能靠人工干预举行恢复》,(这并不是我们想要的高可用)。

『我们还需要写高可用』,这就引出了 Redis 的高可用架构:哨兵模式。

简朴来讲,哨兵模式就是在 master 节点不能用后,(可以自觉的举行主备切换),{或者叫做故障转移}。

master 节点在发生故障后,‘整’个集群可以自动检测,将某个 salve 自动切换成 master 节点,〖这种模式才算是实现了〗 Redis 真正意义‘上’的高可用。

参考[

https://www.cnblogs.com/daofaziran/p/10978628.html

,

欧博allbet网址

欢迎进入欧博allbet网址(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe《代理》、Allbet电脑客户端、Allbet手机版下载等业务。

Sunbet网站内容转载自互联网,如有侵权,联系Sunbet 删除。

本文链接地址:http://www.shfkgcjxyxgs.com/post/1633.html

相关文章

发表评论