7

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

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

4

2 回答 2

5

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

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

q - 分片数。

r - 在 CouchDB 返回 200 和文档之前必须阅读的具有相同修订版本的文档的副本数。如果只有一份可访问的文档副本,则返回 200。

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

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

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

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

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

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

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

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

  • 在不切换到集群的情况下,能够更改为与 q、r 或 w > 1 的集群参数等效的任何配置。

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

于 2017-04-04T21:40:47.317 回答
2

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

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

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

您是否有不想使用集群的原因

于 2017-04-03T21:47:29.123 回答