卡桑德拉写的表现

时间:2017-01-18 21:54:37

标签: node.js cassandra cassandra-2.1

我们有这个Cassandra集群,想知道目前的表现是否正常,以及我们可以做些什么来改善它。

群集由位于同一数据中心的3个节点组成,每个节点的总容量为465GB,堆容量为2GB。每个节点有8个内核和8GB或RAM。不同组件的版本为cqlsh 5.0.1 | Cassandra 2.1.11.872 | DSE 4.7.4 | CQL spec 3.2.1 | Native protocol v3

工作量描述如下:

  • Keyspace使用org.apache.cassandra.locator.SimpleStrategy放置策略和复制因子3(这对我们来说非常重要)
  • 工作负载主要包括对单个表的写入操作。表模式如下: CREATE TABLE aiceweb.records ( process_id timeuuid, partition_key int, collected_at timestamp, received_at timestamp, value text, PRIMARY KEY ((process_id, partition_key), collected_at, received_at) ) WITH CLUSTERING ORDER BY (collected_at DESC, received_at ASC) AND read_repair_chance = 0.0 AND dclocal_read_repair_chance = 0.1 AND gc_grace_seconds = 864000 AND bloom_filter_fp_chance = 0.01 AND caching = { 'keys' : 'ALL', 'rows_per_partition' : 'NONE' } AND comment = '' AND compaction = { 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } AND compression = { 'sstable_compression' : 'org.apache.cassandra.io.compress.LZ4Compressor' } AND default_time_to_live = 0 AND speculative_retry = '99.0PERCENTILE' AND min_index_interval = 128 AND max_index_interval = 2048;

写操作来自基于NodeJS的API服务器。使用Datastax提供的Nodejs驱动程序(版本最近从2.1.1更新到3.2.0)。负责执行写请求的代码将对每个主键进行写操作分组,此外,它将每个请求的请求大小限制为500个INSERT。写操作作为BATCH执行。明确设置的唯一选项是prepare:true, logged:false

OpsCenter使用此设置反映了去年每秒少于一个请求的历史记录级别(每个写入请求是针对同一个表和同一分区的最多500个操作的BATCH)。几乎整年,90%的请求的写请求延迟为1.6毫秒,但最近90%的请求增加了超过2.6毫秒。 Os Load一直低于2.0,大部分时间磁盘利用率低于5%,峰值为7%。全年平均堆使用量为1.3GB,峰值为1.6GB,尽管目前这个峰值在上个月有所上升。

此设置的问题在于API性能在整年都在降低。目前,BATCH操作可能需要300ms到12s以上(导致操作超时)。在某些情况下,即使OpsCenter报告所有节点都活跃且健康,NodeJS驱动程序也会报告所有Cassandra驱动程序。

压缩统计在每个节点上始终显示0,nodetool tpstats显示如下:

Pool Name                    Active   Pending      Completed   Blocked  All time blocked
CounterMutationStage              0         0          10554         0                 0
ReadStage                         0         0         687567         0                 0
RequestResponseStage              0         0         767898         0                 0
MutationStage                     0         0         393407         0                 0
ReadRepairStage                   0         0            411         0                 0
GossipStage                       0         0        1314414         0                 0
CacheCleanupExecutor              0         0             48         0                 0
MigrationStage                    0         0              0         0                 0
ValidationExecutor                0         0            126         0                 0
Sampler                           0         0              0         0                 0
MemtableReclaimMemory             0         0            497         0                 0
InternalResponseStage             0         0            126         0                 0
AntiEntropyStage                  0         0            630         0                 0
MiscStage                         0         0              0         0                 0
CommitLogArchiver                 0         0              0         0                 0
MemtableFlushWriter               0         0            485         0                 0
PendingRangeCalculator            0         0              4         0                 0
MemtablePostFlush                 0         0           7879         0                 0
CompactionExecutor                0         0         263599         0                 0
AntiEntropySessions               0         0              3         0                 0
HintedHandoff                     0         0              8         0                 0

Message type           Dropped
RANGE_SLICE                  0
READ_REPAIR                  0
PAGED_RANGE                  0
BINARY                       0
READ                         0
MUTATION                     0
_TRACE                       0
REQUEST_RESPONSE             0
COUNTER_MUTATION             0

对此问题的任何帮助或建议都将深表感谢。您可以随意索取分析它所需的任何其他信息。

祝你好运

2 个答案:

答案 0 :(得分:0)

您的请求数量相同,或者工作量在增长?

看起来服务器过载(可能是网络)。

答案 1 :(得分:0)

我会尝试找到一个重现器并运行启用了跟踪的重现器 - 希望这有助于理解问题所在(特别是如果将它与延迟良好的跟踪进行比较)。

有一个关于如何启用查询跟踪和通过nodejs驱动程序示例retrieve-query-trace.js(可以在https://github.com/datastax/nodejs-driver上找到)

来检索输出的示例