redis.conf说:
1)磁盘备份: Redis master创建一个新的进程,将RDB文件写入磁盘。随后,父进程将该文件以增量方式传输到从进程
我只是不知道“由父进程转移到从属进程”是什么意思?
谢谢
发布于 2017-08-21 23:23:36
这很简单。首先将RDB文件读入缓冲区,并使用socket.write将其发送到正在侦听它的salve的端口。
实现比我所说的要复杂得多。但这就是redis所做的。有关更多详细信息,请参阅redis/src中的replication.c。
编辑:
是的,无磁盘机制只使用子进程直接通过线路将RDB发送到从进程,而不使用磁盘作为中间存储。
实际上,如果您使用磁盘来保存RDB,redis master可以同时为多个slaves提供服务,而无需排队。一旦无磁盘复制在从设备上提供服务,并且如果另一个从设备到来并希望执行完全同步,则它需要排队等待第一个从设备完成。因此,还有另一个设置repl-diskless-sync-delay来等待更多的从机并行执行此操作。
而这两种方法只有在发生错误之后才会发生。正常情况下,redis主机和从机通过连接良好的线路复制redis命令,使从机在主机和从机之间保持一致。如果线路断开或从机倒下,则需要进行部分重新同步操作,以获得从机失中的部分。如果psync不可能实现,它将尝试执行完全重新同步。完全重新同步就是我们所说的。
下面详细介绍了完全同步的工作原理:
主设备启动后台保存过程以产生RDB文件。同时,它开始缓冲从客户端接收的所有新的写命令。后台保存完成后,主服务器将数据库文件传输到从服务器,从服务器将其保存在磁盘上,然后将其加载到内存中。然后,主设备将所有缓冲的命令发送到从机。这是以命令流的形式完成的,并且与Redis协议本身的格式相同。
而的无盘复制只是一个新特性,它支持在这种情况下完全重新同步,以应对缓慢的磁盘压力。有关它的更多信息,请参阅https://redis.io/topics/replication。例如如何执行psync以及为什么psync会失败,您可以从本文中找到答案。
https://stackoverflow.com/questions/45800092
复制相似问题