redis.conf说:
1)磁盘支持:Redis主服务器创建一个写入RDB的新进程 磁盘上的文件。稍后该文件由父母传输 逐步加工到奴隶
我只是不知道“父进程转移给奴隶”是什么意思?
谢谢
答案 0 :(得分:0)
很简单。首先将RDB文件读入缓冲区,然后使用socket.write将其发送到salve的端口,该端口正在监听。
实施比我说的更复杂。但这就是redis所做的。您可以在redis / src中引用replication.c以获取更多详细信息。
编辑:
是的,无磁盘机制只需使用子进程直接将RDB通过线路发送给从属设备,而不将磁盘用作中间存储。
实际上,如果你使用磁盘来保存RDB,redis master可以同时为许多从服务器提供服务而无需排队。一旦无盘复制在slave上运行,并且如果另一个slave进入并希望进行完全同步,则需要排队等待第一个slave完成。所以还有另一个设置repl-diskless-sync-delay来等待更多的slave做这个并行。
这两种方法只在发生错误后才会发生。在正常情况下,redis主机并通过连接良好的线路复制redis命令从机在主机和从机之间保持相同。如果导线断线或从属设备掉落,则需要进行部分重新同步操作以获得错过的部分从属设备。如果无法实现psync,它将尝试执行完全重新同步。完全重新同步是我们所谈论的。
完整同步的工作原理如下:
主服务器启动后台保存过程以生成RDB文件。同时它开始缓冲从客户端收到的所有新写命令。后台保存完成后,主服务器将数据库文件传输到从服务器,从服务器将其保存在磁盘上,然后将其加载到内存中。然后,主设备将所有缓冲的命令发送到从设备。这是作为命令流完成的,与Redis协议本身的格式相同。
无磁盘复制只是一项新功能,在这种情况下支持完全重新同步以应对缓慢的磁盘压力。有关它的更多信息,请参考https://redis.io/topics/replication。比如psync和psync失败的原因,你可以从这篇文章中找到答案。