单个 cassandra 节点上的 NetworkTopologyStrategy

NetworkTopologyStrategy on single cassandra node

我在 cassandra 中创建了一个键空间,一次是使用 NetworkTopologyStrategy,下次是使用 SimpleStrategy,语法如下:

键空间定义:

CREATE KEYSPACE cw WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter16' : 1 };

CREATE KEYSPACE cw WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1}

bin/nodetool环的输出:

Datacenter: 16
==========
Address       Rack        Status State   Load            Owns                Token                                       

172.16.4.196  4           Up     Normal  35.92 KB        100.00%             0   

当我在 NetworkTopologyStrategy 键空间中创建一个 table 并在 table 上执行 select * 查询时。它 returns 出现以下错误:

Unable to complete request: one or more nodes were unavailable

虽然它在 SimpleStrategy 键空间中运行良好,但为什么会这样?我们不能在单个 cassandra 节点集群上使用 NetworkTopologyStrategy 吗?

您必须定义一个网络感知告密者才能使用 NetworkTopologyStrategy。有关详细信息,请参阅此文档:http://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchPFSnitch_t.html

默认情况下,cassandra 配置为使用 SimpleSnitch。 SimpleSnitch 不识别数据中心和机架信息,因此只能使用 SimpleStrategy。 要更改 Snitch,您必须在 cassandra.yaml

中编辑以下内容
endpoint_snitch: CHANGE THIS TO WHATEVER YOU WANT

您还必须更改相应的属性文件以定义数据中心和机架

虽然其他人都是对的,但您已经在使用不同的告密者,因为您的数据中心名称是“16”。在您的键空间定义中,您有 Datacenter: 16。这意味着数据中心名称实际上是“16”。

试试这个:

CREATE KEYSPACE cw WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', '16' : 1 };