在多主机 Docker 上创建 Hazelcast 集群的简单方法



我只有很短的时间使用 Docker,所以我不太清楚 Docker 网络。目前,我正在尝试将系统转换为使用docker进行部署。系统包含多个Java应用程序服务器:API服务器,聊天服务器,Web工作台,插件服务器...

我已经为每个服务器创建了docker-compose文件和其他Dockerfile。这是docker-compose.yml的一部分

version: '3.7'
services:
apiserver:
build:
context: ./apiserver
dockerfile: APIServerDockerfile
image: apiserver
container_name: apiserver
ports:
- "8000:8000"
tty: true
depends_on:
- mariadb
networks:
- chat_net
chatserver:
build:
context: ./chatserver
dockerfile: ChatserverDockerfile
image: chatserver
container_name: chatserver
ports:
- "8088:8088"
tty: true
depends_on:
- mariadb
networks:
- chat_net
mariadb:
image: mariadb/server:10.3
environment:
MYSQL_ROOT_PASSWORD: abc12345
ports:
- "3306:3306"
networks:
- chat_net
restart: always
container_name: mariadb10.3
volumes:
- ./mariadb:/var/lib/mysql
networks:
chat_net:
external: true

chat_net默认为桥接网络。系统需要分布式,这意味着apiserver和chatserver以及其他服务器可以安装在不同的物理服务器上。Apiserver 和聊天服务器共享 hazelcast 集群进行通信。通常每个服务器都有一个 hazelcast.xml其中包含一些信息,如下所示:

<group>
<name>CHAT_NET_OVERALL_V2</name>
<password>abc123!@#</password>
</group>
<network>
<port auto-increment="true" port-count="100">8701</port>
<join>
<multicast enabled="false"></multicast>
<tcp-ip enabled="true">
<member>127.0.0.1</member>
<member>15.23.24.56</member>
</tcp-ip>
</join>
</network>

Hazelcast 群集使用 ICP/IP 与服务器地址进行连接。现在使用 docker hazelcast 集群,而不是使用网桥网络创建的集群。如果我使用 network_mode:host,它们可以形成集群,但我们的情况需要多主机,所以这不是解决方案。在我的理解中,我需要一个覆盖网络。我试图做的是创建一个覆盖网络,但即使我在覆盖网络中添加服务器的 IP,也无法创建 hazelcast 集群,每个服务器都会启动其独立的 hazelcast。

所以有人请告诉我在多主机环境中创建 hazelcast 集群的最简单方法是什么?我知道还有其他一些服务,如Swarm或Kubernetes或Weavenet,但不确定哪一个最适合我的情况。谢谢。

以下文章中介绍了该主题:在非编排的 Docker 环境中配置 Hazelcast

基本上,如果没有第三方工具,您有两种选择:

  • 在 Docker 中使用网络模式host
  • 或将 Docker 端口映射 (-p 5701:5701( 与 Hazelcast 配置中的定义公共(外部(地址相结合 (-Dhazelcast.local.publicAddress=$DOCKER_HOST_IP:$DOCKER_HOST_PORT(

最新更新