我有一个用例,我希望在多个服务器上复制一个数据库(出于HA和可扩展性目的),
运行3节点副本而不是3节点群集会有什么不利之处吗?
答案 0 :(得分:3)
Couchdb docs 11.2提供了一个示例群集配置:
[cluster]
q=8
r=2
w=2
n=3
q - 分片数量。
r - 在CouchDB返回200和文档之前必须读取的具有相同版本的文档的副本数。如果只有一个文档副本可访问,则返回200。
w - 在返回201之前需要保存文档的节点数为201.如果保存文档的节点为0,则返回202.
n - 每份文件的副本数量。复制品。
3部件复制品的行为应相当于:
[cluster]
q=1
r=1
w=1
n=3
正确复制时。这是一种可能的聚类配置,但不是最佳的,因为它缺乏:
确认多个节点和大多数节点的好处 在确认之前确认了保存。
确认多个节点和大多数节点的好处 已经确认修订版本在返回之前是正确的。
通过分片将数据库扩展到单个节点的存储之外。
使用q,r或w更改为与群集参数等效的任何配置的能力1,无需切换到群集。
间接地,如果副本实际用于网络可伸缩性,则确认的限制会在副本之间解决更多潜在的冲突,如果节点在确认保存和传递之间失败,则会导致丢失记录形式的实际不一致的可能性更大它与其他复制品有关。
答案 1 :(得分:2)
您将使用哪个版本的CouchDB?如果是2.0.0+,则可能没有理由不使用真正的聚类。
我能想到使用副本而不是群集的唯一原因是为了便于配置,或者因为你的数据库(即CouchDB <2.0.0)不支持它。
但是如果您使用群集,即使现在只有3个节点,您之前已经设置了更大的扩展,只需添加更多节点。
是否有理由不想要使用群集?