Thank you for reading this post, don't forget to subscribe!
Hazelcast IMDG представляет собой In-Memory Data Grid решение с открытым исходным кодом на основе Java. Hazelcast — также название компании, разрабатывающей продукт.
Hazelcast IMDG работает как вычислительная платформа, которая управляет данными в операционной памяти и организует обработку в параллельном исполнении для достижения наибольшей скорости и лёгкости масштабирования.
Запустим её на 2х нодах.
Образа должны быть доступны со всех нод.
Имеется Dockerfile:
cat Dockerfile
FROM hazelcast/hazelcast:latest
# Adding custom hazelcast.xml
ADD hazelcast.xml /opt/hazelcast
ENV JAVA_OPTS -Dhazelcast.config=/opt/hazelcast/hazelcast.xml
конфиг hazelcast.xml
в него мы добавили минимальный набор, а именно тачки на которых будет запущен hazelcast. Отметим, что он использует хостовую сеть, так как не умеет работать в докеровской, а service discovery прикрутить не удалось
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
cat hazelcast.xml <hazelcast xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.12.xsd"> <management-center enabled="${hazelcast.mancenter.enabled}">${hazelcast.mancenter.url}</management-center> <network> <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>192.168.1.170</member> <member>192.168.1.171</member> </tcp-ip> </join> </network> </hazelcast> |
[/codesyntax]
собираем образ:
docker build -t hazelcastimage
выкачиваем образ менеджера
docker pull hazelcast/management-center
перетегируем его
docker tag hazelcast/management-center hazelcast-manager
сам стек выглядит следующим образом:
hazelcast.yml
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
cat hazelcast.yml version: '3.4' services: hazelcast_1: image: hazelcastimage hostname: hazelcast1 ports: - target: 5701 published: 5701 protocol: tcp mode: host environment: - JAVA_OPTS="-Dhazelcast.local.publicAddress=192.168.1.170:5701" - MANCENTER_URL=http://hazelcast-manager.test.ru/hazelcast-mancenter configs: - source: hazelcastxml target: /opt/hazelcast/hazelcast.xml deploy: mode: replicated replicas: 1 placement: constraints: [node.hostname == node1] hazelcast_2: image: hazelcastimage hostname: hazelcast2 ports: - target: 5701 published: 5701 protocol: tcp mode: host environment: - JAVA_OPTS="-Dhazelcast.local.publicAddress=192.168.1.171:5701" - MANCENTER_URL=http://hazelcast-manager.test.ru/hazelcast-mancenter configs: - source: hazelcastxml target: /opt/hazelcast/hazelcast.xml deploy: mode: replicated replicas: 1 placement: constraints: [node.hostname == node2] hazelcast_manager: image: hazelcast-manager hostname: hazelcast-manager networks: - proxy volumes: - hazelcat-manager:/data deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager labels: - com.df.notify=true - com.df.serviceDomain=hazelcast-manager.test.ru - com.df.port=8080 configs: hazelcastxml: file: ./hazelcast.xml volumes: hazelcat-manager: driver: "rexray/rbd:latest" driver_opts: size: 1 networks: proxy: external: true |
[/codesyntax]
запускаем:
docker stack deploy -c hazelcast.yml hazelcast
как стартанёт, проверяем:
http://hazelcast-manager.test.ru/hazelcast-mancenter