【问题标题】:Best practice cassandra setup on ec2 with large amount of data具有大量数据的 ec2 上的最佳实践 cassandra 设置
【发布时间】:2014-01-30 09:07:59
【问题描述】:

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

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

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

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

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

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

任何信息都会很棒。

感谢您的宝贵时间。

【问题讨论】:

  • 您检查过 DynamoDB 吗?作为一项托管服务,它可以让您承担所有这些操作的复杂性。

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


【解决方案1】:

我在 EC2 上运行 Cassandra 已经 2 年多了。为了解决您的问题,您需要在 EC2 上为您的 Cassandra 集群构建适当的可用性架构。以下是供您考虑的项目符号列表:

  1. 考虑至少 3 个区域来设置您的集群;
  2. 使用带有 EC2Snitch/EC2MultiRegionSnitch 的 NetworkTopologyStrategy 将数据的副本传播到每个区域;这意味着每个区域中的机器将合并您的完整数据集;例如 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

关于备份:

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

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

希望以上有所帮助。

【讨论】:

    【解决方案2】:

    这真的取决于您的数据。但首先,您必须考虑 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?

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多