单个 cassandra 节点上的 NetworkTopologyStrategy
Posted
技术标签:
【中文标题】单个 cassandra 节点上的 NetworkTopologyStrategy【英文标题】:NetworkTopologyStrategy on single cassandra node 【发布时间】:2016-02-09 18:27:32 【问题描述】:我在 cassandra 中创建了一个键空间,一次使用 NetworkTopologyStrategy,下一次使用 SimpleStrategy,语法如下:
键空间定义:
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
吗?
【问题讨论】:
【参考方案1】:虽然其他人都是对的,但您已经使用了不同的告密者,因为您的数据中心名称是“16”。在您的键空间定义中,您有 Datacenter: 16。这意味着数据中心名称实际上是“16”。
试试这个:
CREATE KEYSPACE cw WITH REPLICATION = 'class' : 'NetworkTopologyStrategy', '16' : 1 ;
【讨论】:
【参考方案2】:默认情况下,cassandra 配置为使用 SimpleSnitch。 SimpleSnitch 不识别数据中心和机架信息,因此只能使用 SimpleStrategy。 要更改 Snitch,您必须在 cassandra.yaml 中编辑以下内容
endpoint_snitch: CHANGE THIS TO WHATEVER YOU WANT
您还必须更改相应的属性文件来定义数据中心和机架
【讨论】:
【参考方案3】:您必须定义一个网络感知的告密者才能使用NetworkTopologyStrategy
。有关详细信息,请参阅此文档:http://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureSnitchPFSnitch_t.html
【讨论】:
以上是关于单个 cassandra 节点上的 NetworkTopologyStrategy的主要内容,如果未能解决你的问题,请参考以下文章