前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis主从架构(replication)

Redis主从架构(replication)

作者头像
张申傲
发布2020-09-03 15:52:27
6510
发布2020-09-03 15:52:27
举报

Redis主从架构(replication)

一. Redis如何支持超过10w+的并发量

  1. 单机 单机Redis能够承载的QPS大概在上万到几万之间,取决于机器性能、业务操作复杂性等。理论上说,单机Redis无法支撑超过10w的并发量。
  2. 读写分离 对于大部分缓存系统来说,请求都是读多写少的,因此采用读写分离架构能够有效提升整体性能。 读写分离采用一主多从架构,所有写请求都由Master处理,同时Master负责将数据同步到每个Slave上。Slave负责处理所有的读请求。在这种架构上,水平扩容也十分方便,直接增加Slave节点即可。

二. replication的基本流程

  1. master采用异步复制的方式,将数据同步给slave。但是从redis 2.8版本开始,slave也会周期性地与master通信,确认自己同步的数据量。
  2. 一个master可以配置多个slave。
  3. slave也可以连接其他的slave。
  4. master进行数据同步时,是不会block正常服务的。
  5. slave在进行数据复制时,也不会block自己的查询操作,它会用旧的数据提供查询服务。但是当复制完成后,需要删除旧的数据并加载新的,这时就会阻塞查询操作。
  6. slave可以十分方便地进行水平扩展,提高读的吞吐量。

三. master持久化对于主从架构的意义

采用主从架构时,建议必须开启master的持久化。

不建议将slave作为master的数据热备份。因为一旦关闭master的持久化,master故障重启时,数据可能是空的,而一经复制,所有slave的数据也都丢失了。因此master一定要有持久化机制,而且要有数据备份。

尽管通过某些高可用机制(如Redis提供的sentinal)支持slave自动接管master,但是一旦没有检查到master宕机,而master又自动重启了,就可能导致上面所说的所有的slave数据都被清空,导致数据丢失。

四. 主从复制基本流程

  1. slave启动时,发送PSYNC命令给master
  2. 如果slave是重连到master,则master仅仅复制slave丢失的那部分数据。否则,如果slave是第一次连接到master,则master会触发一次full resynchronization
  3. master执行full resynchronization时,会创建一个后台线程,生成一个RDB快照文件,同时将接受到的客户端的写命令缓存在内存中。RDB文件生成完毕后,master会将RDB文件通过网络发送给slave。slave会先将RDB文件写入磁盘,然后再从本地磁盘加载到内存中。之后,master会将内存中缓存的客户端写命令也发给slave,slave也会同步这些数据。
  4. 如果由于网络故障,slave和master断开了连接,则会自动发起重连。master如果发现有多个slave重连,仅仅会启动一个rdb save操作,用一份数据服务所有的slave。

五. 主从复制的一些feature

  1. 断点续传: 从redis 2.8开始,就支持主从复制的断点续传。如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份。 master 会在内存中创建一个backlog,master和slave都会保存一个replica offset还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制。但是如果没有找到对应的offset,那么就会执行一次full resynchronization。
  2. 无磁盘化复制: master在内存中直接创建rdb文件,然后通过网络发送给slave,不会在自己本地落地磁盘了。 配置: #开启无磁盘化复制,适用于磁盘性能较差但是网络性能好的场景 repl-diskless-sync yes #master延迟一定时间再开始复制RDB文件,目的是等待更多slave重新连接过来,便于并行复制 repl-diskless-sync-delay 5
  3. 过期key处理 slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。

六. 主从架构下的高可用性

  1. 高可用的概念 如果在一年之内,99.99%的时间系统都是可以正常提供服务的,则称系统是高可用的。
  2. 主从架构下的不可用
    1. 如果是一主多从的架构,一台slave故障,其他slave仍然可以提供读服务。
    2. 如果master故障,则Redis无法提供写服务,整个集群就不可用了。
  3. 如何保证高可用性
    1. master下挂多个slave,保证读服务的高可用。
    2. 通过Redis提供的sentinel或其他方式,对master进行监控,一旦master故障,则开启failover,实现主备自动切换。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis主从架构(replication)
    • 一. Redis如何支持超过10w+的并发量
      • 二. replication的基本流程
        • 三. master持久化对于主从架构的意义
          • 四. 主从复制基本流程
            • 五. 主从复制的一些feature
              • 六. 主从架构下的高可用性
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档