【问题标题】:What to do when nodes in a Cassandra cluster reach their limit?当 Cassandra 集群中的节点达到极限时该怎么办?
【发布时间】:2017-02-28 20:01:46
【问题描述】:

我正在研究 Cassandra,并正在为我正在进行的项目设置集群。考虑这个例子: 假设我设置了一个 5 节点集群,每个集群有 200 GB 空间。这相当于总共高达 1000 GB(大约 1 TB)的空间。假设我的分区在集群中平均分配,我可以轻松添加节点并实现线性可扩展性。但是,如果这 5 个节点开始接近 200 GB 的 SSD 限制怎么办?在这种情况下,我可以再添加 5 个节点,现在分区将被拆分为 10 个节点。但较旧的节点仍会写入数据,因为它们是集群的一部分。有没有办法让这 5 个旧节点“只读”?我想在整个集群中执行随机读取查询,但不想再写入旧节点(因为它们的上限为 200 GB)。

我们将不胜感激。谢谢。

注意:我可以说 99% 的查询是写查询,只有 1% 或更少的查询是读查询。该应用程序必须在 Cassandra 中保留点击事件。

【问题讨论】:

    标签: database cassandra


    【解决方案1】:

    通常当集群达到其限制时,我们会向集群添加新节点。添加新节点后,旧的cassandra 集群节点会将其数据分发到新节点。之后,我们在每个节点中使用nodetool cleanup 来清理分发到新节点的数据。整个场景发生在一个 DC 中。

    例如:

    假设,DC1 中有 3 个节点 (A,B,C)DC2 中有 1 个节点 (D)。您的节点已达到极限。因此,决定向 DC1 添加一个新节点 (E)。节点ABC 会将它们的数据分发给节点E,我们将在ABC 中使用nodetool cleanup 来清理空间。

    【讨论】:

    • 神圣的 **** 。棒极了。谢谢。
    【解决方案2】:

    正确理解问题的问题。

    我假设您知道通过添加新的 5 个节点,一些数据负载将转移到新节点,因为将分配一些令牌范围。

    现在,如您所知,如果您担心旧的 5 个节点由于达到限制而无法写入,则不会发生这种情况,因为新节点已共享数据负载,因此这些节点现在有可用空间进一步写。

    隔离对节点的读写是完全不同的问题。但是如果你只想隔离对这5个节点的读取并写入新的5个节点,那么最好的方法是在同一个集群下的另一个数据中心中添加新的5个节点,然后使用不同的一致性级别进行读写满足您将旧数据中心设为只读的需求。

    但新的数据中心不会从一开始就减轻数据负载。它甚至会为自己承担相同的负载。 (因此,您将需要 5 个以上的节点来同时完成这两个问题。很少有节点可以减轻重量,而其他节点可以通过创建新的数据中心来隔离读写。而且新的数据中心应该有 5 个以上的节点)。最佳做法是通过添加新节点或增加数据限制来监控数据负载并在此类问题发生之前对其进行修复。

    考虑到这一点,您还需要确保您提供的用于读写的节点应该来自不同的数据中心。

    考虑你有以下情况:

    dc1(n1, n2, n3, n4, n5)

    dc2(n6, n7, n8, n9, n10)

    现在,为读取您提供节点 n1 和写入您提供节点 n6

    现在可以通过从以下选项中选择正确的一致性级别来完成读/写隔离:

    LOCAL_QUORUM

    LOCAL_ONE

    这些基本上会将副本的搜索限制在本地数据中心。

    查看这些参考资料以了解更多信息: Adding a datacenter to a clusterConsistency Levels

    【讨论】:

    • 感谢您的回复。我的理解是:如果我将一个节点添加到集群中,旧节点中的数据将保留在原来的位置,但是使用 cassandra 的 vnodes 和一个体面的分区策略,新数据现在将被发送到新节点和旧节点也会继续获取数据。你是说通过添加一个节点,Cassandra 会从旧节点中获取一些数据,将其传输到新节点,然后从旧节点中删除这些传输的数据?
    • 我说的几乎一样。如果您将节点添加到同一个数据中心,那么一些令牌范围将被分配给它以有助于整体数据负载(这将通过通知其他节点八卦)。与此令牌范围对应的数据将由该新节点保存。因此,一些旧节点将释放自己的一些负载。
    • 此外,这种新的数据分布不会是统一的。但是通过运行 nodetool repair 这可以平衡。 PS。它的 nodetool 清理
    猜你喜欢
    • 2018-03-04
    • 2015-10-17
    • 2016-08-14
    • 2012-05-02
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多