Rabbitmq示例正在崩溃

dffbzjpn  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(183)

我正在使用docker-compose.yml文件在一个主机上运行3个RabbitMQ示例。在mac上运行docker,当我运行docker-compose up时,我发现集群中的示例的erlang cookie不匹配。如果您需要任何其他信息,请告诉我。

version: '3'

services:

  rabbitmq1:
    image: rabbitmq:3.8.34-management
    hostname: rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=12345
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      - RABBITMQ_DEFAULT_VHOST=/

  rabbitmq2:
    image: rabbitmq:3.8.34-management
    hostname: rabbitmq2
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=12345
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      - RABBITMQ_DEFAULT_VHOST=/
    volumes:
      - ./cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /usr/local/bin/cluster-entrypoint.sh

  rabbitmq3:
    image: rabbitmq:3.8.34-management
    hostname: rabbitmq3
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=12345
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      - RABBITMQ_DEFAULT_VHOST=/
    volumes:
      - ./cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /usr/local/bin/cluster-entrypoint.sh

  haproxy:
    image: haproxy:1.7
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    depends_on:
      - rabbitmq1
      - rabbitmq2
      - rabbitmq3
    ports:
      - 15672:15672
      - 5672:5672

下面是我的cluster-entrypoint.sh文件


# !/bin/bash

set -e

# Start RMQ from entry point.

# This will ensure that environment variables passed

# will be honored

/usr/local/bin/docker-entrypoint.sh rabbitmq-server -detached

# Do the cluster dance

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1

# Stop the entire RMQ server. This is done so that we

# can attach to it again, but without the -detached flag

# making it run in the forground

rabbitmqctl stop

# Wait a while for the app to really stop

sleep 2s

# Start it

rabbitmq-server

对不起,日志太多。我使用了RabbitMQ:3.8.34映像,集群中所有示例的Erlang cookie都不相同,RabbitMQ1启动,但其他示例没有启动。
下面是日志:

