使用replica参数部署在Docker Swarm上时,不能解析RabbitMQ群集的主机名

使用replica参数部署在Docker Swarm上时,不能解析RabbitMQ群集的主机名,rabbitmq,docker-swarm,haproxy,consul,Rabbitmq,Docker Swarm,Haproxy,Consul,我使用Docker Swarm部署3个RabbitMQ和Concur实例进行对等发现 版本:“3.7” 服务: rabbitmq-1: 图片:rabbitmq:3.8.9-1 主机名:“rabbitmq-1” 环境: -RABBITMQ\u ERLANG\u COOKIE=“机密\u COOKIE” 网络: -生产网 配置: -来源:rabbitmq配置 目标:/etc/rabbitmq/rabbitmq.conf -来源:rabbitmq插件配置 目标:/etc/rabbitmq/enable

我使用Docker Swarm部署3个RabbitMQ和Concur实例进行对等发现

版本:“3.7”
服务:
rabbitmq-1:
图片:rabbitmq:3.8.9-1
主机名:“rabbitmq-1”
环境:
-RABBITMQ\u ERLANG\u COOKIE=“机密\u COOKIE”
网络:
-生产网
配置:
-来源:rabbitmq配置
目标:/etc/rabbitmq/rabbitmq.conf
-来源:rabbitmq插件配置
目标:/etc/rabbitmq/enabled\u插件
卷数:
-/shared/rabbitmq/1/config:/etc/rabbitmq
-/shared/rabbitmq/1/data:/var/lib/rabbitmq
部署:
副本:1份
rabbitmq-2:
图片:rabbitmq:3.8.9-1
主机名:“rabbitmq-2”
环境:
-RABBITMQ\u ERLANG\u COOKIE=“机密\u COOKIE”
网络:
-生产网
配置:
-来源:rabbitmq配置
目标:/etc/rabbitmq/rabbitmq.conf
-来源:rabbitmq插件配置
目标:/etc/rabbitmq/enabled\u插件
卷数:
-/shared/rabbitmq/2/config:/etc/rabbitmq
-/shared/rabbitmq/2/data:/var/lib/rabbitmq
部署:
副本:1份
rabbitmq-3:
图片:rabbitmq:3.8.9-1
主机名:“rabbitmq-3”
环境:
-RABBITMQ\u ERLANG\u COOKIE=“机密\u COOKIE”
网络:
-生产网
配置:
-来源:rabbitmq配置
目标:/etc/rabbitmq/rabbitmq.conf
-来源:rabbitmq插件配置
目标:/etc/rabbitmq/enabled\u插件
卷数:
-/shared/rabbitmq/3/config:/etc/rabbitmq
-/shared/rabbitmq/3/data:/var/lib/rabbitmq
部署:
副本:1份
网络:
领事网:
外部:正确
名称:prod net
配置:
rabbitmq配置:
外部:正确
rabbitmq插件配置:
外部:正确
RabbitMQ通过其主机名向Consor注册自身,以便节点可以相互发现。因此,必须在所有节点上解析所有主机名。在上面的示例中,我对主机名和服务名使用相同的值来实现这一点。但是我想使用一种更紧凑的方式来表示集群,方法是使用
replicas:3
参数

版本:“3.7”
服务:
rabbitmq:
图片:rabbitmq:3.8.9-1
主机名:“rabbitmq-{{.Task.Slot}”
网络:
-生产网
配置:
-来源:rabbitmq配置
目标:/etc/rabbitmq/rabbitmq.conf
-来源:rabbitmq插件配置
目标:/etc/rabbitmq/enabled\u插件
部署:
副本:3份
重新启动\u策略:
条件:任何
网络:
产品网络:
外部:正确
配置:
rabbitmq配置:
外部:正确
rabbitmq插件配置:
外部:正确
不幸的是,在这种情况下,docker DNS不再解析主机名,节点也无法看到彼此。有没有办法做到这一点

编辑。1:

在rabbitmq配置中使用这些选项会出现以下错误:

cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
cluster_formation.dns.hostname = tasks.rabbitmq
或使用DNS对等发现:

#DNS Peer Discovery
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
cluster_formation.dns.hostname = tasks.rabbitmq

您可以共享完整的
/etc/rabbitmq/rabbitmq.conf
内容或与群集配置相关的完整内容吗?@rok添加了配置。您可以共享完整的
/etc/rabbitmq/rabbitmq.conf
内容或与群集配置相关的完整内容吗?@rok添加了配置。
# Credentials
default_user = admin
default_pass = Pa$$w0rd1

loopback_users.admin = false
vm_memory_high_watermark.absolute = 1024MiB
disk_free_limit.absolute = 5GB
loopback_users.guest = false

# TLS Support in RabbitMQ
listeners.ssl.default = 5671

# Disables non-TLS listeners, only TLS-enabled clients will be able to connect
listeners.tcp = none

ssl_options.cacertfile = /etc/rabbitmq/ca_certificate.pem
ssl_options.certfile   = /etc/rabbitmq/server_certificate.pem
ssl_options.keyfile    = /etc/rabbitmq/server_key.pem
ssl_options.password   = Pa$$phr@se
ssl_options.verify     = verify_peer
ssl_options.fail_if_no_peer_cert = true

# TLS Support in RabbitMQ UI
management.ssl.port       = 15671
management.ssl.cacertfile = /etc/rabbitmq/ca_certificate.pem
management.ssl.certfile   = /etc/rabbitmq/server_certificate.pem
management.ssl.keyfile    = /etc/rabbitmq/server_key.pem
management.ssl.password   = Pa$$phr@se
management.ssl.verify     = verify_none
management.ssl.fail_if_no_peer_cert = false

management.ssl.honor_cipher_order   = true
management.ssl.honor_ecc_order      = true
management.ssl.client_renegotiation = false
management.ssl.secure_renegotiate   = true

cluster_partition_handling = autoheal

# Consul peer discovery
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_consul

# Consul host (hostname or IP address)
cluster_formation.consul.host = consul_client

# Service name (as registered in Consul) defaults to "rabbitmq"
cluster_formation.consul.svc = rabbitmq

# Compute service address (if not specify it below) 
cluster_formation.consul.svc_addr_auto = true
cluster_formation.consul.use_longname = true
cluster_formation.consul.svc_ttl = 50
cluster_formation.consul.deregister_after = 100
cluster_formation.node_cleanup.only_log_warning = true
#DNS Peer Discovery
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
cluster_formation.dns.hostname = tasks.rabbitmq