“磁盘支持”复制如何在redis群集中运行

时间:2017-08-21 14:48:55

标签: redis replication

redis.conf说:

1)磁盘支持:Redis主服务器创建一个写入RDB的新进程                 磁盘上的文件。稍后该文件由父母传输                  逐步加工到奴隶

我只是不知道“父进程转移给奴隶”是什么意思?

谢谢

1 个答案:

答案 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失败的原因,你可以从这篇文章中找到答案。