我正在制定一个包含七台 CouchDB 服务器(A、B、C、D、E、F、G)的系统提案,这些服务器位于不同的国家/地区。这个想法是配置多主复制,以便所有数据可以保持同步。
我可以配置从每台服务器到其他每台服务器的双向复制
但我怀疑这可能会导致过多的连接,从而增加使用的带宽并降低性能(是这种情况吗?)。
所以我的下一个想法是将它们配置成一个环:
现在我们的连接数少了很多,但仍然具有冗余,因为每个节点都连接到两个服务器。我的具体情况的问题是,我们不想在所有节点中拥有所有数据库。我们希望有两个节点(A 和 B)包含所有数据库,其余节点包含不同的数据库子集。出于这个原因,我正在考虑这样做:
由于我不是网络拓扑专家,我想问:
- 将所有节点复制到所有节点真的不是一个好主意吗?
- 这是一个合理的拓扑结构(最后显示的)吗?
- 在哪里可以了解更多有关此内容的信息?
为了完整性,这些图形是使用以下 Mathematica 命令生成的:
Graph[Rule @@@ Permutations[CharacterRange["A", "G"], {2}], VertexLabels -> "Name"]
Graph[Rule @@@ (Partition[CharacterRange["A", "G"], 2, 1, {-1}] /. {a_, b_} :> Sequence[{a, b}, {b, a}]), VertexLabels -> "Name"]
Graph[Flatten[Outer[{#1 -> #2, #2 -> #1} &, {"A", "B"}, CharacterRange["C", "G"]]~Join~{"A" -> "B", "B" -> "A"}], VertexLabels -> "Name"]
答案1
我没有使用 7 个节点(但使用 3 个节点)的特殊经验,但每个节点相互复制应该完全没有问题。我也对我们项目中使用的 3 个节点这样做。CouchDB 旨在支持多主节点设置。但您在使用许多连接复制到那么多节点时考虑使用的带宽也是正确的。我建议您对此进行监控。
CouchDB 遵循 CAP 定理,即 AP:可用性和分区容忍度。这意味着数据最终是一致的(参见http://guide.couchdb.org/draft/consistency.html)。因此,您还应该考虑对数据进行分区,这将导致与上面显示的不同设置。
或者您可以看看 9 月 20 日发布的 CouchDB 2.0。现在 CouchDB 确实支持集群。我非常确定这可以解决您的问题。建议的设置是运行一个集群,其中至少(自然)有三个节点 (n),每个节点包含 8 个分片 (q)(https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/)。使用复制仍然是可能的,我认为这可以减少您的设置(虽然我不知道您为什么要考虑七节点设置)。