2

我从 6 个节点创建了一个集群。Eu west1 中的 3 个节点和 EU west2 中的 3 个节点 我为每组节点设置了位置,例如:--locality=region=europe,datacenter=west1 我还将副本设置为 6 以在每个节点上拥有所有范围和所有数据. 如果数据中心之间的连接丢失,整个集群宕机,会发生什么?我试图杀死其中一个数据中心中的 3 个节点并且集群无法运行,因为大多数节点都已关闭并且仲裁少于 4。是否有可能使 2 个数据中心与它们的本地仲裁一起工作 2/3

我还玩了一些复制设置,如果我从 6 个节点中杀死 3 个节点并且我能够写入集群,有时集群是健康的。有时我只能从集群中读取。集群正在使用 5 个和 3 个从 6 个节点杀死的节点的副本。仍然为此付费,但如果有人可以给我更多信息,将会非常有帮助。

能够跨数据中心进行复制是非常酷的功能,但如果我在其中一个数据中心停机时丢失了整个集群,至少对我来说,这将毁掉整个好主意。

4

2 回答 2

2

CockroachDB 需要大多数副本才能完全运行,这> half意味着>= half. 为了在丢失完整的数据中心或区域后幸存下来,您必须拥有三个DC/区域,而不是两个。尝试在三个区域中的每个区域中运行两个节点,而不是在两个区域中运行三个节点。

是否可以让 2 个数据中心与他们的本地仲裁 2/3 一起工作

不适用于单个表(因为如果每个数据中心能够独立于另一个数据中心运行,就不可能保证一致性)。您已将数据配置为在所有六个副本之间复制,这意味着需要四个副本来建立仲裁。如果您希望每个数据中心能够独立于其他数据中心运行,则需要两个单独的表,每个表都配置为位于其中一个数据中心内。

于 2017-06-21T15:22:03.740 回答
0

感谢您的回答,只是为了澄清一些事情。但看起来你明白了我的意思和我想要完成的事情。但据我了解,如果一个 DC 出现故障,我是否在 2 个不同的 DC 中有 2x3 节点。我有 3 个活动节点,我需要至少 4 个。N/2 +1。因此,如果我有 3x3,我可能会失去一个 DC,因为如果我有 2 个 DC,我将拥有 quorum。最后一个问题,如果我没有将复制设置为 9,如果我在一个 DC 中丢失 3 个节点,那么某些范围将不可用,对吗?

于 2017-06-22T16:02:52.620 回答