我正在尝试在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_start
和run
文件。这也无济于事。服务器作为新实例启动,而不加载旧数据。这是一个实际的问题,因为如果docker swarm
移动服务,生产数据可能会丢失。
docker swarm's
内部路由器除了其他接口之外,还从覆盖网络分配地址。我尝试使用localhost
,master.overlaynet
,overlaynet的IP地址,docker分配给容器的私有地址等作为Couchbase群集配置中的服务器地址。虽然群集服务器能够相互通信,但这在客户端连接方面造成了另一个问题。客户端通常连接到群集集群公开的地址/端口。这与群集节点地址不同。如果是python客户端,它会读取Couchbase群集服务器地址,如果在加入群集时将覆盖地址指定为服务器地址,则会尝试连接到该服务器。客户端超时,因为无法访问该地址。 yaml
文件中,以确保主节点将使用相同的地址。例如。 networks:
default:
ipv4_address: 172.20.x.xx
如果我可以获取一些有关Couchbase群模式设置的参考信息或有关如何处理IP地址更改的一些建议,将会很有帮助。
答案 0 :(得分:3)
我们遇到了相同的问题(couchbase服务器5.1.1),我们的临时解决方案是在新的docker bridge网络上使用固定IP。
networks:<br>
default:<br>
ipv4_address: 172.19.0.x
尽管这可行,但这并不是一个好的解决方案,因为如上所述,我们失去了自动缩放功能。在安装过程中我们学到了一些东西。只是让您知道:
您可以运行具有动态IP的单节点bedbase设置。您可以无限制地停止/重新启动该容器并更新沙发床服务器版本。
在添加第二个节点时,它最初也可以在设置过程中使用动态IP。您可以添加服务器并重新平衡群集。但是,当您停止/重新启动/以0/1比例缩放一个沙发型容器时,由于docker提供了新的IP(默认网络为10.0.0.x),它将不再启动。
更改“ ip”或“ ip_start”文件(/ opt / couchbase / var / lib / couchbase / config)以更新IP无效。在“ ip”和“ ip_start”中更改ip时,服务器将作为“新”服务器启动,但它仍然具有所有数据。因此,如果需要,您可以备份数据。因此,即使在“切换”到固定IP之后,也无法直接重新启动服务器,而需要cbbackup和cbrestore。
https://docs.couchbase.com/server/5.1/install/hostnames.html使用主机名的文档有点误导,因为这仅记录了如何在配置集群时“查找”新服务器。如果您指定主机名,无论如何,couchbase都会使用静态IP配置所有节点。
您可能会使用主机网络启动docker swarm,这可能是一个解决方案,但是我们在单个主机上运行其他容器的多个实例,因此我们希望避免使用该解决方案。
因此,请始终对节点/群集进行备份。我们总是使用cbbackup进行文件备份和集群备份。从文件备份还原的速度要快得多。
https://github.com/couchbase/docker/issues/82上有一个关于此问题的讨论,但这涉及将AWS用于静态IP,而我们没有。
我知道kubernetes的benchbase自治运算符,但现在我们还是想和docker swarm呆在一起。如果有人对此有更好的解决方案,请分享如何配置Couchbase以使用主机名。