为什么需要在每个DC的每个节点上运行nodetool repair-pr?在没有-pr的情况下运行修复时,不需要此选项。为什么不同?据我所知,区别仅在于一些标记范围--使用-pr时,只有“主要”范围,而不使用-pr时,也有属于在此节点上复制的其他节点的范围。它是如何影响修复传播到其他DC?所有DC具有相同的令牌空间(令牌环),并且如果我们在一个DC的所有节点上进行修复,则整个令牌空间(令牌环)将被覆盖。
1.我所期望的是nodetool repair -pr
足以在集群的单个数据中心上运行。Apache文档不要求在每个数据中心https://cassandra.apache.org/doc/3.11/cassandra/operating/repair.html的每个节点上运行nodetool repair -pr
"-pr标志只修复节点上的"主"范围,因此您可以通过在单个数据中心的每个节点上运行nodetool repair-pr来修复整个集群。"
1.根据以下文章,当nodetool repair
在不使用-pr的情况下运行时,则只需要在集群中的一个数据中心上执行。但是当使用-pr运行时,在每个数据中心的每个节点上。
https://www.datastax.com/blog/repair-cassandra "* 这一点非常重要,所以我要再说一遍,如果您正在使用" nodetool repair-pr ",则必须在每个数据中心的每个节点上运行它,不允许跳过...."*
"* 如果您有多个数据中心,默认情况下,在运行修复时,所有数据中心中的所有节点将在修复的范围内彼此同步。因此,对于给定令牌范围的{DC1:3,DC2:3}的RF,将有6个节点,所有节点都将数据彼此比较并来回流式传输任何差异。如果你有4个数据中心{DC1:3,DC2:3,DC3:3,DC4:3},你将有12个节点,它们都相互比较,并在每个令牌范围内同时向彼此传输数据[2]。这使得使用“-pr”变得更加重要,因为如果在群集中的每个节点上都不使用“-pr”,则在4 DC情况下,如果不使用它,则会修复给定的令牌范围3 + 3 + 3 + 3 += 12次。
和
https://www.datastax.com/blog/repair-cassandra "* 注意:如果使用此选项,则必须在群集中的每个节点上运行nodetool repair-pr以修复所有数据。否则,某些数据范围将无法修复... "
" 在跨数据中心而不是在本地数据中心内使用nodetool修复之前请仔细考虑。使用-local或--in-local-dc在节点上本地运行repair时,该命令仅在与运行它的节点位于同一数据中心内的节点上运行。否则,该命令将在包含副本的所有节点上运行群集范围的修复进程,即使是在不同数据中心中的节点。例如,如果您在两个数据中心DC1和DC2上启动nodetool修复,每个数据中心的复制因子为3,则repairmust为6个节点构建Merkle表... "
以下是更多的文档不一致:" nodetool修复工具不支持将-local与-pr选项一起使用,除非数据中心的节点具有所有范围的所有数据。*"这是假设-pr在没有-pr的情况下也在群集范围内运行。
1条答案
按热度按时间s6fujrry1#
当指定-pr时,当前行为是将多DC设置视为单个环。因为TokenMetadata.getPredecessor(Token)不考虑令牌的DC,而只是在所有DC的所有令牌中搜索前驱。
因此,为了简单起见,我们假设这个标记的范围是从0到100。
DC节点令牌拥有的DC 1节点1 0 33% DC 1节点2 33 33% DC 1节点3 66 33% DC 2节点1 25 25% DC 2节点2 50 40% DC 2节点3 90 35%
您可能认为DC 1 node 1上的“nodetool repair -pr”与
nodetool repair -st 0 -et 33
相同,但实际上是-st 0 -et 25
。节点2上的repair -pr将与
-st 33 -et 50
相同节点3为
-st 66 -et 90
所以我们跳过了25比33 50比66和90比0
-pr不是真正的主范围,它是部分范围。