我们有一个包含7个节点的集群,我们使用datastax java驱动程序连接到集群。问题是,我不断得到NoHostAvailableException这样的:当使用cqlsh执行删除时,Cassandra NoHostAvailableException
造成的: com.datastax.driver.core.exceptions.NoHostAvailableException:所有 主机(S)试了查询失败(尝试:/172.31。 7.243:9042 (com.datastax.driver.core.exceptions.DriverException:尝试获取可用连接的 超时(您可能需要增加每个主机连接的驱动程序号 )),/172.31.7.245:9042 (com.datastax.driver.core.exceptions.DriverException:尝试获取可用连接的 超时(您可能需要增加 驱动程序的p号呃主机连接)),/172.31.7.246:9042 (com.datastax.driver.core.exceptions.DriverException:尝试获取可用连接的 超时(您可能需要增加每个主机连接的驱动器号码 )),/172.31.7.247:9042, /172.31.7.232:9042,/172.31.7.233:9042,/172.31.7.244:9042 [只有 显示前3个主机的错误,请使用getErrors()获取更多详细信息])
所有节点均达到:
UN 172.31.7.244 152.21 GB 256 14.5% 58abea69-e7ba-4e57-9609-24f3673a7e58 RAC1
UN 172.31.7.245 168.4 GB 256 14.5% bc11b4f0-cf96-4ca5-9a3e-33cc2b92a752 RAC1
UN 172.31.7.246 177.71 GB 256 13.7% 8dc7bb3d-38f7-49b9-b8db-a622cc80346c RAC1
UN 172.31.7.247 158.57 GB 256 14.1% 94022081-a563-4042-81ab-75ffe4d13194 RAC1
UN 172.31.7.243 176.83 GB 256 14.6% 0dda3410-db58-42f2-9351-068bdf68f530 RAC1
UN 172.31.7.233 159 GB 256 13.6% 01e013fb-2f57-44fb-b3c5-fd89d705bfdd RAC1
UN 172.31.7.232 166.05 GB 256 15.0% 4d009603-faa9-4add-b3a2-fe24ec16a7c1 RAC1
,但他们两个都高CPU负载,especia lly 232,因为我在该节点中使用cqlsh进行大量删除。
我知道删除生成墓碑,但在集群中有7个节点,我认为所有主机都不可访问是正常的。
我们为java连接配置是:
com.datastax.driver.core.Cluster cluster = null;
//Get contact points
String[] contactPoints=this.environment.getRequiredProperty(CASSANDRA_CLUSTER_URL).split(",");
cluster = com.datastax.driver.core.Cluster.builder()
.addContactPoints(contactPoints))
.withCredentials(this.environment.getRequiredProperty(CASSANDRA_CLUSTER_USERNAME),
this.environment.getRequiredProperty(CASSANDRA_CLUSTER_PASSWORD))
.withQueryOptions(new QueryOptions()
.setConsistencyLevel(ConsistencyLevel.QUORUM))
.withLoadBalancingPolicy(new TokenAwarePolicy(new RoundRobinPolicy()))
.withRetryPolicy(new LoggingRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE))
.withPort(Integer.parseInt(this.environment.getRequiredProperty(CASSANDRA_CLUSTER_PORT)))
.build();
Metadata metadata = cluster.getMetadata();
for (Host host : metadata.getAllHosts()) {
LOG.info("Datacenter: "+host.getDatacenter()+"; Host: "+host.getAddress()+"; DC: "+host.getDatacenter()+"\n");
}
和接触点是:
172.31.7.244,172.31.7.243,172.31.7.245,172.31.7.246,172.31.7.247
任何人都知道我可以如何解决这个问题?或者至少有任何人有关于如何处理这种情况的暗示?
更新:如果我得到错误信息withe.getErrors()我得到:
/172.31.7.243:9042=com.datastax.driver.core.OperationTimedOutException:[/172.31.7.243:9042 ]操作超时, /172.31.7.244:9042=com.datastax.driver.core.OperationTimedOutException:[/172.31.7.244:9042]操作超时, /172.31.7.245:9042=com.datastax.driver.core .OperationTimedOutException:[/172.31.7.245:9042]操作超时, /172.31.7.246:9042=com.datastax.driver.core.OperationTimedOutException:[/172.31.7.246:9042]操作超时, /172.31.7.247 :9042 = com.datastax.driver.core.Operati onTimedOutException:[/172.31.7.247:9042]操作超时}
UPDATE:
- 密钥空间的复制因子为3。
对于使用与CQL查询不同的文件中运行它们的删除林:
cqlsh ip_node_1 -f脚本1.duplicates cqlsh ip_node_1 -f脚本2.duplicates cqlsh ip_node_1 -f脚本-3。重复 ...
我没有指定任何一致性级别,所以使用默认的一个是一个。
先前的每个文件包含删除这样的:
DELETE FROM keyspace_name.search WHERE idline1 = 837和idline2 = 841和PARTID = 8558和id = 18c04c20-8a3a-11e5-9e20- 0025905a2ab2;
- 和列家族是:
CREATE TABLE搜索( idline1 BIGINT, idline2 BIGINT, PARTID INT, ID UUID, 场3 INT, 字段4 INT, 字段5 INT, field6 int, field7 int, field8 int, field9 double, field10 bigint, field11 bigint, field12 BIGINT, field13布尔, field14布尔, field15 INT, field16 BIGINT, field17 INT, field18 INT, field19 INT, field20 INT, field21 UUID, field22布尔, PRIMARY KEY((idline1 ,idline2,PARTID),ID) )WITH bloom_filter_fp_chance = 0.010000 AND 缓存= 'KEYS_ONLY' AND 评论= AND dclocal_read_repair_chance = 0.000000 AND gc_grace_seconds '与线之间的SNP表'= 0 AND index_inter VAL = 128和 read_repair_chance = 0.100000 AND replicate_on_write = '真' AND populate_io_cache_on_flush = '假' AND default_time_to_live = 0 AND speculative_retry = '99 .0PERCENTILE 'AND memtable_flush_period_in_ms = 0 AND 压实= { '类':' SizeTieredCompactionStrategy'} AND compression = {'sstable_compression':'LZ4Compressor'};
CREATE INDEX search_partid ON search(partid);
CREATE INDEX search_field8 ON search(field8);
UPDATE(18-03-2016):
后删除开始执行,我发现的一些节点的CPU增加了很多:
我检查该节点上的进程,只有cassandra正在运行,但消耗了大量的CPU。剩下的节点几乎不使用cpu。
UPDATE(04-04-2016):我不知道它是否相关。我检查了很多CPU(接近96%)和活动活动保持在1.6%的节点(仅使用10个已分配的3 GB)。
Checing线程池统计:
nodetool tpstats 池名称活跃待完成封锁了所有的时间封锁 ReadStage 0 0 20042001 0 0 RequestResponseStage 0 0 149365845 0 0 MutationStage 32 117720 181498576 0 0 ReadRepairStage 0 0 799373 0 0 ReplicateOnWriteStage 0 0 13624173 0 0 GossipStage 0 0 5580503 0 0 CacheCleanupExecutor 0 0 0 0 0 AntiEntropyStage 0 0 3 2173 0 0 MigrationStage 0 0 9 0 0 MemtablePostFlusher 0 0 45044 0 0 MemoryMeter 0 0 9553 0 0 FlushWriter 0 0 9425 0 18 ValidationExecutor 0 0 15980 0 0 MiscStage 0 0 0 0 0 PendingRangeCalculator 0 0 7 0 0 CompactionExecutor 0 0 1293147 0 0 commitlog_archiver 0 0 0 0 0 InternalResponseStage 0 0 0 0 0 HintedHandoff 0 0 273 0 0
消息类型掉落 RANGE_SLICE 0 READ_REPAIR 0 PAGED_RANGE 0 BINARY 0 阅读0 突变0 _TRACE 0 REQUEST_RESPONSE 0 COUNTER_MUTATION 0
我意识到悬而未决的突变级增长,但活跃值保持不变,可能是这个问题?
您可以显示执行删除的密钥空间吗?你使用什么复制因子? – HashtagMarkus
您的删除语句的示例可能也有帮助。 – phact
删除操作的一致性级别是多少? – Rahul