同步与异步集群

Posted

技术标签:

【中文标题】同步与异步集群【英文标题】:Synchronous vs Asynchronous Clustering 【发布时间】:2014-10-08 01:57:11 【问题描述】:

我在阅读 Galera Cluster 上的 mariaDD 知识库时遇到了这个问题:

同步和异步复制的基本区别在于,“同步”保证如果更改发生在集群的一个节点上,它们会“同步”或同时发生在其他节点上。 “异步”不保证在“主”节点上应用更改与将更改传播到“从”节点之间的延迟。延迟可以很短也可以很长。这也意味着如果主节点崩溃,一些最新的更改可能会丢失

最后一句话,我一直明白,即使异步集群设置中的从属设备上的更新不是同时执行的,它也会将这些更新记录到一个 bin 日志文件中,因为正在对掌握。因此,如果主服务器在所有数据传递到从服务器之前崩溃,则当主服务器恢复时,更新仍然会继续进行,因为 bin 日志文件记录了更新。有人可以告诉我我的理解是否错误,并请为我澄清此事。谢谢。

【问题讨论】:

【参考方案1】:

在您的正常复制对示例中,从属服务器会在主服务器返回后赶上。假设主人确实回来了,你不会真正丢失数据,但如果主人永久死亡,数据就会丢失。您提到的知识库文章是在讨论复制延迟,而不是复制流的整体完整性。

在正常复制的情况下,如果从属 io 线程(从主控获取复制事件的部分)能够跟上主控,那么如果主控崩溃,从属可能只会损失几秒钟。但是,如果它无法跟上并且例如落后 1 小时,则从站将无法访问 1 小时的数据。另一种可能导致您无法访问从站数据的方式是,如果您设置了最大中继日志大小并且已达到该上限。

Galera 确保在任何节点上实际提交写入之前将写入发送到集群中的每个节点,因此一旦完成写入的节点提交写入,所有其他节点将提交相同的写。使用 galera,所有写入基本上在每个节点上同时发生。在正常运行过程中任何时候丢失任何节点都不会造成任何数据丢失。

【讨论】:

以上是关于同步与异步集群的主要内容,如果未能解决你的问题,请参考以下文章

关于同步与异步的那些事儿

Gevent中的同步与异步详解

同步与异步到底是什么???

同步与异步

HTTP请求中同步与异步有啥不同

同步与异步阻塞与非阻塞