我在码头群中有三个节点(所有节点都是管理员),我想在这三个节点上运行动物园管理员集群。
我的码头-撰写文件
version: '3.8'
services:
zookeeper1:
image: 'bitnami/zookeeper:latest'
hostname: "zookeeper-1"
ports:
- '2181'
- '2888'
- '3888'
volumes:
- "zookeeper-1:/opt/bitnami/zookeeper/conf"
environment:
- ZOO_SERVER_ID=1
- ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888
- ALLOW_ANONYMOUS_LOGIN=yes
networks:
- network_test
zookeeper2:
image: 'bitnami/zookeeper:latest'
hostname: "zookeeper-2"
ports:
- '2181'
- '2888'
- '3888'
volumes:
- "zookeeper-2:/opt/bitnami/zookeeper/conf"
environment:
- ZOO_SERVER_ID=2
- ZOO_SERVERS=zookeeper-1:2888:3888,0.0.0.0:2888:3888,zookeeper-3:2888:3888
- ALLOW_ANONYMOUS_LOGIN=yes
networks:
- network_test
zookeeper3:
image: 'bitnami/zookeeper:latest'
hostname: "zookeeper-3"
ports:
- '2181'
- '2888'
- '3888'
volumes:
- "zookeeper-3:/opt/bitnami/zookeeper/conf"
environment:
- ZOO_SERVER_ID=3
- ZOO_SERVERS=zookeeper-1:2888:3888,zookeeper-2:2888:3888,0.0.0.0:2888:3888
- ALLOW_ANONYMOUS_LOGIN=yes
networks:
- network_test我使用docker堆栈部署来运行,我的期望是每个动物园管理员都会在不同的节点上运行,但是有时一个节点会启动两个动物园管理员节点。
对接堆栈部署可以具有此功能吗??
谢谢
发布于 2022-04-07 10:10:40
若要在Docker群集中的每个可用节点上启动服务,需要在global模式下运行该服务。
但是,在您的示例中,由于每个Zookeeper的特定卷,您可以使用placement constraints来控制可以分配给服务的节点。因此,您可以将以下部分添加到每个服务中,这将允许每个实例在不同的节点上运行:
services:
...
zookeeper-1:
...
deploy:
placement:
constraints:
- node.hostname==node1发布于 2022-04-07 10:24:37
如果将动物园管理员卷到一个服务中,那么可以使用max_replicas_per_node。
如下所示:
version: "3.9"
volumes:
zookeeper:
name: '{{index .Service.Labels "com.docker.stack.namespace"}}_zookeeper-{{.Task.Slot}}'
services:
zookeeper:
image: zookeeper:latest
hostname: zoo{{.Task.Slot}}
volumes:
- zookeeper:/conf
environment:
ZOO_MY_ID: '{{.Task.Slot}}'
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
ALLOW_ANONYMOUS_LOGIN: 'yes'
ports:
- 2181:2181
deploy:
replicas: 3
placement:
max_replicas_per_node: 1
constraints:
- node.role==worker我已经使用码头官员,而不是为演示目的的比特尼图像。
服务模板用于为每个副本分配一个表单“zoo1”.“zoo3”的主机名,这样就可以使用一个带有3个副本的服务,而不是3个服务。这也意味着仅发布端口2181,dockers服务网格将自动将动物园管理员客户端负载平衡到动物园管理员实例。
由于最初的问题包括每个服务的唯一卷,服务模板参数再次用于分配表单"stack_zookeeper_1“的卷名。但是,这是一个配置卷,可能需要共享吗?此外,当动物园管理员任务副本在群节点之间迁移时,如果使用默认卷驱动程序(本地)而不是群感知驱动程序,则每个群集节点上的卷将被创建为空。
最后,replicas和max_replicas_per_node确保启动3个动物园任务,而不共享节点。
https://stackoverflow.com/questions/71779828
复制相似问题