经过多次恳求和案例构建,我的团队获得了购买 4 个节点并启动 Cassandra 集群的预算。每台机器都有 3 个 1Tb 驱动器,所以我想知道跳过单向冗余并镜像数据驱动器是否合理。
数据将被备份,所以这不是问题。
看来在如此小的群体中丢失机器的可能性很低。
这是合理的吗或者我忽略了一些更大的问题/因素?
答案1
这实际上取决于您使用 Cassandra 的目的。您是使用它来提高数据可用性、对数据进行分区,还是两者兼而有之?从这个角度来看,您更多地使用它来对数据进行分区,以便可以扩展数据。
您希望在 Cassandra 中复制数据的部分原因是为了可用性。例如,如果您有一个 4 节点集群,复制因子为 3,那么您可以在丢失一个节点的情况下继续工作而无需进行任何维护(使用仲裁一致性级别,2 个节点具有“一个”一致性级别)。另一方面,每个节点将保存集群中 75% 的数据,这可能是您希望避免的情况。这就是为什么我会尝试请求另外一两台服务器,尽管您可能不会立即需要它,并且您可以随着数据需求的增加添加更多服务器。
虽然您提到丢失一台机器的可能性不大,但我认为以 1 的复制因子运行是自找麻烦。您可能永远不会遇到问题,但一旦遇到问题,就不好玩了。如果您使用一台大型服务器来维护数据库,那么它发生故障的可能性听起来比 4 台独立服务器中的 1 台更小,对吗?
还有其他因素也可能导致 Cassandra 节点出现故障或无响应(操作系统故障、垃圾收集、网络问题等)。
当你开始使用分布式数据库时,容错能力应该成为更多的与使用传统的单一数据库设置相比,这更令人担忧,而 Cassandra 专注于此并擅长于此。
我过去曾有过这样的经历:很难向管理层证明硬件购买和环境配置的合理性。让他们理解影响的最佳方法是概述故障场景以及是否可以接受,例如:
如果一台服务器出现硬件故障、数据损坏或 Cassandra 崩溃,我们可以容忍多长时间的停机时间?
如果答案是“0 分钟”,则您需要使用至少 3 的复制因子。这样做还有更多好处。复制因子为 3 意味着更多节点可以为单个读取请求提供服务,从而有可能提高读取性能。
此外,镜像/RAID 1 被认为对 Cassandra 的数据来说有点反模式(尽管对于提交日志来说这不是一个坏主意)。最好使用 RAID 0 或多个数据目录,将复制因子设置为 3,让 Cassandra 为您处理冗余。