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

问题描述 投票:0回答:1

我只有很短的时间来使用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,但不确定哪个服务最适合我的情况。非常感谢。

docker docker-compose docker-swarm hazelcast
1个回答
0
投票

下面的文章中对该主题进行了说明:Configuring Hazelcast in Non-Orchestrated Docker Environments

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

  • 都使用Docker中的网络模式host
  • 或将Docker端口映射(-p 5701:5701)与在Hazelcast配置(-Dhazelcast.local.publicAddress=$DOCKER_HOST_IP:$DOCKER_HOST_PORT)中定义的公共(外部)地址组合
© www.soinside.com 2019 - 2024. All rights reserved.