Elasticsearch 如何从非一致的仲裁中恢复

How does Elasticsearch recover from a quorum that is not unanimous

当使用具有仲裁的复制时,Elasticsearch 允许某些(少量)副本分片的写入失败。写入副本可能会失败,只是因为它 暂时 不可用(例如,由于临时网络分区)。当该分片再次可用时(例如,网络是固定的),会发生什么?

Elasticsearch 是否会自动检测到分片已过时(陈旧,与主分片不一致)并在后台更新它?还是必须手动操作?当分片 returns 不可用但已过时时,Elasticsearch 是否会自动避免查询该分片(并检索过时数据)直到它被更新?或者您必须提供特殊的查询参数以确保不使用过时的分片?

Elasticsearch 自动管理过时的副本。无需手动操作或特殊查询。

如果 nodes/network 失败,您必须确保集群的法定人数保持在线,否则您将遇到 split brain 无法知道哪个副本在线的问题并且已经过时了。

注意:Quorum 通常与从所有符合条件的主节点中选出一个主节点相关联。该 master 维护集群状态,它跟踪一个主分片(加上 0 个或更多副本分片)——这不涉及仲裁。

复制协议在 6.0 中有了很大的改进,包括序列号和主要条款。一个很好的概述是 blog post about it。基本上所有操作都有编号(每个分片),因此可以检测和重放丢失的操作;具体请参阅博客中的恢复部分 post。

随着主分片的失败,它会变得更有趣一点; post Elastic's discuss.

上提供了一个很棒的关于更多详细信息的信息