我使用NetworkTopologyStrategy在cassandra中创建了一个键空间,下次使用SimpleStrategy时使用以下语法:
Keyspace定义:
CREATE KEYSPACE cw WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter16' : 1 };
CREATE KEYSPACE cw WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1}
bin / nodetool ring的输出:
Datacenter: 16
==========
Address Rack Status State Load Owns Token
172.16.4.196 4 Up Normal 35.92 KB 100.00% 0
当我在NetworkTopologyStrategy
键空间中创建一个表并在表上执行select *
查询时。它返回以下错误:
Unable to complete request: one or more nodes were unavailable
虽然它在SimpleStrategy密钥空间中工作正常但为什么会这样?我们不能在单个cassandra节点集群上使用NetworkTopologyStrategy
吗?
答案 0 :(得分:3)
虽然其他人都是对的,但您已经在使用不同的小报,因为您的数据中心名称是“16”。在您的键空间定义中,您有数据中心:16。这意味着数据中心名称实际上是“16”。
试试这个:
CREATE KEYSPACE cw WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', '16' : 1 };
答案 1 :(得分:2)
默认情况下,cassandra配置为使用SimpleSnitch。 SimpleSnitch无法识别数据中心和机架信息,因此只能使用SimpleStrategy。 要更改Snitch,您必须在cassandra.yaml中编辑以下内容
endpoint_snitch: CHANGE THIS TO WHATEVER YOU WANT
您还必须更改相应的属性文件以定义数据中心和机架
答案 2 :(得分:1)
您必须定义网络感知小报,才能使用NetworkTopologyStrategy
。有关详细信息,请参阅此文档:http://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchPFSnitch_t.html