10、主从服务

复制过程
  1、从服务器发送psync命令给主服务器,如果是第一次进行主从复制,那么发送psync ? -1命令,否则会发送psync 命令
  2、主服务收到psync命令后,根据发送来的命令判断是完整同步还是部分同步,如果是完整同步,执行bgsave命令,后台会生成一个RDB文件,同时返回+FULLRESYNC 给从服务器,并且用一个缓冲区记录从现在开始所有的写命令。如果是部分同步,返回+CONTINUE给客户端标识进行部分同步操作。
  3、从服务器将主服务发送的RDB文件或者复制挤压缓冲区的谢写命令载入到服务器里

psync
  psync分为完整同步和部分同步
  部分同步由主从服务器的复制偏移量、复制挤压缓冲区和运行id组成。
  复制积压缓冲区
    复制积压缓冲区是由服务器维护的固定的先进先出的固定队列,默认大小1M,通过repl-backlog-size设置。如果入队元素大于队列长度时,则会弹出最先入队的元素,新元素会被放入队列。
    当主服务器进行命令传播的时候,它不仅会将写命令发送给所有从服务器,还会将命令发送给复制积压缓冲区中。
在这里插入图片描述
    主服务器的积压缓冲器不仅会保存最近一部分的写命令,并且还会为每个队列中的字节记录对应的偏移量。
    当从服务器重新连上主服务器时,会将自己的复制偏移量发送给主服务器,如果偏移量在复制积压缓冲区内,那么主服务器向从服务器发送+CONTINUE回复,表示数据同步将以部分同步方式来进行,否则进行完整同步。
  服务器运行id
    redis服务在启用的时候会生成一个id,由40个随机的16进制字符组成,当主从服务器第一次复制的时候,主服务器会将运行id发送给从服务器,从服务器保存主服务器的运行id,当从服务器断开重新连接的时候,会带上这个运行id,主服务器判断从服务器发送的运行id和当前的id是否相同,如果相同,则可以进行部分同步操作,否则进行完成同步操作。
  实现原理
    1、如果从服务器没有复制过任何服务器,那么发送psync ? -1命令,请求服务器进行完整重同步
    2、如果之前复制过某个主服务器,那么再一次复制的时候发送psync 命令
    3、如果主服务器返回+FULLRESYNC ,那么表示主从服务器进行完整重同步操作,如果返回+CONTINUE,那么表示主从服务器进行部分重同步操作,如果返回-ERR,表示主服务的版本低于2.8,无法识别psync命令,那么从服务器将会向主服务发送sync命令

复制检测丢失
  从服务器每隔一秒发送replconf ack 命令,该命令可用于检测主从数据库数据是否一致,比如主服务器的offset为10086, 从服务器的offset为1000,那么主服务器在接收到replconf的offset之后发现两边offset不一致,那么主服务器就会将丢失的数据重新发送给从服务器,从而保证数据一致性

从节点写命令配置
   min-slaves-to-write 3,从节点小于3,主服务器拒绝执行写命令
  min-slaves-max-lag 10,所有从服务器的延迟(根据replconf ask命令判断从节点超时时间)都大于10秒时,主服务器拒绝执行写命令

心跳检测
  从服务器是每10秒发送一次ping命令给主服务器,通过repl-ping-slave-period设置,默认10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值