Redis主从同步模式(replication)

主从同步模式(replication)

主从同步是指以一个节点为基准节点,将数据同步给从节点,使得主从节点的数据保持一致,主节点一般也称为Master,从节点Slave,一个Master节点可以有多个Slave节点。这种架构叫 一主多从 的主从架构。如果每一个Slave节点也作为基准节点,同时也拥有多个Slave节点,这种架构叫 级联结构 的主从架构

主从同步集群模式的应用场景

1. Slave作为Master的数据备份

可以大大加强Redis服务的健壮性。当主服务器出现故障时,可以人工或自动的切换到从服务器继续提供服务,同时当主服务器的数据因为某些原因不能恢复时,可以使用从服务器备份的数据。还经常使用从服务器来处理一些操作比较耗时的命令,以防止阻塞主服务器的工作。

2.数据读写分离

一般为主服务器提供写操作,从服务器提供读操作。主服务器的写操作会同步给从服务器。数据读写分离将读操作和写操作隔离开,使得读写相互不影响效率,提高了服务的读写速度

3.多个从服务器根据业务拆分

当读多写少的情况下,可以根据读的不同业务将多个从服务器拆分。此种场景不仅减轻了主服务器的压力,同时也使得不同的业务数据访问互不影响

Redis主从同步原理

全量同步

全量同步一般发生在Slave的初始化阶段,就是Slave的启动阶段

  • 从服务器连接主服务器
  • 从服务器发送 SYNC 命令到主服务器
  • 主服务接受到 SYNC 命令后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后的执行的所有写命令
  • 主服务器 BGSAVE 执行完后,递增地将文件发送到从服务器,并在发送期间继续记录被执行的写命令
  • 从服务器接受到快照文件后丢弃所有旧数据,载入收到的快照
  • 从服务器将快照载入内存
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区写命令
  • 从服务完成对快照的载入,开始接收主服务器发送的写命令请求,并执行写命令
  • 一次全量同步完成

增量同步

增量同步是指Redis在主从模式已经正常工作的情况下,主服务器将写操作同步到从服务器的过程

增量复制的原理 当主服务器每执行一个写命令,就会将该命令发送给所有的从服务器,从服务器接受到命令后立即执行

  1. 主节点执行 BGSAVE 生成全量镜像的 RDB 文件,是如何工作的?

    BGSAVE 命令是用来在后台异步宝座当前数据库的数据到磁盘,不会阻塞主节点的进程,当执行 BGSAVE 后,会立即返回OK, 然后 Redis fork出一个新的子进程 来专门成成全量镜像文件,将数据保存到磁盘后,子进程推出

  2. 主节点 BGSAVE 的过程中,又有新的写请求到来,主节点怎么工作?这些写数据怎么保存?

    根据1的细节,可以知道主节点会有一个新的子进程来单独处理全量镜像的生成工作,那么主节点父进程可以继续来接收新的请求, 当fork的时候,操作系统会采用 写时复制(copy-on-write)策略;即fork发生一刻,父子进程共享同一块内存数据,当父进程接收到写操作时,操作系统会复制一份数据以保证子进程的数据不受影响。所以新产生的RDB文件存储的是fork那一刻的数据

  3. 主服务执行 BGSAVE 命令如果磁盘不够生成 rdb 文件数据的大小,不能同步吗?

    可以采用 无磁盘复制 技术,通常来讲,一个完全重同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据,如果使用比较低速或者容量较小的磁盘,这种操作会给主服务带来较大的压力

    2.8.18开始支持无磁盘复制。使用这种设置时,子进程直接将RDB文件通过网络发送给从服务器,不使用磁盘作为中间存储

    使用磁盘备份传送是多个从节点排队等待传送,即传送时串行的;而 无磁盘复制 技术是主节点在传送之前会等待一段时间(可配置,以秒为单位),等待多个从节点都到达后,并行发送

    # 配置取消硬盘备份
    repl-diskless-sync no
    # 延迟时间以秒为单位,默认为5秒。如果设置为 0 秒,传送会立即启动,不会延迟
    repl-diskless-sync-delay 5
    
  4. 主从同步过程中,从服务器是阻塞的吗?

    主从同步过程中,不会阻塞从服务器。当从服务器进程初始同步时,会使用旧的数据继续提供查询服务。并不是整个过程都是不阻塞的,当从服务器接收到快照文件,需要删除旧的快照并加载新的数据集到内存,这个短暂的时间内会阻塞连接进来的请求

  5. 当主从节点断开复制,从节点数据会删除吗?

    如需断开复制,从节点执行命令

    slaveof no one
    

    从节点不会删除已有的数据,只是不再接收主节点的数据变化

Redis 主从同步的优缺点

优点

  • 同一个 Master 可以部署多个 Slave
  • Slave 还可以接受其他的 Slave 的连接和同步,即所谓的 级联结构。有效的减轻 Master 的压力
  • 主从同步期间,主从节点均是非阻塞。不影响服务的查询和写入
  • 可以很好的实现读写分离的架构,系统的伸缩性得到提高

缺点

  • 主机的宕机会非常严重,导致整个数据不一致的问题。
  • 全量的复制的过程中,必须保证主节点必须有足够的内存。若快照的文件过大,还会对集群的服务能力产生影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值