在Docker集群环境中部署Couchbase

时间:2019-07-30 17:37:56

标签: docker couchbase docker-swarm docker-swarm-mode

我正在尝试在Docker集群环境中部署Couchbase社区版。我遵循建议的by Arun Gupta步骤,但是由于Couchbase没有主/从模型的概念,所以我不确定是否需要主-工人模型。

以下是我遇到的问题。我想知道是否有人能够以集群模式成功运行Couchbase。

  • 每次重新启动服务时,Docker swarm都会分配不同的IP地址。有时,泊坞窗将服务移至新节点,该节点再次分配不同的IP地址。如果找到新的IP地址,则显示that Couchbase doesn't start。 (日志显示"address on which the service is configured is not up. Waiting for the interface to be brought up")。我正在使用主机安装的卷作为数据文件夹(/opt/couchase/var),以在重新启动后持久保存数据。

  • 我尝试读取内部使用的重叠网络地址,并在容器内的ip脚本中更新ip_startrun文件。这也无济于事。服务器作为新实例启动,而不加载旧数据。这是一个实际的问题,因为如果docker swarm移动服务,生产数据可能会丢失。

  • docker swarm's内部路由器除了其他接口之外,还从覆盖网络分配地址。我尝试使用localhostmaster.overlaynet,overlaynet的IP地址,docker分配给容器的私有地址等作为Couchbase群集配置中的服务器地址。虽然群集服务器能够相互通信,但这在客户端连接方面造成了另一个问题。客户端通常连接到群集集群公开的地址/端口。这与群集节点地址不同。如果是python客户端,它会读取Couchbase群集服务器地址,如果在加入群集时将覆盖地址指定为服务器地址,则会尝试连接到该服务器。客户端超时,因为无法访问该地址。
  • 我也许可以将网络地址约束添加到yaml文件中,以确保主节点将使用相同的地址。例如。
    networks:
        default:
           ipv4_address: 172.20.x.xx
    上面的方法可能不适用于工作节点,因为这会影响根据负载/增长来扩展工作节点的能力。
  • 在此模型(主服务器/工人)中,如果主节点发生故障,如何选举工人为领导者?对于集群环境中的Couchbase集群,母版/工作人员是正确的方法吗?

如果我可以获取一些有关Couchbase群模式设置的参考信息或有关如何处理IP地址更改的一些建议,将会很有帮助。

1 个答案:

答案 0 :(得分:3)

我们遇到了相同的问题(couchbase服务器5.1.1),我们的临时解决方案是在新的docker bridge网络上使用固定IP。

networks:<br>
    default:<br>
        ipv4_address: 172.19.0.x

尽管这可行,但这并不是一个好的解决方案,因为如上所述,我们失去了自动缩放功能。在安装过程中我们学到了一些东西。只是让您知道:

  1. 您可以运行具有动态IP的单节点bedbase设置。您可以无限制地停止/重新启动该容器并更新沙发床服务器版本。

  2. 在添加第二个节点时,它最初也可以在设置过程中使用动态IP。您可以添加服务器并重新平衡群集。但是,当您停止/重新启动/以0/1比例缩放一个沙发型容器时,由于docker提供了新的IP(默认网络为10.0.0.x),它将不再启动。

  3. 更改“ ip”或“ ip_start”文件(/ opt / couchbase / var / lib / couchbase / config)以更新IP无效。在“ ip”和“ ip_start”中更改ip时,服务器将作为“新”服务器启动,但它仍然具有所有数据。因此,如果需要,您可以备份数据。因此,即使在“切换”到固定IP之后,也无法直接重新启动服务器,而需要cbbackup和cbrestore。

  4. https://docs.couchbase.com/server/5.1/install/hostnames.html使用主机名的文档有点误导,因为这仅记录了如何在配置集群时“查找”新服务器。如果您指定主机名,无论如何,couchbase都会使用静态IP配置所有节点。

  5. 您可能会使用主机网络启动docker swarm,这可能是一个解决方案,但是我们在单个主机上运行其他容器的多个实例,因此我们希望避免使用该解决方案。

因此,请始终对节点/群集进行备份。我们总是使用cbbackup进行文件备份和集群备份。从文件备份还原的速度要快得多。

https://github.com/couchbase/docker/issues/82上有一个关于此问题的讨论,但这涉及将AWS用于静态IP,而我们没有。

我知道kubernetes的benchbase自治运算符,但现在我们还是想和docker swarm呆在一起。如果有人对此有更好的解决方案,请分享如何配置Couchbase以使用主机名。