我在设置新的Cassandra集群时遇到了麻烦。我在EC2中建立了一个3节点集群(区域:eu-west-1b)。当我尝试将记录插入新表时,我收到此错误消息:
cqlsh:test> insert into mytest (id, value) values(1,100);
Unable to complete request: one or more nodes were unavailable.
我已确认3个节点已启动并正在运行:
nodetool status
UN ***.***.***.*** 68.1 KB 256 33.2% bbf1c5e9-ac68-41a1-81a8-00c7877c4eac rack1
UN ***.***.***.*** 81.95 KB 256 34.1% e118e3a7-2486-4c08-8ba1-d337888ff59c rack1
UN ***.***.***.*** 68.12 KB 256 32.7% 041cb88e-df21-4640-b7ac-7a87fd38dae6 rack1
我用来创建键空间和表的命令是:
create keyspace test with replication ={'class':'NetworkTopologyStrategy', 'eu-west-1b': 2};
use test;
create table mytest (id int primary key, value int);
insert into mytest (id, value) values(1,100);
每个节点都可以看到键空间 - 我使用了CQLSH并运行了descibe键空间并从每个节点获得了这个输出:
CREATE KEYSPACE test WITH replication = {
'class': 'NetworkTopologyStrategy',
'eu-west-1b': '2'
};
USE test;
CREATE TABLE mytest (
id int PRIMARY KEY,
value int
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};
答案 0 :(得分:2)
我终于找到了问题 - 我已将endpoint_snitch设置为Ec2Snitch,但默认的Datastax设置在注释下面(我没有注意到)。我注释掉了DS snitch,在所有节点上重新启动了dse服务,并在每个节点上运行了nodetool修复,问题就消失了。
答案 1 :(得分:-1)
根据Mark的回复,首先检查你的cassandra集群是否在aws中。如果是,然后更改“cassandra.yaml”中的配置,只需将 endpoint_snitch更改为Ec2Snitch ,有一件事可能是你的数据中心实际上是ec2实例的“区域”,它应该像“ us-east','us-west'。在你的情况下,它应该只是'eu-west'。
根据datastax的说法 EC2Snitch¶
在Amazon EC2上使用EC2Snitch进行简单的群集部署,其中群集中的所有节点都在一个区域内。该区域被视为数据中心,可用区域被视为数据中心内的机架。例如,如果节点位于us-east-1a,则us-east是数据中心名称,1a是机架位置。由于使用了私有IP,因此该窃听不适用于多个区域。
定义键空间strategy_options时,请使用EC2区域名称(例如us-east
)作为数据中心名称。
链接 - http://www.datastax.com/docs/1.0/cluster_architecture/replication http://www.datastax.com/documentation/cql/3.1/cql/cql_using/update_ks_rf_t.html