[Redis]主从复制

Redis主从复制

  • 在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,我们定义被复制的服务器为主服务器(master)
  • 对主服务器进行复制的服务器则被称为从服务器(slave)
  • 这种模式叫做主从复制模式
  • 数据流向是单向的,只能是从master到slave;一个slave只能有一个master

作用

  • 为数据提供多个副本,实现高可用
  • 实现读写分离(主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性),主从复制配合读写分离可以分担单个服务器负载提高Redis服务器并发量实现负载均衡
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,但实际上是一种服务的冗余

实现

主从复制的开启,完全是在从节点发起的,不需要我们在主节点做任何事情, 从节点开启主从复制,有3种方式

  • 配置文件
    在从服务器的配置文件中加入:slaveof< masterip>< masterport>
  • 启动命令
    启动命令redis-server后加入:slaveof< masterip>< masterport>
  • 客户端命令
    Redis服务器启动后直接通过客户端执行命令:slaveof< masterip>< masterport>,则该Redis实例成为从节点

断开复制

  • 通过slaveof< masterip>< masterport>命令建立主从复制关系以后,可以通过slaveof no one断开
  • 从节点断开复制后,不会删除已有的数据,只是不再接受主节点新的数据变化

实现原理

主从复制主要可分为:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段

建立链接阶段

主要作用是在主从节点之间建立连接,为数据同步做好准备

数据同步阶段

从节点数据的初始化,具体执行的方式是:从节点向主节点发送psync命令(Redis2.8以前是sync命令),开始同步,根据主从节点当前状态的不同,同步方式可能是全量复制或部分复制

全量复制

于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作

  • 从节点判断无法进行部分复制,向主节点发送全量复制的请求;或从节点发送部分复制的请求,但主节点判断无法进行全量复制
  • 主节点收到全量复制的命令后,执行bgsave,在后台生成RDB文件,并使用一个缓冲区(称为复制缓冲区)记录从现在开始执行的所有写命令
  • 主节点的bgsave执行完成后,将RDB文件发送给从节点;从节点首先清除自己的旧数据,然后载入接收的RDB文件,将数据库状态更新至主节点执行bgsave时的数据库状态
  • 主节点将前述复制缓冲区中的所有写命令发送给从节点,从节点执行这些写命令,将数据库状态更新至主节点的最新状态
  • 如果从节点开启了AOF,则会触发bgrewriteaof的执行,从而保证AOF文件更新至主节点的最新状态

部分复制

  • 用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点
  • 与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,造成主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制

命令传播阶段

主节点将自己执行的写命令发送给从节点,从节点接收命令并执行,从而保证主从节点数据的一致性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值