集群与复制的区别

7

我有一个使用场景,需要在多个服务器上复制单个数据库(用于高可用性和可伸缩性),

运行 3 节点副本是否比运行 3 节点集群有任何不利之处?

2个回答

5

CouchDB文档11.2提供了一个示例集群配置,包括:

[cluster]
  q=8
  r=2
  w=2
  n=3

q - 分片的数量。

r - 具有相同修订版本的文档副本必须被读取的次数,然后CouchDB返回200和文档。如果只有一个可访问的文档副本,则该副本将返回200。

w - 在写入返回201之前需要保存文档的节点数。如果保存文档的节点数为0,则返回202。

n - 每个文档的副本数量。复制品。

您的三部分副本的行为应与以下内容等效:

[cluster]
  q=1
  r=1
  w=1
  n=3

当正确复制时,这是群集的可能配置,但由于缺乏以下内容,它并不是最佳配置:

  • 在确认之前,多个节点和大多数节点已确认保存的受益。

  • 在返回之前,多个节点和大多数节点已确认修订正确性的受益。

  • 通过分片将数据库扩展到单个节点存储以外的受益。

  • 可以更改为任何等效于具有 q、r 或 w > 1 的群集参数的配置,而无需切换到群集。

间接地,确认的限制使得在实际用于网络可扩展性的情况下,副本之间需要解决更多潜在的冲突,并且如果节点在确认保存并将其传递给其他副本之间失败,则会出现实际的不一致性,例如记录丢失的可能性更大。


2
你们将使用哪个版本的CouchDB?如果是2.0.0+,那么没有理由不使用真正的集群。我能想到只有一个原因使用副本而不是集群,那就是为了配置的便捷性或者因为你的数据库(即CouchDB < 2.0.0)不支持它。但是,如果你使用集群,即使现在只有3个节点,只需添加更多节点,你就已经设置好了更大的扩展空间。你是否有不使用集群的原因?

谢谢你的回答。实际上,我已经在我的三个节点上使用集群了。 我想尝试切换到简单的复制是因为像你说的那样,配置更容易。我正在使用docker容器运行集群,有时会出现一些问题,比如erlang cookies失去同步。 拥有一个集群也迫使我创建第四个服务器来备份我的数据库。基本上我的问题是,运行一个简单的三节点副本是否有任何缺点(性能、更多数据损坏等)? - romainrbr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接