我的(单个)cassandra节点的整体吞吐量很慢。我目前在Debian 8 VM,16GB ram,8核(4 + 4HT),两个专用7200RPM主轴上使用cassandra 3.7(VM有3个虚拟磁盘:sda
是操作系统,{{1和sdb
是另外两个虚拟磁盘,每个磁盘位于不同的主轴中,sdc
和sda
位于同一个主轴中。 Cassandra配置了两个数据目录,因此在JBOD配置中。
我接受了我在网上找到的所有建议,但系统仍缺乏性能。我的意思是系统不能容忍长时间运行的工作,它的平均吞吐量大约是15MB / s,没有"批次滥用"到目前为止,但当节点没有执行任何压缩工作时,它可以达到70MB / s的峰值。
为了消除所有潜在的瓶颈,我移动了我的数据推送器"到主机本身,并将其简化为一个简单的多线程客户端,仅使用异步写入以4k块推送随机数据。我还将commitlog移动到ramdisk,删除了任何commitlog IOPS约束(在我看来这是我的n.1瓶颈,至少对我的工作量而言)
当系统处于压力之下时,这是sdb
的输出(推送了56GB的随机数据,并且仍在推送更多数据):
dstat -lrvn -D total,sda,sdb,sdc 10
从我看到压缩活动以低速率发生,平均约为20MB / s(是的,有一些峰值在50MB / s或更高,但它们很少发生)。我从YAML中删除了压缩吞吐量的限制,但它并没有增加。我还注意到压缩发生在一个磁盘上,例如在---load-avg--- --io/total-----io/sda------io/sdb------io/sdc-- ---procs--- ------memory-usage----- ---paging-- -dsk/total----dsk/sda-----dsk/sdb-----dsk/sdc-- ---system-- ----total-cpu-usage---->
1m 5m 15m | read writ: read writ: read writ: read writ|run blk new| used buff cach free| in out | read writ: read writ: read writ: read writ| int csw |usr sys idl wai hiq siq>
16.3 22.1 25.2| 917 226 : 0 2.60 : 347 139 : 570 84.3 | 13 1.9 50|11.6G 2976k 4012M 166M| 0 0 | 44M 44M: 0 52k: 17M 31M: 27M 13M| 36k 60k| 29 6 48 16 0 0>
14.6 21.6 25.0| 744 142 : 0 0.90 :2.00 75.0 : 742 65.9 |1.8 4.2 20|11.6G 2904k 4050M 151M| 0 0 | 35M 20M: 0 20k: 16k 5541k: 35M 15M| 23k 40k| 15 4 49 32 0 0>
13.2 21.0 24.8| 731 91.0 :0.80 4.70 : 127 22.9 : 603 63.4 |0.8 2.8 23|11.6G 2712k 4028M 171M| 0 0 | 34M 26M: 36k 52k:5250k 6631k: 29M 19M|5660 8099 | 8 2 63 28 0 0>
12.5 20.8 24.7| 536 131 : 0 6.00 :68.1 29.2 : 468 95.8 |1.9 2.1 47|11.6G 2728k 4032M 164M| 0 0 | 25M 48M: 0 74k:2744k 3856k: 22M 44M|6877 11k| 14 2 61 23 0 0>
或sdb
上读取和压缩表ALL,而从一个数据目录读取并写入另一个数据目录似乎更合适避免读/写寻道冲突(是的,我试图配置concurrent_compactors:1)。
60GB后我的客户输出说:
sdc
现在我停了下来,让cassandra完成它的工作,然后再次启动它:
Row 11930000 written (3914 ops/s, 15,29 MB/s)
当压缩触发时,我得到一个下降:
Row 670000 written (10931 ops/s, 42,70 MB/s)
再一次dstat输出确认缓慢的压缩:
Row 1640000 written (5543 ops/s, 21,65 MB/s)
我试图增加memtable flushers count并调整清理率,但它们似乎只对压缩开始产生影响。
我监控CPU使用率,cassandra在初始写入期间接近400%(当峰值达到70MB / s时,客户端消耗高达150%),然后稳定在150%左右,其中"负面&# 34;当压缩表(客户休息.....)时,峰值为25%
所以在我看来,整个过程是磁盘I / O"吞吐量"绑定而不是CPU绑定,因为我最大限度地提高了两个磁盘的IOPS(参见dstat),但是我无法从这些IOPS获得吞吐量,即使cassandra应该以...轻的速度执行大型顺序写入!
如何强制cassandra以最大速度刷新数据,以便让我更快地推送数据?
感谢。
更新
平均输出降至11MB / s。但是,在RAID-0中配置磁盘可将吞吐量提高到持续的31MB / s:
1m 5m 15m | read writ: read writ: read writ: read writ|run blk new| used buff cach free| in out | read writ: read writ: read writ: read writ| int csw |usr sys idl wai hiq siq>
24.9 23.9 17.3|72.6 44.4 :0.52 4.23 :20.4 17.4 :51.7 22.8 | 0 0.0 31|12.9G 4636k 2720M 195M| 0 0 |3824k 10M: 13k 679k:1002k 4149k:2809k 5188k| 16k 29k| 16 2 77 4 0 0>
29.0 24.8 17.6| 530 300 : 0 5.00 : 234 105 : 296 189 | 10 2.9 39|12.9G 4644k 2188M 638M| 0 0 | 23M 83M: 0 55k:9746k 19M: 14M 63M| 44k 62k| 24 7 48 21 0 0>
29.8 25.1 17.8| 805 325 :25.2 2.10 : 235 159 : 545 164 |9.3 6.1 40|12.9G 4948k 2715M 179M| 0 0 | 33M 56M:1241k 46k:9721k 25M: 22M 31M| 59k 100k| 38 10 33 18 0 0>
25.6 24.4 17.7| 507 302 :12.6 5.00 : 215 126 : 280 170 | 12 3.1 47|12.9G 4956k 2710M 133M| 0 0 | 21M 58M: 968k 81k:8964k 22M: 11M 36M| 54k 88k| 33 9 42 16 0 0>
22.5 23.7 17.5| 764 245 :0.10 3.30 : 535 115 : 229 127 | 21 2.9 48|12.9G 4976k 2726M 180M| 0 0 | 31M 43M: 410B 61k: 22M 23M:9343k 20M| 32k 59k| 27 6 52 15 0 0>
29.7 25.2 18.1| 987 339 : 0 5.20 : 605 164 : 382 169 | 18 3.7 47|13.0G 4992k 2633M 164M| 0 0 | 40M 64M: 0 68k: 25M 39M: 15M 25M| 65k 106k| 37 10 38 15 0 0>
25.8 24.5 17.9| 753 297 : 0 2.80 : 403 144 : 351 150 | 14 4.1 55|13.0G 5000k 2650M 170M| 0 0 | 30M 74M: 0 56k: 16M 36M: 14M 37M| 40k 71k| 31 6 38 25 0 0>
22.6 23.8 17.8| 718 207 : 0 3.50 : 521 128 : 197 74.9 |7.7 2.5 47|13.0G 5016k 2517M 287M| 0 0 | 29M 51M: 0 71k: 21M 37M:8232k 14M| 30k 51k| 25 5 54 16 0 0>
这里又是3030567 rows: avg 8145 ops/s, avg 31,82 MB/s, avg reads = 0 ops/s, avg writes = 8145 ops/s
3034439 rows: avg 8103 ops/s, avg 31,65 MB/s, avg reads = 0 ops/s, avg writes = 8103 ops/s
3059090 rows: avg 8147 ops/s, avg 31,83 MB/s, avg reads = 0 ops/s, avg writes = 8147 ops/s
3064226 rows: avg 8122 ops/s, avg 31,73 MB/s, avg reads = 0 ops/s, avg writes = 8122 ops/s
3089627 rows: avg 8168 ops/s, avg 31,91 MB/s, avg reads = 0 ops/s, avg writes = 8168 ops/s
的输出:
dstat
RAID0配置减轻了读/写冲突,似乎这不是"调整"问题,但C *的写入性能不好。
感谢。
更新2:
这似乎只有一个磁盘"压缩的目的是:
http://www.datastax.com/dev/blog/improving-jbod https://issues.apache.org/jira/browse/CASSANDRA-6696