我正在尝试构建多个API,我想用Cassandra存储数据。我正在设计它,就好像我会有多个主机一样,但是,我设想的主机有两种类型:受信任的和不受信任的。
正因为如此,我有某些数据,我不想最终复制到一组主机上,但其余的数据将被复制到任何地方。
我考虑简单地为公共数据创建一个节点,为受保护的数据创建一个节点,但这将要求受信任的主机运行两个节点,这也会使API与数据的交互方式复杂化。
我也是在一个码头容器中构建它的,我希望会有频繁的节点创建/销毁,既有信任的,也有不可信的。
我想知道是否可以使用键空间来实现我所需的复制策略。
发布于 2017-08-18 10:15:31
您可以有两个数据中心,一个拥有公共数据,另一个拥有私有数据。您可以将密钥空间复制配置为只将该数据复制到一个(或两个)DC。查看NetworkTopologyStrategy复制上的文档
但是,这里存在安全性问题,因为所有节点都需要能够通过流言协议相互联系,而且您的客户端应用程序可能需要在不同的读写过程中与两个DC联系。
我建议您考虑配置安全性,比如为初学者配置SSL,然后再配置内部认证。注意,Kerberos也是受支持的,但是这可能太复杂了,至少现在是这样。
您还可以考虑查看防火墙文档,以了解节点之间和客户端之间使用哪些端口,从而知道应该锁定哪些端口。
最后,正如上面的海报所提到的,经常破坏/创建节点并不是一个好的做法。Cassandra的设计是为了在运行时能够增长/缩小集群,但这可能是一项代价高昂的操作,因为它不仅涉及从被移除/添加的节点流数据,而且还涉及其他节点在令牌范围内移动以实现重新平衡。
您可以在docker容器中运行节点,但是请注意,您需要注意不要做像几个容器都访问相同物理资源这样的事情。Cassandra对io延迟非常敏感,例如,共享相同物理磁盘的几个容器可能会导致性能问题。
发布于 2017-08-18 08:54:14
简而言之:不,你不能。
cassandra集群中的所有节点都来自一个完整的环,您的数据将与所选的分区器一起分发。
您可以在cassandra中拥有多个密钥空间以及身份验证和授权,并将受信任和不受信任的数据拆分为不同的密钥空间。或者用两个集群来分割数据。
根据我的经验,你也不应该试图创建和摧毁卡桑德拉节点,作为你的日常事务。添加和删除节点成本很高,需要进行监视,因为您的集群需要维护副本等等。因此,将cassandra集群与api节点分离可能会更好。
https://stackoverflow.com/questions/45751803
复制相似问题