繁体   English   中英

Redis群集中“磁盘支持的”复制如何工作

[英]how does “Disk-backed” replication work in redis cluster

redis.conf说:

1)支持磁盘:Redis主服务器创建一个新过程,将RDB文件写入磁盘。 之后,文件由父进程逐步传输到从属服务器

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

谢谢

很简单。 首先,将RDB文件读入缓冲区,然后使用socket.write将其发送到正在监听的Salve端口。

实现比我说的要复杂。 但这就是redis所做的。 您可以在redis / src中引用replication.c以获得更多详细信息。

编辑:

是的, 无磁盘机制仅使用子进程,而不使用磁盘作为中间存储,而直接通过电线将RDB发送到从属。
实际上,如果您使用磁盘保存RDB,则redis主服务器可以同时为多个从服务器提供服务而无需排队。 无盘复制一旦在从属服务器上运行,并且如果另一个从属服务器出现并要进行完全同步,则需要将其排队等待第一个从属服务器完成。 因此,还有另一个设置repl-diskless-sync-delay来等待更多从属服务器并行执行此操作。

并且这两种方法仅在发生错误后才发生。 在正常情况下,redis主机和主机通过一条连接良好的导线进行复制以复制redis命令从机,以使主机和从机之间保持相同。 并且如果电线断线或从机掉线,则需要执行部分重新同步操作以获得丢失的部分从机。 如果无法实现psync,它将尝试执行完全重新同步。 完全重新同步就是我们所说的。

完整同步的工作方式如下:

主机开始后台保存过程以生成RDB文件。 同时,它开始缓冲从客户端收到的所有新写命令。 后台保存完成后,主服务器将数据库文件传输到从服务器,从服务器将其保存在磁盘上,然后将其加载到内存中。 然后,主机将所有缓冲命令发送到从机。 这是作为命令流完成的,并且与Redis协议本身的格式相同。

无盘复制只是一项新功能,在这种情况下,它支持完全重新同步以应对缓慢的磁盘压力。 有关它的更多信息,请参阅https://redis.io/topics/replication 例如如何做psync以及为什么psync会失败,您可以从本文中找到答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM