我在cassandra.yaml文件中配置了三个单独的数据目录,如下所示:
data_file_directories: - E:/Cassandra/data/var/lib/cassandra/data - K:/Cassandra/data/var/lib/cassandra/data
当我创建键空间并插入数据时,我的密钥空间在两个目录中都被创建,数据被分散了。我想知道的是cassandra如何在多个目录之间分割数据?这背后的规则是什么?
答案 0 :(得分:10)
在data_file_directories下添加多个条目时,您正在使用Cassandra的JBOD功能。数据均匀分布在配置的驱动器上,与其可用空间成比例。
这也让你利用disk_failure_policy设置。你可以在这里阅读详细信息: http://www.datastax.com/dev/blog/handling-disk-failures-in-cassandra-1-2
简而言之,您可以将Cassandra配置为继续运行,如果磁盘已满或完全失败,请执行此操作。这比RAID0(您将有效地具有与JBOD相同的容量)具有优势,因为您不必从备份(或完全修复)替换整个数据集,而只是对丢失的数据运行修复。另一方面,RAID0提供更高的吞吐量(取决于您知道如何调整RAID阵列以匹配文件系统和驱动器几何)。
如果您拥有容错/更高性能RAID设置(例如RAID10)的资源,您可能只想使用单个目录以简化操作。大多数部署都开始倾向于使用JBOD而不是系统级容差的密度路径。
您可以在此处阅读有关此问题开发背后的思考过程: https://issues.apache.org/jira/browse/CASSANDRA-4292
答案 1 :(得分:0)
我能够猜到密钥空间如何在多个数据目录之间分割。基于目录上的最大可用空间和负载,将相同列族的SSTable写入不同的数据目录。