Cassandra 卡桑德拉·里多克

Cassandra 卡桑德拉·里多克,cassandra,docker,Cassandra,Docker,我计划使用docker容器部署几个cassandra节点。如果每个节点都在一个单独的docker容器中,我还可以用这些节点构建集群吗 我想我可能会遇到很多问题,因为打开所有必要的端口可能很困难,因为其中一些端口是随机的。请所有读者小心,,问题和选择的答案在许多层面上都是错误的。让我解释一下原因 为什么这个问题是错误的 首先,端口不是必须的,而且在大多数情况下,端口不是随机的。容器公开的端口在Dockerfile中的EXPOSE说明中定义 只有当您决定使用-p选项将这些端口发布到主机时,才会在主机

我计划使用docker容器部署几个cassandra节点。如果每个节点都在一个单独的docker容器中,我还可以用这些节点构建集群吗


我想我可能会遇到很多问题,因为打开所有必要的端口可能很困难,因为其中一些端口是随机的。

请所有读者小心,,问题和选择的答案在许多层面上都是错误的。让我解释一下原因

为什么这个问题是错误的 首先,端口不是必须的,而且在大多数情况下,端口不是随机的。容器公开的端口在Dockerfile中的
EXPOSE
说明中定义

只有当您决定使用
-p
选项将这些端口发布到主机时,才会在主机上随机选择这些端口。但通常使用小写的
-p
选项手动映射端口。只有在希望从其他主机调用容器时,才需要在主机上发布端口。如果您决定在多台主机上创建Cassandra群集,这通常非常有用

问题还未能指定容器是位于同一节点上,还是分布在多个节点上。对于Docker来说,实现这些是完全不同的事情

为什么答案是错的 有一个码头中心。如果有官方形象,你通常最好试试

建议中的非官方形象有几个缺陷。我还没有测试过它,但我可以从它的Dockerfile和init.sh脚本猜测:

  • 它只支持10个容器(作者对此进行了解释)
  • 它依赖于容器链接,该链接仅适用于同一主机上的容器,但现在已被弃用
  • 它没有必要的选项来配置种子、广播IP等。。在不同的主机上部署容器时,您将需要这些
  • 它没有数据的装入点。这意味着,如果您有10个容器,它们必须写入同一个磁盘,这将破坏IO性能。Cassandra的优势在于它不会进行随机读取以避免磁盘寻道时间
那么如何将卡桑德拉与Docker一起使用呢? 问这个问题的人很可能是在胡闹,但我会认真地回答这个问题,因为那样更有趣

在单个主机上

在单个主机上部署Cassandra没有多大意义,因为它意味着水平扩展。但是,如果你要这样做,你仍然应该正确地去做

如果您想要良好的性能,您的主机上应该有多个磁盘。具体步骤如下:

  • 使用,并在每个容器上安装一个单独的磁盘
  • 创建并将这些容器放在同一个网络上,以便它们可以相互通信,甚至可以自动解析主机名
  • 创建第一个容器后,将CASSANDRA_SEEDS变量传递给每个后续容器,以通知它集群中要加入的任何其他容器的IP或主机名
多个主机-每个主机上有一个Cassandra节点

如果每个单独的主机上只有一个容器,那么有一个简单的解决方案,就是在容器上使用
--net=host
,使它们使用主机的网络堆栈,而不是将它们放在网桥网络上。这将使您的容器在网络方面表现得像主机一样。它们将具有与其主机相同的IP,并且可以被其他主机调用

本文在实际的物理节点集群上演示了该技术。如果您不想使用主机网络,但仍然希望在每个主机上使用默认网桥网络,那么博客文章还将展示您可以使用的解决方法

多个主机-每个主机上有多个Cassandra节点


实现这一点的最简单方法是使用。这将使所有节点上的所有容器都位于同一虚拟网络上。然后他们可以像在同一个节点上一样透明地相互交谈。但这需要使用更高级的Docker工具,并部署key value store服务。

我同意最好尝试官方映像,但在我回答问题时没有,这是最流行的。我没有尝试过,但我在Docker.io上找到了映像,它声称可以作为集群运行。