Cassandra – 硬件规划

简单地说:如果我有5 Tb的数据,并希望部署在5个cassandra服务器上 – 每台机器是否需要有5 Tb的磁盘空间用于数据(不包括日志空间)? 从文档听起来有时卡桑德拉将需要2倍的数据大小 – 所以在arrays总共10TB /服务器或10TB?

每台机器应该有多lessRAM? 假设5Tb全部在同一列空间中。 我一直在计划在每台机器上最大限度地使用内存,但是我不确定这是否足够。 我需要一组总共5TB的RAM吗?

如果您在您的5台服务器上均匀分布5 TB的数据,则每台服务器将托pipe1 TB的数据。 由于压缩的需要,每个服务器需要2TB的磁盘空间(在最糟糕的情况下,压缩需要磁盘空间的两倍,因为你有数据),这意味着你的集群总共有10TB。

上面的情况是您只在集群中存储单个数据副本的地方。 在这种情况下,如果服务器发生故障,五分之一的数据将无法访问。 如果要将数据的两个副本存储在群集中,则每个节点将需要4 TB的磁盘空间,这意味着群集中的总计数据量为20 TB。

假设所有数据都在RAM中,这是一个巨大且昂贵的机器。 幸运的是,在大多数应用程序中,您不需要将所有数据保存在内存中,而只需保存您的活动/活动数据。

当条目从内存中丢失时,Cassandra能够自动从HD读取数据到RAM。 相反,当不访问的logging从内存中被驱逐(“冷”数据)时。 您可以将Cassandra作为应用程序级高速caching进行比较,其中条目是帐户行。 在这种情况下,高速caching命中/未命中可以解释为cassandra文件系统磁盘上的logging,这些logging必须返回到内存中。

所以在尺码方面:

  • HDD是针对总数据集的尺寸
  • RAM的尺寸是为了减less“caching未命中”
  • 复制因素影响吞吐量和弹性

所以谈论RAM:你只需要在内存中保存足够的数据,以避免从磁盘不必要的重新获取。 这是非常依赖于应用程序。 我build议运行一些基准testing来validation每天有多less活动会话与系统中存储的会话总数之和。 如果您的系统被读取占主导地位并且读取展现时间局部性,则这适用。

检查此线程的进一步的灵感https://stackoverflow.com/questions/4924978/cache-design-questions

实时数据与总数据的比率决定了系统的RAM要求。 从本质上讲,这是卡桑德拉错失与RAM成本的折衷。 类似的考虑 – 在不同的级别 – 适用于cpucachingdevise。

cassandrabuild议每个节点的磁盘空间的性能是1/2太字节,所以除非你想等待极长的压缩和非常长的映射/缩短时间,否则你应该重新考虑需要多less台机器。