gpt4 book ai didi

Docker 中的 Cassandra

转载 作者:行者123 更新时间:2023-12-03 07:02:34 24 4
gpt4 key购买 nike

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

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

最佳答案

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

为什么问题错了

首先,端口不是必须的,而且在大多数情况下,不是随机的。容器暴露的端口在 EXPOSE 中定义Dockerfile 中的说明。

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

该问题也未能指定容器是在同一个节点上,还是分布在多个节点上。这些是用 Docker 实现的完全不同的东西。

为什么答案是错误的

有一个Cassandra official image在 Docker Hub 上。当有官方图片时,您通常最好尝试一下。

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

  • 只支持10个容器(这个是作者解释的)
  • 它依赖于容器链接,这仅适用于同一主机上的容器,并且现在已弃用
  • 它没有必要的选项来配置种子、广播 IP 等。在单独的主机上部署容器时需要这些选项。
  • 它没有数据的挂载点。这意味着如果您有 10 个容器,它们必须写入同一个磁盘,这会破坏 IO 性能。 Cassandra 的优势在于它不会进行随机读取以避免磁盘寻道时间。

  • 那么如何在 Docker 中使用 Cassandra 呢?

    问这个问题的人很可能是在玩,但我会尽量认真回答这个问题,因为这样更有趣!

    在单个主机上

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

    如果您想要良好的性能,您的主机上应该有多个磁盘。要做的步骤是:
  • 使用 official image并在每个容器上安装一个单独的磁盘。
  • 创建一个 user-defined bridge network并将这些容器放在同一个网络上,以便它们可以相互通信,甚至可以自动解析主机名。
  • 创建第一个容器后,将 CASSANDRA_SEEDS 变量传递给每个后续容器,以通知它集群中已加入的任何其他容器的 IP 或主机名。

  • 多个主机 - 每个主机上的单个 Cassandra 节点

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

    此技术在此 blog 中的真实物理节点集群上进行了说明。 .该博客文章还展示了如果您不想使用主机网络但仍希望在每台主机上使用默认桥接网络,您可以使用哪些解决方法。

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

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

    关于Docker 中的 Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312735/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com