首先,您需要查看cassandra.yaml
文件,以查看当前配置的令牌数量。这告诉您每个节点将拥有多少分区:
$ grep num_tokens conf/cassandra.yaml
...
num_tokens: 128
...
$ grep initial_token conf/cassandra.yaml
...
...
如果初始令牌被注释掉,这意味着节点将在启动期间自行确定其分区范围。
接下来,您可以使用
nodetool ring
命令检查分区范围:
$ bin/nodetool ring
Datacenter: DC1
==========
Address Rack Status State Load Owns Token
9167006318991683417
127.0.0.2 r1 Down Normal ? ? -9178420363247798328
127.0.0.2 r1 Down Normal ? ? -9127364991967065057
127.0.0.3 r1 Down Normal ? ? -9063041387589326037
这显示了集群中哪个分区范围属于哪个节点。
在上面的示例中,每个节点拥有128个分区范围。从-9178420363247798327到-9127364991967065057的范围属于节点127.0.0.2。
您可以使用此简单选择来告知每行的分区键:
cqlsh:mykeyspace> select token(key), key, added_date, title from mytable;
system.token(key) | key | added_date | title
-1651127669401031945 | first | 2013-10-16 00:00:00+0000 | Hello World
-1651127669401031945 | first | 2013-04-16 00:00:00+0000 | Bye World
356242581507269238 | second | 2014-01-29 00:00:00+0000 | Lorem Ipsum
356242581507269238 | second | 2013-03-17 00:00:00+0000 | Today tomorrow
356242581507269238 | second | 2012-04-03 00:00:00+0000 | It's good to meet you
(5 rows)
在分区范围内查找分区键可以告诉您记录存储的位置。同时,您也可以使用nodetool在一个简单的步骤中完成相同的操作。
$ bin/nodetool getendpoints mykeyspace mytable 'first'
127.0.0.1
127.0.0.2
这将告诉您带有分区键“first”的记录位于何处。
注意:如果某些节点已关闭,则getendpoints
命令不会列出这些节点,尽管根据复制设置,它们应该存储记录。