【Redis篇11】redis集群方案-主从

47 阅读3分钟

Redis中提供的集群方案:

  • 主从复制
  • 哨兵模式
  • 分片集群
  1. redis主从数据同步的流程是什么?
  2. 怎么保证redis的高可用和高并发?
  3. 你们使用redis是单点还是集群,那种集群?
  4. redis分片集群中数据是怎么存储和读取的?
  5. redis集群脑裂,该怎么解决呢?

腾讯云内存版标准架构:

image.png

腾讯云内存版集群架构:

image.png

Proxy 特性:
它负责执行路由分配、均衡负载以及自动故障切换等关键任务,从而为您简化了客户端的逻辑处理。深入理解 Proxy 的路由机制和对特定命令的处理策略,将助力您构建更为高效的业务架构。

image.png


主从复制特点:
如果目前你使用的redis是单节点,那么单节点的并发能力是有上限的;想要提高并发能力,最常见的就是搭建主从集群,并且它能够实现读写分离。一般使用这种场景的都是读多写少。它的架构是多个节点,一个主节点叫master,其他节点叫salve或replica。主节点接收写操作,并把数据同步到从节点,从节点接收读操作,这样读的并发能力自然是提高了。

主从数据同步原理:
说到主从数据的同步,自然而然想到数据应该有两种不同情况。第一次同步叫做全量同步,有数据之后就应该增量同步。

全量数据同步(当有一个从节点,接入集群后):

从节点salve执行建立连接的操作,然后master发起同步数据的请求。
master接收到请求后,会先去判断一下这个节点是不是第一次同步,如果是第一次同步就把数据的版本信息发送给从节点,从节点把信息保存到本地,这时主从的版本信息就保持一致了。
master同时会执行一次bgsave,然后将rdb发送给从节点
从节点接收到数据后,将会清空本地的数据,执行rdb中间,完成了数据同步。
(如果这个过程中master还接收到新的写命令,将会将它保存到而是同步repl_backlog文件中,然后再将这个文件发送给从节点,从节点执行完这个文件的数据,这时主从的数据就完全同步了)

master它是如何判断从节点salve是第一次请求那呢?

主从之间是如何确保同步数据时候,每次都是不多不少呢?这部分数据就是从节点需要的数据呢?

知识点:

  • replication ID,它是一个数据集的标记
    如果主节点和从节点它们是同一个ID,那么就说是一个数据集。
    当从节点发起请求数据同步时候,就会把自己的replication ID发送给主节点,主节点将它与自己的replication ID 比较,不一样就说明是第一次进行数据同步。然后就把自己的replication ID发送给从节点。

如果说主从节点的replication ID是一样的,那么说它们是已经全量同步过一次了,那么此时的同步就是增量同步了,不会创建rdb文件了,而是同步repl_backlog 文件。那应该怎么同步呢?

知识点:
offset 偏移量
当从节点请求数据同步时,就会携带自身的offset发送给主节点。主节点将之与自身的偏移量比较,就知道该从而是同步repl_backlog什么位置到什么位置的数据该同步给salve了

全量同步图解 image.png 增量同步图解

image.png