在多主机上创建 Hazelcast 集群的简单方法 Docker
Simple way to create Hazelcast cluster on Multi-hosts Docker
我使用 Docker 的时间很短,所以我对 docker 网络不是很清楚。目前我正在尝试将系统转换为使用 docker 进行部署。系统包含多个Java应用服务器:API服务器、聊天服务器、WebWorkbench、插件服务器...
我已经为每个服务器创建了 docker-compose 文件和其他 Docker 文件。这是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
基本上,如果没有第三方工具,您有两个选择:
- 要么在Docker
中使用网络模式host
- 或将 Docker 端口映射 (
-p 5701:5701
) 与在 Hazelcast 配置 (-Dhazelcast.local.publicAddress=$DOCKER_HOST_IP:$DOCKER_HOST_PORT
) 中定义 public(外部)地址相结合
我使用 Docker 的时间很短,所以我对 docker 网络不是很清楚。目前我正在尝试将系统转换为使用 docker 进行部署。系统包含多个Java应用服务器:API服务器、聊天服务器、WebWorkbench、插件服务器...
我已经为每个服务器创建了 docker-compose 文件和其他 Docker 文件。这是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
基本上,如果没有第三方工具,您有两个选择:
- 要么在Docker 中使用网络模式
- 或将 Docker 端口映射 (
-p 5701:5701
) 与在 Hazelcast 配置 (-Dhazelcast.local.publicAddress=$DOCKER_HOST_IP:$DOCKER_HOST_PORT
) 中定义 public(外部)地址相结合
host