我们有一个包含 24 个节点的 CouchDB 集群,默认集群设置为 q=8
和 n=3
,并且已创建 100 个数据库。如果我们向集群添加 24 个节点并开始创建新数据库,它们是否一定会在新节点中创建? CouchDB 如何决定将新数据库放在哪里?
我们正在运行 2.3.1 中的所有节点
最佳答案
默认情况下,CouchDB 会在集群中的所有节点上随机分配数据库分片,因此您的新数据库将在新节点和旧节点上都有分片。它将把分片分布在尽可能多的节点上,并保证分片的两个副本永远不会同时位于同一节点上。
如果您希望仅在新节点上托管分片(例如,因为旧节点已满),您可以利用“放置”功能。涉及两个步骤:
- 遍历 _nodes 数据库中的文档并为每个文档设置一个“zone”属性,例如“zone”:“old”代表旧节点,“zone”:“new”代表新节点。
- 定义一个
[集群]放置
配置设置,告诉服务器在新区域中放置每个分片的 3 个副本:
[cluster]
placement = new:3
您还可以将此功能用于其他目的;例如,通过根据机架位置、可用区域等将节点划分为多个区域,以确保副本之间具有最大程度的隔离。您可以在此处阅读有关设置的更多信息:
http://docs.couchdb.org/en/2.3.1/cluster/databases.html#placing-a-database-on-specific-nodes
关于CouchDB集群数据库分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738282/