我正在尝试构建多个API,我想用Cassandra存储数据。我正在设计它,好像我有多个主机,但我设想的主机有两种类型:信任和不信任。
因为我有一些数据,我不希望最终复制到一组主机上,但其余的数据要复制到任何地方。
我只考虑为公共数据创建一个节点,为受保护数据创建一个节点,但这需要可信主机运行两个节点,这也会使API与数据交互的方式复杂化。
我也在docker容器中构建它,我希望频繁的节点创建/销毁既受信任又不受信任。
我想知道是否可以使用键空间来实现我所需的复制策略。
答案 0 :(得分:3)
您可以拥有两个拥有公共数据的数据中心,另一个拥有私有数据。您可以将密钥空间复制配置为仅将该数据复制到一个(或两个)DC。请参阅replication for NetworkTopologyStrategy
上的文档然而,这里存在安全问题,因为所有节点都需要能够通过八卦协议相互联系,并且您的客户端应用程序可能需要联系两个DC以进行不同的读写操作。
我建议您考虑为初学者配置安全性SSL,然后可能internal authentication。注意也支持Kerberos,但这对于您至少现在需要的内容来说可能过于复杂。
您还可以考虑查看firewall docs以查看节点之间和客户端之间使用的端口,以便了解要锁定哪些端口。
最后,正如上面的海报所提到的,节点的破坏/创建往往不是好的做法。 Cassandra旨在能够在运行时增长/缩小集群,但它可能是一项代价高昂的操作,因为它不仅涉及从被删除/添加的节点流式传输数据,还涉及在令牌范围内重新平衡的其他节点。
您可以在docker容器中运行节点,但请注意,您需要注意不要执行所有访问相同物理资源的多个容器之类的操作。 Cassandra对io延迟非常敏感,例如,共享同一物理磁盘的多个容器可能会导致性能问题。
答案 1 :(得分:0)
简而言之:不,你不能。
cassandra集群中的所有节点都来自一个完整的环,您的数据将与您选择的分区一起分发。
您可以在cassandra中拥有多个密钥空间以及身份验证和授权,并将您的可信和不可信数据拆分到不同的密钥空间。或者您可以使用两个群集来分割数据。
根据我的经验,您也不应该尝试创建和销毁cassandra节点作为日常业务。添加和删除节点成本很高,需要进行监控,因为您的集群需要维护复制等等。因此,从api节点拆分cassandra集群可能会很好。