【问题标题】:Deploying couchbase in a docker swarm environment在 docker swarm 环境中部署 couchbase
【发布时间】:2019-07-30 17:37:56
【问题描述】:

我正在尝试在 docker swarm 环境中部署 couchbase 社区版。我按照by Arun Gupta 建议的步骤进行操作,但我不确定是否需要主从模型,因为 Couchbase 没有主/从模型的概念。

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

  • Docker swarm 每次重启服务时都会分配不同的 IP 地址。有时,docker 将服务移动到一个新节点,该节点再次分配不同的 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) 以在重新启动时保留数据。

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

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

如果我能获得一些关于 Couchbase swarm 模式设置的参考资料或关于如何处理 IP 地址更改的一些建议,那将会很有帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    虽然这可行,但这不是一个好的解决方案,因为我们如上所述松散了自动缩放。我们在设置过程中学到了一些东西。只是让您知道:

    1. 您可以使用动态 IP 运行单节点沙发底座设置。您可以无限制地停止/重新启动此容器并更新 couchbase-server 版本。

    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 的 couchbase 自治操作员,但现在我们想继续使用 docker swarm。如果有人对此有更好的解决方案,如何配置 couchbase 以使用主机名,请分享。

    【讨论】:

    • 感谢您的更新。我在 docker swarm 中使用 Couchbase 的经验与上述相同。我一直在尝试从覆盖网络关联一个静态 IP,因为这是其他服务连接所需要的。看来这也是不允许的。我会试试你对桥接网络静态 IP 的建议。
    • 我们现在通过以下方法运行它,您至少可以为大多数容器保持扩展: 1. 从堆栈部署文件中删除所有 couchbase 容器。将所有其他容器留在其中。 2. 创建一个可附加的覆盖网络: 3. 使用 docker run 在 docker stack 外部启动 couchbase >
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多