Cassandra - 缓慢压实和冲洗吞吐量

时间:2016-09-05 15:46:36

标签: performance cassandra

我的(单个)cassandra节点的整体吞吐量很慢。我目前在Debian 8 VM,16GB ram,8核(4 + 4HT),两个专用7200RPM主轴上使用cassandra 3.7(VM有3个虚拟磁盘:sda是操作系统,{{1和sdb是另外两个虚拟磁盘,每个磁盘位于不同的主轴中,sdcsda位于同一个主轴中。 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

0 个答案:

没有答案