具有负载平衡和冗余的 RavenDb 拓扑

RavenDb topology with load balancing and redundancy

我们正在尝试提出适当的 RavenDb 拓扑结构,使我们能够平衡负载并实现容错。 似乎更好的负载平衡方法是使用本机分片,我们可能会转向使用它,但由于域的特殊性,此时它并不简单。 为了有冗余,我们只为每组设置 2 个 ravendb 节点,并在它们之间进行 master/master 复制,所以如果一个失败,RavenDb 客户端将自动切换到另一个。 我们有索引 "component",这是唯一一个将写入数据库的索引,因此它将写入一个节点,我们希望这些更改最终能够分发。我们将在两组 ravendb 节点之间设置 master/master 复制,因此如果索引组件最终会回退到第 1 组,则应将更改复制到第二组。

The schema

因此,似乎发生冲突的风险很低,因为我们只有一个玩家写入数据库(成群结队,一分钟一次)。关于此设置的几个问题:

  1. RavenDb 有这么多是典型的吗master/master 复制?
  2. 这个问题可以用更简单的方法解决吗?
  3. 如何配置客户端的回退约定,以便每个 Web 节点在失败之前首先失败到其组中的另一个节点 另一个组的 RavenDb 节点?
  4. 如果我们为每个 Web 节点上的读取嵌入简单的循环逻辑(Web 节点 1 将从 两者:RavenDb1_01 和 RavenDb1_02)?它会成为标准的RavenDb吗 回退行为变得疯狂?

1) 在这样的集群中有很多节点是很常见的,是的。请注意,您需要设置复制以在此类拓扑中进行更改和复制。

2) 拥有完全连接的拓扑通常比这里的层更容易..

3) 故障转移始终基于客户端的主节点目的地顺序。换句话说,如果节点 2 有目的地(节点 1、节点 3)并且节点 1 有目的地(节点 3、节点 2)。 最初连接到节点 2 的客户端将转到节点 1,然后转到节点 3 在故障转移时,最初连接到节点 1 的客户端将转到节点 3,然后在故障转移时转到节点 2。

4) 循环法和故障转移分别运行。