最佳实践cassandra在ec2上设置大量数据

时间:2014-01-27 16:51:30

标签: amazon-web-services amazon-ec2 cassandra storage

我正在从物理机器到ec2实例进行大规模迁移。

截至目前,我有3个x.large节点,每个节点有4个实例存储驱动器(raid-0 1.6TB)。在我这样设置之后,我记得“实例存储卷上的数据仅在关联的Amazon EC2实例的生命周期内持续存在;如果停止或终止实例,实例存储卷上的任何数据都将丢失。”

在这种情况下,人们通常会做些什么?我担心,如果其中一个盒子崩溃,那么如果不是100%在另一个盒子上复制,那么所有数据都将在该盒子上丢失。

http://www.hulen.com/?p=326 我在上面的链接中读到这些人使用ephermal驱动器并使用EBS驱动器和快照定期备份内容。“

在这个问题中:How do I take a backup of aws ec2 instance/ephemeral storage? 人们声称您无法将传记数据备份到EBS快照上。

我最好选择使用几个EBS驱动器并将它们组合在一起,并能够直接从它们拍摄快照吗?我知道这可能是最昂贵的解决方案,但它似乎最有意义。

任何信息都会很棒。

感谢您的时间。

2 个答案:

答案 0 :(得分:50)

我在EC2上运行Cassandra超过2年。要解决您的问题,您需要在EC2上为您的Cassandra集群构建适当的可用性架构。这是一个供您考虑的项目清单:

  1. 至少考虑3个区域来设置群集;
  2. 将NetworkTopologyStrategy与EC2Snitch / EC2MultiRegionSnitch一起使用,将数据的副本传播到每个区域;这意味着每个区域中的机器将整合您的完整数据集;例如,strategy_options就像{us-east:3}。
  3. 上述两个提示应满足AWS中的基本可用性,如果您使用LOCAL_QUORUM发送查询,即使一个区域出现故障,您的应用程序也会正常运行。

    如果您担心2个区域出现故障(请勿回忆起我在过去两年中使用过AWS),那么您还可以向群集中添加另一个区域。

    通过上述操作,如果任何节点因任何原因而死亡,您可以从其他区域中的节点恢复它。毕竟,CAssandra旨在为您提供这种可用性。

    关于EBS vs 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

    关于备份:

    我使用了由Netflix编写的名为Priam(https://github.com/Netflix/Priam)的解决方案。它可以拍摄群集的夜间快照,并将所有内容复制到S3。如果启用incremental_backups,它还会将增量备份上载到S3。如果节点出现故障,您可以使用简单的API调用在特定节点上触发恢复。它可以更快地恢复,并且不会在您的其他节点上放置大量的流负载。我还添加了一个补丁,让你做一些奇特的事情,比如在一个AWS区域内建立多个DC。

    您可以在此处阅读我的设置: http://aryanet.com/blog/shrinking-the-cassandra-cluster-to-fewer-nodes

    希望以上有所帮助。

答案 1 :(得分:5)

这实际上取决于您的数据。但首先,您必须考虑Cassandra有自己的备份/复制机制。如果其中一个节点发生故障,其他节点仍将设置您的数据。复制因子越高,您的数据就越“安全”,复制因子越高,您需要的Cassandra节点就越多。

如果您的数据非常关键,您必须问自己,您是否可以有效地重建数据而无需在短暂存储中进行备份?你在寻找更好的表现吗?短暂存储比EBS执行得更好,如果您的应用程序是读/写密集型的,它会很好用。在我们的例子中,我们使用Cassandra和短暂的存储空间来填充我们已经存储在Amazon S3中的数据。

如果您无法重建数据并且您的数据非常关键并且您不信任Cassandra,则您可以始终使用EBS,从而降低性能。 Cassandra的问题在于,如果群集中的所有节点都相同,它的效果最佳。所以说一些节点短暂支持并且一些节点EBS支持并不容易。除非你想用EBS支持的集群完全复制你的短暂集群,否则它不是直接的。

由于主从设置,您可以更轻松地使用EBS支持的实例(来自临时存储实例)复制mysql或couchdb实例。例如,您可以让mysql master在临时存储实例上运行,而mysql slave在EBS支持的实例上运行。

此处还有关于Ephemeral与EBS的另一个讨论:

How do I take a backup of aws ec2 instance/ephemeral storage?

希望它有所帮助。

相关问题