我公司和我已经购买了大约80,000美元的硬件以实现目标。我们的Cassandra集群在多个应用程序数据库中有大约22,000个写入/秒。我们构建了2 x节点的双3.5Ghz Xeon,128GB RAM,Areca 1883,所有这些都是高吞吐量的顶级产品。我们还有一个用于Commitlog / saved_caches的SSD RAID 10阵列,因此不会延迟。
我们遇到的问题是数据量。在大约4天内,我们收集了1.8TB的数据。我们无意发布数据。然后,我们得到了一个JBOD机箱,并放入了6TB Platter驱动器,每个10个,总共20个,用于大约110TB的空间。我们在单次复制时运行良好,问题是当我们运行双重复制时。
我们希望添加更多节点,我们知道这是正确的方法,但是在20,000美元的节点上它的成本很高。我的问题是,如果我们的写入速度是问题,那么在每台机器中增加10个驱动器应该允许写入速度加倍吗?
有没有人有类似的事情发生,并对Cassandra.yaml做了一些调整?
当我们进行双重复制时,我们确实运行了htop一段时间,并且CPU似乎确实有点密集(读取平均值为24%,但看起来非常接近最大值)。 RAM全部使用,128GB。
将考虑和调查有关此事的任何想法。
谢谢,
肯
答案 0 :(得分:1)
通常情况下,只需增加磁盘就可以提高写入速度,除非您确定自己受IO限制。 Cassandra批量写入(突变首先进入commitlog,然后是RAM中的表,然后当表达到某个阈值时批量写入sstables - 线性写入,因此它通常很快,即使在旋转磁盘上也是如此)。在某些时候,您将最大化提交日志驱动器,以更快的速度填充memtable,或者只是达到GC无法跟上的程度。
Cassandra的相当大的用户在给定服务器上运行多个Cassandra实例只是为了获得额外节点的好处而不“仅仅”添加磁盘。通过运行两个JVM,您可以减轻单个节点的暂停时间,并仍然利用您的(超大)硬件。如果您可以为各个服务器分配多个IP,这是最简单的,但在不同的端口上运行也可以。这是相当不典型的,你需要密切注意你的配置,以避免彼此踩踏,但它会工作,并且将比仅仅运行大型节点更有效地使用你的硬件。
答案 1 :(得分:0)
如果我正确阅读,你只有2个节点?
如果你只有2个节点,我怀疑磁盘带宽是不是问题。 Cassandra通常比CPU更受限制。
写入通常会转到内存中,因此当memtables作为SStables刷新到磁盘时,磁盘才会起作用。现在可能会破坏你的性能的是那些需要压缩的SStables。当压缩开始发生时,猜猜系统的哪个部分会压力,是的,CPU。
使用像这样的巨大磁盘运行修复也会遇到问题。通常我发现持续的事务吞吐量受到压缩和修复的限制,而不是原始写入性能。
使用两个节点和单个复制,您可以在两个节点之间分配负载,一半到一半,另一半到另一个节点。如果将复制因子设置为2,那么现在每次写入都将转到两个节点,这就像回到拥有单个机器数据库一样。
所以我认为购买少量高端机器是一个糟糕的要求。对于每台机器较便宜的机器,您可以获得更好的性能。您需要更多的机器来分散负载并将更多的CPU纳入等式中。
你还提到了一个磁盘盒。我希望你不要尝试使用Cassandra的网络存储。它需要磁盘是本地的。