haproxy_1    | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -db -f /usr/local/etc/haproxy/haproxy.cfg -Ds 
rabbitmq1_1  | 
rabbitmq1_1  | warning: /var/lib/rabbitmq/.erlang.cookie contents do not match RABBITMQ_ERLANG_COOKIE
rabbitmq1_1  | 
rabbitmq1_1  | WARNING: '/var/lib/rabbitmq/.erlang.cookie' was populated from '$RABBITMQ_ERLANG_COOKIE', which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq2_1  | 
rabbitmq2_1  | warning: /var/lib/rabbitmq/.erlang.cookie contents do not match RABBITMQ_ERLANG_COOKIE
rabbitmq2_1  | 
rabbitmq2_1  | WARNING: '/var/lib/rabbitmq/.erlang.cookie' was populated from '$RABBITMQ_ERLANG_COOKIE', which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq3_1  | 
rabbitmq3_1  | warning: /var/lib/rabbitmq/.erlang.cookie contents do not match RABBITMQ_ERLANG_COOKIE
rabbitmq3_1  | 
rabbitmq3_1  | WARNING: '/var/lib/rabbitmq/.erlang.cookie' was populated from '$RABBITMQ_ERLANG_COOKIE', which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq1_1  | WARNING: 'docker-entrypoint.sh' generated/modified the RabbitMQ configuration file, which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq1_1  | 
rabbitmq1_1  | Generated end result, for reference:
rabbitmq1_1  | ------------------------------------
rabbitmq1_1  | loopback_users.guest = false
rabbitmq1_1  | listeners.tcp.default = 5672
rabbitmq1_1  | default_pass = guest
rabbitmq1_1  | default_user = guest
rabbitmq1_1  | default_vhost = /
rabbitmq1_1  | management.tcp.port = 15672
rabbitmq1_1  | ------------------------------------
rabbitmq3_1  | WARNING: 'docker-entrypoint.sh' generated/modified the RabbitMQ configuration file, which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq3_1  | 
rabbitmq3_1  | Generated end result, for reference:
rabbitmq3_1  | ------------------------------------
rabbitmq3_1  | loopback_users.guest = false
rabbitmq3_1  | listeners.tcp.default = 5672
rabbitmq3_1  | default_pass = guest
rabbitmq3_1  | default_user = guest
rabbitmq3_1  | default_vhost = /
rabbitmq3_1  | management.tcp.port = 15672
rabbitmq3_1  | ------------------------------------
rabbitmq2_1  | WARNING: 'docker-entrypoint.sh' generated/modified the RabbitMQ configuration file, which will no longer happen in 3.9 and later! (https://github.com/docker-library/rabbitmq/pull/424)
rabbitmq2_1  | 
rabbitmq2_1  | Generated end result, for reference:
rabbitmq2_1  | ------------------------------------
rabbitmq2_1  | loopback_users.guest = false
rabbitmq2_1  | listeners.tcp.default = 5672
rabbitmq2_1  | default_pass = guest
rabbitmq2_1  | default_user = guest
rabbitmq2_1  | default_vhost = /
rabbitmq2_1  | management.tcp.port = 15672
rabbitmq2_1  | ------------------------------------
rabbitmq3_1  | RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
rabbitmq3_1  | Stopping rabbit application on node rabbit@rabbitmq3 ...
rabbitmq3_1  | Error: unable to perform an operation on node 'rabbit@rabbitmq3'. Please see diagnostics information and suggestions below.
rabbitmq3_1  | 
rabbitmq3_1  | Most common reasons for this are:
rabbitmq3_1  | 
rabbitmq3_1  |  * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
rabbitmq3_1  |  * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
rabbitmq3_1  |  * Target node is not running
rabbitmq3_1  | 
rabbitmq3_1  | In addition to the diagnostics info below:
rabbitmq3_1  | 
rabbitmq3_1  |  * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
rabbitmq3_1  |  * Consult server logs on node rabbit@rabbitmq3
rabbitmq3_1  |  * If target node is configured to use long node names, don't forget to use --longnames with CLI tools
rabbitmq3_1  | 
rabbitmq3_1  | DIAGNOSTICS
rabbitmq3_1  | ===========
rabbitmq3_1  | 
rabbitmq3_1  | attempted to contact: [rabbit@rabbitmq3]
rabbitmq3_1  | 
rabbitmq3_1  | rabbit@rabbitmq3:
rabbitmq3_1  |   * connected to epmd (port 4369) on rabbitmq3
rabbitmq3_1  |   * epmd reports: node 'rabbit' not running at all
rabbitmq3_1  |                   no other nodes on rabbitmq3
rabbitmq3_1  |   * suggestion: start the node
rabbitmq3_1  | 
rabbitmq3_1  | Current node details:
rabbitmq3_1  |  * node name: 'rabbitmqcli-797-rabbit@rabbitmq3'
rabbitmq3_1  |  * effective user's home directory: /var/lib/rabbitmq
rabbitmq3_1  |  * Erlang cookie hash: gnzLDuqKcGxMNKFokfhOew==
rabbitmq3_1  | 
docker-rabbitmq-cluster_rabbitmq3_1 exited with code 69
rabbitmq2_1  | RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
rabbitmq2_1  | Stopping rabbit application on node rabbit@rabbitmq2 ...
rabbitmq2_1  | Error: unable to perform an operation on node 'rabbit@rabbitmq2'. Please see diagnostics information and suggestions below.
rabbitmq2_1  | 
rabbitmq2_1  | Most common reasons for this are:
rabbitmq2_1  | 
rabbitmq2_1  |  * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
rabbitmq2_1  |  * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
rabbitmq2_1  |  * Target node is not running
rabbitmq2_1  | 
rabbitmq2_1  | In addition to the diagnostics info below:
rabbitmq2_1  | 
rabbitmq2_1  |  * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
rabbitmq2_1  |  * Consult server logs on node rabbit@rabbitmq2
rabbitmq2_1  |  * If target node is configured to use long node names, don't forget to use --longnames with CLI tools
rabbitmq2_1  | 
rabbitmq2_1  | DIAGNOSTICS
rabbitmq2_1  | ===========
rabbitmq2_1  | 
rabbitmq2_1  | attempted to contact: [rabbit@rabbitmq2]
rabbitmq2_1  | 
rabbitmq2_1  | rabbit@rabbitmq2:
rabbitmq2_1  |   * connected to epmd (port 4369) on rabbitmq2
rabbitmq2_1  |   * epmd reports: node 'rabbit' not running at all
rabbitmq2_1  |                   no other nodes on rabbitmq2
rabbitmq2_1  |   * suggestion: start the node
rabbitmq2_1  | 
rabbitmq2_1  | Current node details:
rabbitmq2_1  |  * node name: 'rabbitmqcli-568-rabbit@rabbitmq2'
rabbitmq2_1  |  * effective user's home directory: /var/lib/rabbitmq
rabbitmq2_1  |  * Erlang cookie hash: gnzLDuqKcGxMNKFokfhOew==
rabbitmq2_1  | 
docker-rabbitmq-cluster_rabbitmq2_1 exited with code 69
rabbitmq1_1  | Configuring logger redirection
rabbitmq1_1  | 2022-07-05 02:43:40.659 [debug] <0.288.0> Lager installed handler error_logger_lager_h into error_logger
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.291.0> Lager installed handler lager_forwarder_backend into error_logger_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.312.0> Lager installed handler lager_forwarder_backend into rabbit_log_mirroring_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.303.0> Lager installed handler lager_forwarder_backend into rabbit_log_feature_flags_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.309.0> Lager installed handler lager_forwarder_backend into rabbit_log_ldap_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.294.0> Lager installed handler lager_forwarder_backend into rabbit_log_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.297.0> Lager installed handler lager_forwarder_backend into rabbit_log_channel_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.306.0> Lager installed handler lager_forwarder_backend into rabbit_log_federation_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.670 [debug] <0.300.0> Lager installed handler lager_forwarder_backend into rabbit_log_connection_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.671 [debug] <0.315.0> Lager installed handler lager_forwarder_backend into rabbit_log_prelaunch_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.672 [debug] <0.318.0> Lager installed handler lager_forwarder_backend into rabbit_log_queue_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.673 [debug] <0.321.0> Lager installed handler lager_forwarder_backend into rabbit_log_ra_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.675 [debug] <0.324.0> Lager installed handler lager_forwarder_backend into rabbit_log_shovel_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.676 [debug] <0.327.0> Lager installed handler lager_forwarder_backend into rabbit_log_upgrade_lager_event
rabbitmq1_1  | 2022-07-05 02:43:40.691 [info] <0.44.0> Application lager started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:41.159 [debug] <0.284.0> Lager installed handler lager_backend_throttle into lager_event
haproxy_1    | [ALERT] 185/024336 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:32] : 'server rabbitmq2' : could not resolve address 'rabbitmq2'.
haproxy_1    | [ALERT] 185/024336 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:33] : 'server rabbitmq3' : could not resolve address 'rabbitmq3'.
haproxy_1    | [ALERT] 185/024336 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:43] : 'server rabbitmq2' : could not resolve address 'rabbitmq2'.
haproxy_1    | [ALERT] 185/024336 (8) : parsing [/usr/local/etc/haproxy/haproxy.cfg:44] : 'server rabbitmq3' : could not resolve address 'rabbitmq3'.
haproxy_1    | [ALERT] 185/024336 (8) : Failed to initialize server(s) addr.
haproxy_1    | <5>haproxy-systemd-wrapper: exit, haproxy RC=1
docker-rabbitmq-cluster_haproxy_1 exited with code 1
rabbitmq1_1  | 2022-07-05 02:43:43.065 [info] <0.44.0> Application mnesia started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:43.066 [info] <0.273.0> 
rabbitmq1_1  |  Starting RabbitMQ 3.8.34 on Erlang 24.3.4.1 [emu]
rabbitmq1_1  |  Copyright (c) 2007-2022 VMware, Inc. or its affiliates.
rabbitmq1_1  |  Licensed under the MPL 2.0. Website: https://rabbitmq.com
rabbitmq1_1  | 
rabbitmq1_1  |   ##  ##      RabbitMQ 3.8.34
rabbitmq1_1  |   ##  ##
rabbitmq1_1  |   ##########  Copyright (c) 2007-2022 VMware, Inc. or its affiliates.
rabbitmq1_1  |   ######  ##
rabbitmq1_1  |   ##########  Licensed under the MPL 2.0. Website: https://rabbitmq.com
rabbitmq1_1  | 
rabbitmq1_1  |   Erlang:      24.3.4.1 [emu]
rabbitmq1_1  |   TLS Library: OpenSSL - OpenSSL 1.1.1o  3 May 2022
rabbitmq1_1  | 
rabbitmq1_1  |   Doc guides:  https://rabbitmq.com/documentation.html
rabbitmq1_1  |   Support:     https://rabbitmq.com/contact.html
rabbitmq1_1  |   Tutorials:   https://rabbitmq.com/getstarted.html
rabbitmq1_1  |   Monitoring:  https://rabbitmq.com/monitoring.html
rabbitmq1_1  | 
rabbitmq1_1  |   Logs: <stdout>
rabbitmq1_1  | 
rabbitmq1_1  |   Config file(s): /etc/rabbitmq/rabbitmq.conf
rabbitmq1_1  | 
rabbitmq1_1  |   Starting broker...2022-07-05 02:43:43.068 [info] <0.273.0> 
rabbitmq1_1  |  node           : rabbit@rabbitmq1
rabbitmq1_1  |  home dir       : /var/lib/rabbitmq
rabbitmq1_1  |  config file(s) : /etc/rabbitmq/rabbitmq.conf
rabbitmq1_1  |  cookie hash    : VlfoFK5J8f9Ln3G9sXDoPQ==
rabbitmq1_1  |  log(s)         : <stdout>
rabbitmq1_1  |  database dir   : /var/lib/rabbitmq/mnesia/rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:44.265 [info] <0.44.0> Application amqp_client started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:44.279 [info] <0.584.0> Management plugin: HTTP (non-TLS) listener started on port 15672
rabbitmq1_1  | 2022-07-05 02:43:44.279 [info] <0.612.0> Statistics database started.
rabbitmq1_1  | 2022-07-05 02:43:44.279 [info] <0.611.0> Starting worker pool 'management_worker_pool' with 3 processes in it
rabbitmq1_1  | 2022-07-05 02:43:44.279 [info] <0.44.0> Application rabbitmq_management started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:44.292 [info] <0.44.0> Application prometheus started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:44.294 [info] <0.625.0> Prometheus metrics: HTTP (non-TLS) listener started on port 15692
rabbitmq1_1  | 2022-07-05 02:43:44.294 [info] <0.525.0> Ready to start client connection listeners
rabbitmq1_1  | 2022-07-05 02:43:44.294 [info] <0.44.0> Application rabbitmq_prometheus started on node rabbit@rabbitmq1
rabbitmq1_1  | 2022-07-05 02:43:44.297 [info] <0.669.0> started TCP listener on [::]:5672
rabbitmq1_1  | 2022-07-05 02:43:45.321 [info] <0.525.0> Server startup complete; 4 plugins started.
rabbitmq1_1  |  * rabbitmq_prometheus
rabbitmq1_1  |  * rabbitmq_management
rabbitmq1_1  |  * rabbitmq_web_dispatch
rabbitmq1_1  |  * rabbitmq_management_agent
rabbitmq1_1  |  completed with 4 plugins.
rabbitmq1_1  | 2022-07-05 02:43:45.322 [info] <0.525.0> Resetting node maintenance status

