集群与复制

Cluster vs replication

我有一个用例,我希望在多个服务器上复制单个数据库(出于 HA 和可扩展性目的),

运行 3 节点副本而不是 3 节点集群会有什么缺点吗?

您将使用哪个版本的 CouchDB?如果是 2.0.0+,可能没有理由不使用真正的集群。

我能想到使用副本而不是集群的唯一原因是为了便于配置,或者因为您的数据库(即 CouchDB < 2.0.0)不支持它。

但是如果您使用集群,即使现在只有 3 个节点,您也已经为以后更大的扩展做好了准备,只需添加更多节点即可。

您可能不想使用集群的原因是什么?

Couchdb docs 11.2 提供了一个集群配置示例:

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

q - The number of shards.

r - The number of copies of a document with the same revision that have to be read before CouchDB returns with a 200 and the document. If there is only one copy of the document accessible, then that is returned with 200.

w - The number of nodes that need to save a document before a write is returned with 201. If the nodes saving the document is 0, 202 is returned.

n - The number of copies there is of every document. Replicas.

您的 3 部分副本的行为应等同于:

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

正确复制时。这是一种可能的集群配置,但不是最佳配置,因为它缺少:

  • 确认多个节点和大多数节点的好处 在确认之前已确认保存。

  • 确认多个节点和大多数节点的好处 在返回之前确认修改是正确的。

  • 数据库可通过分片扩展到单个节点存储之外。

  • 无需切换到集群即可更改为与 q、r 或 w > 1 的集群参数等效的任何配置的能力。

间接地,如果副本实际上用于网络可伸缩性,则确认的限制会导致副本之间有更多潜在的冲突需要解决,如果节点在确认保存之间失败,则以丢失记录的形式出现实际不一致的可能性更大并将其传递给其他副本。