docker - 我可以将一些键空间复制到一些节点吗?

标签 docker cassandra replication cassandra-3.0

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

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

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

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

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

最佳答案

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

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

我建议您考虑配置安全性 SSL对于初学者,然后也许 internal authentication .注意 Kerberos 也受支持,但这对于您至少现在需要的东西来说可能太复杂了。

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

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

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

关于docker - 我可以将一些键空间复制到一些节点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45751803/

相关文章:

docker - dockerfile 中的 gsutil cp 不复制文件

cassandra - nodetool removenode 在删除过程中卡住

mysql - 从 SQL Server 到 MySQL 链接服务器的缓慢 INSERT

mysql - 为什么在重新同步 mysql slave 时出现 'reset master'

android - android-sdk 工具上标签不匹配太多,无法构建 docker 镜像

docker - 如何使用 docker-compose 启用 BuildKit?

c# - dotnet restore 在 docker-compose build 中非常慢

apache-spark - Spark Streaming 数据集 Cassandra 连接 UnsupportedOperationChecker

cassandra - 如何使用节点 cassandra-client 在 cassandra 中创建键空间

mongodb - redis vs mongodb - 从主服务器复制到运行内存数据库的从服务器