1

所以我得到了 4 个带有 Apache Cassandra 的 Raspberry-Pi。每个配置和一些其他配置的静态 IP 已经完成。每个 Pi 都可以看到网络上的其他 3 个。

IP地址是:

 1. Pi01 - 192.168.178.51
 2. Pi02 - 192.168.178.52
 3. Pi03 - 192.168.178.53
 4. Pi04 - 192.168.178.54

在我的cassandra.yaml文件中,我更改了以下变量:

cluster_name: 'Test Cluster'
initial_token: /* Pi01 has 0, the others got generated tokens */
seed_provider:
    - seeds:  "192.168.178.51"
listen_address: Droplet's IP
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch

我在 /tools/ 中使用内置的“令牌生成器”生成了 4 个令牌


我的问题是:

为什么在我启动 Pi01 之后它会与令牌混淆?

警告 10:24:09 令牌 6436405636961323290 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 7179378171345093230 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 4885181782908097142 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 742967880462982164 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 5652804589798010165 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 4400097028434728215 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 1675545333640867684 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 -8663374480600398885 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 1702469637743651899 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 -4986820230313833771 将所有权从 /192.168.178.52 更改为 /192.168.178.51

警告 10:24:09 令牌 5284137053355309400 将所有权从 /192.168.178.52 更改为 /192.168.178.51

WARN 10:24:09 令牌 -7033204945348820093 将所有权从 /192.168.178.52 更改为 /192.168.178.51

WARN 10:24:09 令牌 -7868759649811811191 将所有权从 /192.168.178.52 更改为 /192.168.178.51

4

1 回答 1

1

虽然您没有指明您的分区器,但通过查看您生成的令牌值,我可以看出您正在使用 Murmur3 分区器。您看到此行为的原因是交付token-generator的设计用于与随机分区器一起使用。这两个分区器使用不同的令牌范围。

随机分区器 = 0 到 2^127

Murmur3 分区器 = -2^63 到 2^63-1

对于带有 Murmur3 分区器的 4 节点集群,您应该使用以下令牌范围:

aploetz@dockingBay94:~/scripts$ python murmur3Cluster.py 
How many nodes are in your cluster? 4
node 0: -9223372036854775808
node 1: -4611686018427387904
node 2: 0
node 3: 4611686018427387904

仅供参考-这是用于计算这些值的(Python)代码:

import sys

if (len(sys.argv) > 1):
        num=int(sys.argv[1])
else:
        num=int(raw_input("How many nodes are in your cluster? "))
for i in range(0, num):
        print 'node %d: %d' % (i, (((2**64 / num) * i) - 2**63))

此外,如果您使用Virtual Nodes配置集群,它将为您处理所有令牌生成/管理。

编辑: 我调查了该token-generator工具,看看是否有 murmur3 分区器的选项。显然这个问题在CASSANDRA-9300中得到了解决。不确定您的 Cassandra 版本,但它token-generator具有--murmur32.2.0、2.1.6 和 2.0.16 版本的标志。“是的”,它产生的结果与我上面的 Python 代码相同。

于 2015-07-20T13:51:55.200 回答