• 分布式缓存——Redis主从架构
    • 一、搭建主从架构:
      • 1、背景:
      • 2、主从节点搭建:
        • 2.1 开启多个Redis服务
        • 2.2 建立这些Redis之间的主从关系:
        • 2.3 查看结果:
    • 二、主从数据同步原理:
      • 1、 主从同步的第一步——全量同步:
      • 2、全量同步的流程:
      • 3、slave重启后的同步——增量同步:
      • 4、优化Redis主从架构:
      • 5、总结:

分布式缓存——Redis主从架构

一、搭建主从架构:

1、背景:

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。
因为Redis在大多情况下都是读多写少的场景, 所以使用主从集群,可以实现它的读写分离,一主多从,多个从节点共同承担读操作,从而提升读的并发能力。

2、主从节点搭建:

主从节点搭建以后,主节点可以读和写,从节点只能读不能写。

2.1 开启多个Redis服务

2.2 建立这些Redis之间的主从关系:

有临时和永久两种模式:

  • 修改配置文件(永久生效),在redis.conf中添加一行配置:
    slaveof

  • 使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
    slaveof

2.3 查看结果:

二、主从数据同步原理:

1、 主从同步的第一步——全量同步:

master如何判断slave是不是第一次来同步数据?

replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid。

offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

因此slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据

slave在第一次同步的时候,会向master发送自己的ip,master判断到它的id和自己不一样,则是第一次请求同步数据,需要做全量同步数据。master先把自己的ip和offset返回给slave同步,然后再通过bgsave生成RDB文件,同时记录RDB期间的所有命令,然后把RDB发送给slave同步,再把repl_baklog中的命令发给slave进行同步。

2、全量同步的流程:

3、slave重启后的同步——增量同步:

4、优化Redis主从架构:

可以从以下几个方面来优化Redis主从集群:

  1. 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO。
  2. Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
  3. 适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
  4. 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力

5、总结: