cassandra 集群节点的数据目录应该相同吗?

Should Data directories of cassandra cluster nodes be identical?

假设我有一个 2 节点集群,其中所有节点都在 cassandra.yaml 中配置了相同的 data_file_directories(比如 3 个文件夹) 例如

data_file_directories:
    - E:/Cassandra/data/var/lib/cassandra/data
    - K:/Cassandra/data/var/lib/cassandra/data
    - F:/Cassandra/data/var/lib/cassandra/data

现在假设我将第 3 个节点添加到具有不同 data_file_directories(例如 1 个文件夹)

的集群
 data_file_directories:
    - B:/Cassandra/data/var/lib/cassandra/data

这样做不对吗?在数据重新平衡时,现有节点的3个目录的数据会流向新节点的1个目录吗?

Nate McCall(现任 Apache Cassandra 项目主席)在这里回答了类似的问题:How does cassandra split keyspace data when multiple directories are configured?

总之,这样应该没问题。 Cassandra 将数据均匀地分布在 data_file_directories 中的条目中,而不管那里有多少。此外,节点负责的令牌数量与此设置无关,因此您不应该看到任何 hot-spots 或不平衡(至少不是因为这个)。

话虽如此,我将补充以下几点:

  • 如果它们是不同的物理挂载点,则指定多个数据目录会有所帮助。这样如果一个磁盘应该 fill-up 或意外失败,节点仍然可以保持 运行.
  • 如果我计划添加一个节点并为 long-term 保留所有节点,我会指定新节点的配置尽可能接近原始节点。当您负责多个节点和集群时,这在大环境中尤其有用,如果您需要进行故障排除,则不必记住 how/why 集群中的某个特定节点是不同的。
  • 最后一点的例外情况是,如果我决定继续移动到单个数据目录。但是我也有一个计划让现有节点停用并用同样具有类似配置的节点替换它们。

Pro-tip:如果可以的话,尽量使用像Chef或者Spinnaker这样的自动化部署工具。这样,新节点的配置本质上是集群中所有其他节点的 "cookie-cutter"。