Cassandra 卡桑德拉·里多克
我计划使用docker容器部署几个cassandra节点。如果每个节点都在一个单独的docker容器中,我还可以用这些节点构建集群吗Cassandra 卡桑德拉·里多克,cassandra,docker,Cassandra,Docker,我计划使用docker容器部署几个cassandra节点。如果每个节点都在一个单独的docker容器中,我还可以用这些节点构建集群吗 我想我可能会遇到很多问题,因为打开所有必要的端口可能很困难,因为其中一些端口是随机的。请所有读者小心,,问题和选择的答案在许多层面上都是错误的。让我解释一下原因 为什么这个问题是错误的 首先,端口不是必须的,而且在大多数情况下,端口不是随机的。容器公开的端口在Dockerfile中的EXPOSE说明中定义 只有当您决定使用-p选项将这些端口发布到主机时,才会在主机
我想我可能会遇到很多问题,因为打开所有必要的端口可能很困难,因为其中一些端口是随机的。请所有读者小心,,问题和选择的答案在许多层面上都是错误的。让我解释一下原因 为什么这个问题是错误的 首先,端口不是必须的,而且在大多数情况下,端口不是随机的。容器公开的端口在Dockerfile中的
EXPOSE
说明中定义
只有当您决定使用-p
选项将这些端口发布到主机时,才会在主机上随机选择这些端口。但通常使用小写的-p
选项手动映射端口。只有在希望从其他主机调用容器时,才需要在主机上发布端口。如果您决定在多台主机上创建Cassandra群集,这通常非常有用
问题还未能指定容器是位于同一节点上,还是分布在多个节点上。对于Docker来说,实现这些是完全不同的事情
为什么答案是错的
有一个码头中心。如果有官方形象,你通常最好试试
建议中的非官方形象有几个缺陷。我还没有测试过它,但我可以从它的Dockerfile和init.sh脚本猜测:
- 它只支持10个容器(作者对此进行了解释)
- 它依赖于容器链接,该链接仅适用于同一主机上的容器,但现在已被弃用
- 它没有必要的选项来配置种子、广播IP等。。在不同的主机上部署容器时,您将需要这些
- 它没有数据的装入点。这意味着,如果您有10个容器,它们必须写入同一个磁盘,这将破坏IO性能。Cassandra的优势在于它不会进行随机读取以避免磁盘寻道时间
- 使用,并在每个容器上安装一个单独的磁盘
- 创建并将这些容器放在同一个网络上,以便它们可以相互通信,甚至可以自动解析主机名李>
- 创建第一个容器后,将CASSANDRA_SEEDS变量传递给每个后续容器,以通知它集群中要加入的任何其他容器的IP或主机名
--net=host
,使它们使用主机的网络堆栈,而不是将它们放在网桥网络上。这将使您的容器在网络方面表现得像主机一样。它们将具有与其主机相同的IP,并且可以被其他主机调用
本文在实际的物理节点集群上演示了该技术。如果您不想使用主机网络,但仍然希望在每个主机上使用默认网桥网络,那么博客文章还将展示您可以使用的解决方法
多个主机-每个主机上有多个Cassandra节点
实现这一点的最简单方法是使用。这将使所有节点上的所有容器都位于同一虚拟网络上。然后他们可以像在同一个节点上一样透明地相互交谈。但这需要使用更高级的Docker工具,并部署key value store服务。我同意最好尝试官方映像,但在我回答问题时没有,这是最流行的。我没有尝试过,但我在Docker.io上找到了映像,它声称可以作为集群运行。