我有一个用例,我希望在多台服务器上复制单个数据库(出于 HA 和可扩展性目的),
运行 3 节点副本而不是 3 节点集群会有什么缺点吗?
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 的集群参数等效的任何配置。
间接地,如果副本实际上用于网络可扩展性,则确认的限制会在副本之间解决更多潜在的冲突,并且如果节点在确认保存并将其传递给之间失败,则丢失记录形式的实际不一致的可能性更大其他副本。
您将使用哪个版本的 CouchDB?如果 2.0.0+,可能没有理由不使用真正的集群。
我能想到使用副本而不是集群的唯一原因是为了便于配置,或者因为您的数据库(即 CouchDB < 2.0.0)不支持它。
但是,如果您使用集群,即使现在只有 3 个节点,您也已经为以后更大的扩展做好了准备,只需添加更多节点即可。
您是否有不想使用集群的原因?