我不知道我错过了什么。对不起太多的日志。

a64a0gku

a64a0gku1#

在分析您的文件和日志文件后,我可以观察到一些问题。
当没有文件/配置时,您的设置将只能启动一次,并且您将从头开始。出现这种行为的原因是RabbitMQ将配置存储到名为Mnesia的内部数据库中,并且一旦添加了节点,它就必须存在以供进一步启动。如果您不遵循它,您将观察到错误,即节点等待Mnesia找到它的节点。
重复启动的另一个问题是,添加到集群的节点(2或3)将其自身标记为集群成员,您将看到一个错误,即主节点(1)希望连接到以前连接的节点,但您的入口点已经重置了2和3个节点。
您不能组合RabbitMQ的版本,因为它可能包含不同的数据结构,不允许节点同步,并且您将看到类似“schema_integrity_check_failed..."的错误,它们应该完全相同。
当我使用RabbitMQ时,我的配置确保了所有数据都有一个持久的位置(磁盘),重复启动将使用已经初始化的数据。此外,使用RabbitMQ支持的集群管理软件(如etc或consult)也是一个很好的做法,您不需要自己处理它。
希望能有所帮助。
一般来说,我能够成功地在我的机器(macOS)上用Docker启动您的安装程序,脚本如下:

  • 请确保从未启动合成,以避免使用以前运行的数据
  • 准备文件夹中的所有内容
  • docker-compose up,享受一切作品
  • 使用docker-compose down清除堆栈,而不是使用...“stop”命令,因为数据将保留

