【问题标题】:Can I have some keyspaces replicated to some nodes?我可以将一些键空间复制到某些节点吗?
【发布时间】:2017-08-18 08:15:14
【问题描述】:

我正在尝试构建多个要使用 Cassandra 存储数据的 API。我将其设计为好像我将拥有多个主机,但是,我设想的主机将有两种类型:受信任的和不受信任的。

因为我有某些数据我不想最终复制到一组主机上,但其余数据要复制到任何地方。

我考虑过简单地为公共数据和受保护数据创建一个节点,但这需要受信任的主机运行两个节点,而且这也会使 API 与数据交互的方式变得复杂。

我也在一个 docker 容器中构建它,我希望会频繁地创建/销毁受信任和不受信任的节点。

我想知道是否可以使用键空间来实现我所需的复制策略。

【问题讨论】:

    标签: docker cassandra replication cassandra-3.0


    【解决方案1】:

    您可以有两个数据中心,一个包含您的公共数据,另一个包含私有数据。您可以将键空间复制配置为仅将该数据复制到一个(或两个)DC。请参阅replication for NetworkTopologyStrategy 上的文档

    但是这里存在安全问题,因为所有节点都需要能够通过 gossip 协议相互访问,而且您的客户端应用程序可能需要联系两个 DC 以进行不同的读取和写入。

    我建议您考虑为初学者配置安全性,也许是 SSL,然后也许是 internal authentication。注意 Kerberos 也受支持,但这对于您至少现在所需要的而言可能过于复杂。

    您还可以考虑查看firewall docs,了解节点之间和客户端使用了哪些端口,以便了解要锁定哪些端口。

    最后,正如上面的海报所提到的,过于频繁地销毁/创建节点并不是一个好的做法。 Cassandra 旨在能够在运行时扩大/缩小集群,但它可能是一项代价高昂的操作,因为它不仅涉及从/到要删除/添加的节点的流式数据,还涉及在令牌范围内重新调整以重新平衡的其他节点。

    您可以在 docker 容器中运行节点,但请注意,您需要注意不要执行多个容器都访问相同物理资源的操作。 Cassandra 对 io 延迟非常敏感,例如,多个容器共享同一个物理磁盘可能会导致性能问题。

    【讨论】:

    • 谢谢,我会再调查一下。 :)
    【解决方案2】:

    简而言之:不,你不能。

    cassandra 集群中的所有节点来自一个完整的环,您的数据将与您选择的分区器一起分布在该环中。

    您可以在 cassandra 中拥有多个密钥空间以及身份验证和授权,并将您的可信和不可信数据拆分到不同的密钥空间中。或者您可以使用两个集群来拆分数据。

    根据我的经验,您也不应该像日常事务一样尝试创建和销毁 cassandra 节点。添加和删​​除节点的成本很高,并且需要进行监控,因为您的集群需要维护复制等。因此,从您的 api 节点拆分 cassandra 集群可能会很好。

    【讨论】:

    • 您实际上在这里提出了一些好的观点,但它不是一个明确的“不”。正如您所指出的,您可以在不同的键空间中拥有数据,但您也可以将这些数据复制到不同的“虚拟数据中心”,从而控制给定键空间的数据和副本数据的放置。我特意回应了您关于添加/删除节点的评论。不是你一直都在做的事情。
    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2019-02-28
    • 2019-08-20
    相关资源
    最近更新 更多