在cassandra中,是否可以控制分配哪个物理机器vnode?

时间:2013-07-30 07:45:13

标签: cassandra

我只是想了解更多有关vnodes的信息,我很好奇。我喜欢在单个物理节点上拥有许多vnode的想法,但我希望能够控制哪个物理机器是每个vnode的副本。例如,假设我有8个物理节点,RF = 3。我想为每个节点放置副本,以便按以下方式布置它们:

Let capital letters be physical nodes
Let lowercase letters be vnodes. Vnodes in parens are located on the
  corresponding physical machine.

A(ablmno)
B(acdnop)
C(abcefp)
D(bcdegh)
E(defgij)
F(fghikl)
G(hijkmn)
H(jklmop)

需要注意的重要一点是,任何vnode只能复制到彼此4个节点内的机器上。例如,a被复制到ABC,b被复制到ACD,d被复制到BDE,依此类推。

我希望能够将复制保持在特定范围的物理节点内,这样我就不会遇到这样的情况:没有三个phsical节点集共有零vnodes(意味着丢失任何三个集群上的节点保证数据丢失)。在上面的示例中,节点ADE可能会丢失并且不会导致数据丢失(假设所有副本都是最新的),因为A,D和E的vnode的交集是空集。以下是我之前声明的python证明:

>>> A = set(['a', 'b', 'l', 'm', 'n', 'o'])
>>> D = set(['b', 'c', 'd', 'e', 'g', 'h'])
>>> E = set(['d', 'e', 'f', 'g', 'i', 'j'])
>>> A.intersection(D).intersection(E)
set([])

我知道这可能会花费节点自举速度和节点修复速度,但我能够限制#> = RF节点故障导致数据丢失率低于100%的可能性。我对这个问题感兴趣的主要原因是多节点故障的可能性随着集群中机器数量的增加而增加,所以我想限制由于三节点故障导致的数据丢失概率变大了。

这可能与Cassandra(撰写本文时的最新版本1.2.8)有关吗?

2 个答案:

答案 0 :(得分:0)

您可以通过在每个节点上将逗号分隔的标记列表指定为cassandra.yaml中的initial_token来执行此操作。

我认为你所指的是分布因子(DF) - 节点与之共享副本的节点数。没有vnodes(等效地将num_tokens设置为1),DF = 2RF-1。使用vnodes和随机分配令牌(如果你没有指定任何为initial_token就会发生这种情况),DF = N(概率很高(w.h.p.)),其中N是节点数。

这里存在张力 - 低DF意味着多个同时发生的节点故障不太可能导致数据丢失或不可用。但低DF意味着添加新节点时,群集将不会保持平衡。此外,它表示当节点发生故障时,重建时间(运行nodetool removetoken以创建节点vnode的额外副本的时间)很大,因为可能涉及重建的节点集很少。 DF = N表示集群中的所有节点都可以参与重建,从而提供最佳的重建时间。

不仅仅是考虑同时发生的节点故障,你可能关心的是一个节点失败,然后在该节点恢复之前又失败了。如果恢复时间较短,则可能丢失数据的窗口很小。

正如您所说,拥有更多节点意味着多个故障的概率越来越接近。然而,随着节点数量的增加,重建时间的下降会增加,这至少可以弥补这一点,至少在独立故障的假设(显然是假的但往往很好的近似)下。这在我的blog post中证明了。

上述论点表明,高DF会减少停机时间。通常,服务可靠性以9s的正常运行时间来衡量。如果您的服务属实,那么您需要高DF。

但是,您可能希望在某个时间范围内的任何时间段内降低数据不可用的概率(暂时,当恢复不需要流数据时)。也许你的合同说明,如果任何数据在你被处罚的任何时候都无法读取,但他们并不关心恢复需要多长时间。在这种情况下,你想要低DF。

注意永久和临时失败之间的区别。如果节点永久失败,则需要重建,因此需要高DF。如果一个节点暂时失败并且可以自行恢复,那么您需要低DF来最小化数据不可用的概率。

在现实世界中,失败在某种程度上是相关的,这使得同时失败的可能性更大。作为一个极端的例子,您可能有一些VM在同一物理主机上运行Cassandra。这些虚拟机的故障将极为密切相关。如果您有此选项,则需要选择令牌,以便同一物理主机上没有两个VM具有共同的副本。但除此之外,如果你想要vnodes的好处,你想让你的DF尽可能高。

一个不太极端的例子是多个数据中心,您需要确保每个数据中心都有一个副本。这就是Cassandra的NetworkTopologyStrategy所做的。这有助于缓解整个数据中心变得不可用的相关故障。

总之,对于完全独立的故障,具有最大DF的数据丢失概率最低。为此,请使用随机令牌。 DF低时,数据暂时不可用的概率最低。

答案 1 :(得分:0)

在Cassandra中,复制由snitch and it comes with a set of available options处理,例如SimpleSnitchPropertyFileSnitchGossipingPropertyFileSnitchEC2SnitchEC2MultiRegionSnitch。无论如何要完全实现您想要的场景,您可能需要创建自己的小报(并记住复制应该完成的所有其他要求)