我只有很短的时间来使用Docker,所以我对Docker网络不太清楚。目前,我正在尝试将系统转换为使用docker进行部署。该系统包含多个Java应用程序服务器:API服务器,聊天服务器,Web Workbench,插件服务器...
我已经为每个服务器创建了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和chatserver共享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,但不确定哪个服务最适合我的情况。非常感谢。
下面的文章中对该主题进行了说明:Configuring Hazelcast in Non-Orchestrated Docker Environments
基本上,没有第三方工具,您有两个选择:
host
-p 5701:5701
)与在Hazelcast配置(-Dhazelcast.local.publicAddress=$DOCKER_HOST_IP:$DOCKER_HOST_PORT
)中定义的公共(外部)地址组合