我在 EC2 上运行 Cassandra 已有 2 年多了。为了解决您的担忧,您需要在 EC2 上为您的 Cassandra 集群构建适当的可用性架构。以下是供您考虑的项目符号列表:
- 考虑至少 3 个区域来设置集群;
- 将 NetworkTopologyStrategy 与 EC2Snitch/EC2MultiRegionSnitch 结合使用,将数据副本传播到每个区域;这意味着每个区域中的机器将合并您的完整数据集;例如,strategy_options 类似于 {us-east:3}。
上述两个技巧应该满足 AWS 中的基本可用性,并且如果您的查询是使用 LOCAL_QUORUM 发送的,那么即使一个区域出现故障,您的应用程序也将正常工作。
如果您担心 2 个区域出现故障(不记得在我使用过去 2 年的 AWS 中发生过这种情况),那么您还可以向集群添加另一个区域。
通过上述,如果任何节点因任何原因死亡,您可以从其他区域的节点恢复它。毕竟,CAssandra 旨在为您提供这种可用性。
关于 EBS 与 Ephemeral:
我一直反对在任何生产中使用 EBS 卷,因为就可用性而言,它是最差的 AWS 服务之一。它们每年会出现几次故障,而且其负面影响通常会波及其他 AWS 服务,例如 ELB 和 RDS。它们也类似于附加的网络存储,因此任何读/写都必须通过网络进行。不要使用它们。甚至 DataStax 也不推荐它们:
http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/../../cassandra/architecture/architecturePlanningEC2_c.html http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/../../cassandra/architecture/architecturePlanningEC2_c.html
关于备份:
我使用一种名为 Priam 的解决方案(https://github.com/Netflix/Priam https://github.com/Netflix/Priam)由 Netflix 编写。它可以在夜间拍摄集群快照并将所有内容复制到 S3。如果您启用incremental_backups,它还会将增量备份上传到S3。如果节点出现故障,您可以使用简单的 API 调用在特定节点上触发恢复。它恢复速度更快,并且不会给其他节点带来大量流负载。我还添加了一个补丁,让您可以做一些奇特的事情,例如在一个 AWS 区域内建立多个 DC。
您可以在这里阅读我的设置:http://aryanet.com/blog/shrinking-the-cassandra-cluster-to-fewer-nodes http://aryanet.com/blog/shrinking-the-cassandra-cluster-to-fewer-nodes
希望以上有帮助。