【问题标题】:Hazelcast node not discovering other node when use docker stack deployHazelcast节点在使用docker stack deploy时没有发现其他节点
【发布时间】:2019-05-27 06:57:56
【问题描述】:

我需要在 docker 环境中为具有多个复制因子的 Web 应用程序设置 hazelcast,并使用 docker swarm 使用覆盖网络在多主机中部署应用程序。

我面临的问题是服务无法在 swarm 模式下发现其他节点,但在 docker compose 中工作正常。我正在使用以下配置进行 hazelcast 配置。

<port auto-increment="true">5701</port>
<join>
  <multicast enabled="false">
    <multicast-group>224.2.2.3</multicast-group>
    <multicast-port>54327</multicast-port>
  </multicast>
  <tcp-ip enabled="true">
    <member>hazelcast-master</member>
  </tcp-ip>

</join>

这里 hazelcast-master 是我在 docker 中的服务名称。

任何帮助将不胜感激

【问题讨论】:

  • 在应用程序启动日志中:无法解析主机名“hazelcast-master”。请确保主机有效且可访问

标签: java spring docker hazelcast


【解决方案1】:

您是如何配置 docker 网络的?你的 DNS 服务器中有 hazelcast-master 吗?默认情况下,docker 使用与主机相同的 DNS,但是如果您将 hazelcast-master 放在 /etc/hosts 中,您的 docker 访客将看不到它,也无法使用它。使用主机的 IP 地址,输入完整的主机域名(来自 DNS)或在运行 docker 容器时使用 --add-host。

【讨论】:

  • 我使用了运行 docker-compose 时创建的默认网络。 hazelcast-master 只是一个普通的 docker 容器。我正在使用 docker-compose 来部署应用程序,所以 docker-compose 中是否有任何标签,我可以在其中添加主机条目
  • 粘贴你的 docker-compose.yml。另外,运行以下命令 docker exec -ti ping hazelcast-master 并查看名称是否已解析。
  • 我在 docker-compose 中使用了以下配置:版本:'3.7' 服务:hazelcast-master: build: context: context/trade-hazelcast 图像:hazelcast 端口:-“5701:5701”hazelcast -workers: build: context: context/trade-hazelcast image: hazelcast depends_on: - hazelcast-master # deploy: # mode: replicated # replicas: 1 ports: - "5702:5701"
【解决方案2】:

我认为多播在 Docker Swarm 中可能不起作用(至少开箱即用)。阅读thisthis。 Docker Compose 之所以有效,只是因为它部署在一台主机上。

您可以尝试使用Hazelcast Docker Swarm Discovery Plugin。除此之外,另一个选项是静态 TCP-IP 配置,这在 Docker Swarm 中可能没有多大意义。

【讨论】:

  • 我尝试使用发现进行设置,但出现异常:原因:com.spotify.docker.client.exceptions.DockerException: java.util.concurrent.ExecutionException: com.spotify.docker.client。 shaded.javax.ws.rs.ProcessingException:com.spotify.docker.client.shaded.org.apache.http.conn.HttpHostConnectException:连接到 10.101.129.51:2375 [/10.101.129.51] 失败:连接超时(连接超时)我试图增加超时但在 docker 容器中没有运气,但是当我在容器外运行测试代码时它可以工作。
  • 他不使用多播来进行发现。他正在使用带有 tcp ip config 的枚举成员,如果 docker-compose.yml 正确,他应该能够连接到其他主机。
  • 我可以使用 Hazelcast Docker Swarm Discovery Plugin 进行连接,但为此我必须执行以下步骤: 1. 将 docker daemon socker 默认更改为 tcp 2. 打开 docker swarm 端口并允许来自 docker 和 worker 使用 ucf 的流量。我假设,如果我启用了 tcp 套接字,那么如果我在成员列表中指定服务名称,发现应该会自动发生。我试过这个但没有奏效。我想我在这里遗漏了一些东西。
猜你喜欢
  • 2019-06-14
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多