您可以在下面找到启动的日志,请忽略ha_proxy错误,因为没有附加配置文件,所以它一定会失败

% docker-compose up
Creating network "rabbitmq_default" with the default driver
Creating rabbitmq_rabbitmq1_1 ... done
Creating rabbitmq_rabbitmq3_1 ... done
Creating rabbitmq_rabbitmq2_1 ... done
Creating rabbitmq_haproxy_1   ... done
Attaching to rabbitmq_rabbitmq1_1, rabbitmq_rabbitmq3_1, rabbitmq_rabbitmq2_1, rabbitmq_haproxy_1

(due我将其置于here
我的设置看起来是这样的,唯一的变化是rabbitMQ数据是持久的,初始化是手动完成的,你也可以从文件系统路径挂载数据文件夹

version: '3'

services:
    rabbitmq1:
        image: rabbitmq:3.8.34-management
        hostname: rabbitmq1
        environment:
            - RABBITMQ_ERLANG_COOKIE=12345
            - RABBITMQ_DEFAULT_USER=guest
            - RABBITMQ_DEFAULT_PASS=guest
            - RABBITMQ_DEFAULT_VHOST=/
        volumes:
            - rabbitmq-01-data:/var/lib/rabbitmq

    rabbitmq2:
        image: rabbitmq:3.8.34-management
        hostname: rabbitmq2
        depends_on:
            - rabbitmq1
        environment:
            - RABBITMQ_ERLANG_COOKIE=12345
            - RABBITMQ_DEFAULT_USER=guest
            - RABBITMQ_DEFAULT_PASS=guest
            - RABBITMQ_DEFAULT_VHOST=/
        volumes:
            - rabbitmq-02-data:/var/lib/rabbitmq

    rabbitmq3:
        image: rabbitmq:3.8.34-management
        hostname: rabbitmq3
        depends_on:
            - rabbitmq1
        environment:
            - RABBITMQ_ERLANG_COOKIE=12345
            - RABBITMQ_DEFAULT_USER=guest
            - RABBITMQ_DEFAULT_PASS=guest
            - RABBITMQ_DEFAULT_VHOST=/
        volumes:
            - rabbitmq-03-data:/var/lib/rabbitmq

volumes:
    rabbitmq-01-data:
    rabbitmq-02-data:
    rabbitmq-03-data:

在每个“跟随者”节点上手动运行

rabbitmqctl stop_app
  rabbitmqctl reset
  rabbitmqctl join_cluster rabbit@rabbitmq1
  rabbitmqctl start_app

如果适用于您的案例,请不要忘记启用冗余队列

rabbitmqctl set_policy ha "." '{"ha-mode":"all"}'
vql8enpb

vql8enpb2#

我有一个完整的RabbitMQ设置,它使用docker-compose形成一个集群:
https://github.com/lukebakken/docker-rabbitmq-cluster
请注意,建议使用以下镜像策略。不需要将队列镜像到所有节点-

rabbitmqctl set_policy ha "." '{"ha-mode":"all"}'

应镜像到集群中的2个节点。

更好,请使用最新版本的RabbitMQ并使用Quorum Queues!在4.0版中,将从RabbitMQ中删除传统HA镜像

https://www.rabbitmq.com/quorum-queues.html

**注意:**RabbitMQ团队监控rabbitmq-users邮件列表,仅在某些时候回答StackOverflow上的问题。

相关问题