我有一个使用场景,需要在多个服务器上复制单个数据库(用于高可用性和可伸缩性),
运行 3 节点副本是否比运行 3 节点集群有任何不利之处?
我有一个使用场景,需要在多个服务器上复制单个数据库(用于高可用性和可伸缩性),
运行 3 节点副本是否比运行 3 节点集群有任何不利之处?
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 的群集参数的配置,而无需切换到群集。
间接地,确认的限制使得在实际用于网络可扩展性的情况下,副本之间需要解决更多潜在的冲突,并且如果节点在确认保存并将其传递给其他副本之间失败,则会出现实际的不一致性,例如记录丢失的可能性更大。