如何在 Windows 上配置 RabbitMQ 集群

Posted

技术标签:

【中文标题】如何在 Windows 上配置 RabbitMQ 集群【英文标题】:How to configure RabbitMQ Cluster on Windows 【发布时间】:2019-04-02 18:07:51 【问题描述】:

拜托,我需要你的帮助。

自从上周尝试在 Windows 服务器上配置 RabbitMQ 集群以来,我一直在苦苦挣扎。我重新安装了 RabbitMQ 3.7.8 和 ErlangOTP 21-1 超过 15 次试图找出问题并修复它,但不幸的是,我所有的尝试都失败了。

我的环境: 三台带操作系统的虚拟机:windows server 2012

环境变量设置:

•   ERLANG_HOME = C:\Program Files\erl10.1
•   path: C:\Program Files\Handle
•   %RABBITMQ_BASE% = c:\RabbitMQ
•   %RABBITMQ_CONFIG_FILE% = %RABBITMQ_BASE%
•   RABBITMQ_NODENAME = masternode
•   Server names: RabbitMQ01 “masternode” , RabbitMQ02, RabbitMQ03
•   Adding IP & hots name “masternode” in the host file for name resolution (C:\Windows\System32\drivers\etc\hosts)
•   Setting RabbitMQ configuration file “advanced.config” in c:\users\USERNAME\AppData\Roaming\RabbitMQ” to enable users to login to RabbitMQ management remotely by adding the following setting
[
rabbit,
  [
   tcp_listeners, [5672],
   loopback_users, [],

   num_tcp_acceptors, 100
  ]
  
].

安装步骤:(针对每台服务器)

1. After setting the environment variables, I restarted the machine. Then
2. Install ErlangOTP 21-1
3. Install RabbitMQ 3.7.8 server
4. Enable plugins - rabbitmq-plugins.bat enable rabbitmq_management 

以上服务器安装完成后,我开始配置集群

    首先,我通过 ping Rabbit@masternode 验证了从 RabbitMQ02, 02 可以访问 masternode 并且成功。

    使用以下命令停止 RabbitMQ 服务器和应用程序

    rabbitmq-服务停止 rabbitmqctl stop_app

      将 .erlang.cookie 从主节点“path=c:\windows\system32\config\systemprofile”复制到 RabbitMQ02“path=c:\windows\system32\config\systemprofile”和“path=c:\users\USERNAME” ”。

    通过执行以下命令启动 RabbitMQ 服务和应用程序

rabbitmqctl start_app rabbitmq-服务启动

    通过执行此命令“rabbitmqctl stop_app”再次停止应用程序 我开始将 RabbitMQ02 加入到主节点 rabbitmqctl join_cluster rabbit@masternode(小盒子)

一旦达到这一点,我会在 RabbitMQ02 上收到以下错误。

C:\Program Files\RabbitMQ 服务器\rabbitmq_server-3.7.8\sbin>rabbitmqctl join_cluster rabbit@masternode 错误:无法在节点“rabbit@rhrabbitmq02”上执行操作。请参见 诊断信息和建议如下。

最常见的原因是:

目标节点无法访问(例如,由于主机名解析、TCP 连接 r 防火墙问题) CLI 工具无法通过服务器进行身份验证(例如,由于 CLI 工具的 Erlang cookie 与服务器的不匹配) 目标节点未运行

除了以下诊断信息:

请参阅http://rabbitmq.com/document 上的 CLI、集群和网络指南 ation.html 了解更多 在节点rabbit@rhrabbitmq02上查询服务器日志

诊断

尝试联系:[rabbit@rhrabbitmq02]

兔子@rhrabbitmq02: * 连接到 rhrabbitmq02 上的 epmd(端口 4369) * epmd 报告节点“兔子”使用端口 25672 进行节点间和 CLI 工具流量 我知道了 * TCP 连接成功但 Erlang 分发失败

身份验证失败(被远程节点拒绝),请检查Erlang 饼干

当前节点详情: * 节点名称:rabbitmqcli41@rhrabbitmq02 * 有效用户的主目录:C:\Users\admin * Erlang cookie 哈希:pndBksvQokXyiSqBdnne/g==

主节点状态:

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.8\sbin>rabbitmqctl status
Status of node masternode@rhrabbitmq01 ...
[pid,4008,
 running_applications,
     [rabbitmq_management,"RabbitMQ Management Console","3.7.8",
      rabbitmq_management_agent,"RabbitMQ Management Agent","3.7.8",
      rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.7.8",
      rabbit,"RabbitMQ","3.7.8",
      amqp_client,"RabbitMQ AMQP Client","3.7.8",
      rabbit_common,
          "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
          "3.7.8",
      os_mon,"CPO  CXC 138 46","2.4.6",
      cowboy,"Small, fast, modern HTTP server.","2.2.2",
      mnesia,"MNESIA  CXC 138 12","4.15.5",
      cowlib,"Support library for manipulating Web protocols.","2.1.0",
      lager,"Erlang logging framework","3.6.3",
      syslog,"An RFC 3164 and RFC 5424 compliant logging framework.","3.4.3",
      ranch_proxy_protocol,"Ranch Proxy Protocol Transport","1.5.0",
      jsx,"a streaming, evented json parsing toolkit","2.8.2",
      ranch,"Socket acceptor pool for TCP protocols.","1.5.0",
      ssl,"Erlang/OTP SSL application","9.0.2",
      public_key,"Public key infrastructure","1.6.2",
      asn1,"The Erlang ASN1 compiler version 5.0.7","5.0.7",
      inets,"INETS  CXC 138 49","7.0.2",
      xmerl,"XML parser","1.3.18",
      recon,"Diagnostic tools for production use","2.3.2",
      crypto,"CRYPTO","4.3.3",
      goldrush,"Erlang event stream processor","0.1.9",
      compiler,"ERTS  CXC 138 10","7.2.5",
      syntax_tools,"Syntax tools","2.1.6",
      sasl,"SASL  CXC 138 11","3.2.1",
      stdlib,"ERTS  CXC 138 10","3.6",
      kernel,"ERTS  CXC 138 10","6.1"],
 os,win32,nt,
 erlang_version,
     "Erlang/OTP 21 [erts-10.1] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:64
]\n",
 memory,
     [connection_readers,0,
      connection_writers,0,
      connection_channels,0,
      connection_other,29212,
      queue_procs,0,
      queue_slave_procs,0,
      plugins,1192744,
      other_proc,26188552,
      metrics,195524,
      mgmt_db,337648,
      mnesia,75088,
      other_ets,2748464,
      binary,181696,
      msg_index,27840,
      code,27573597,
      atom,1131721,
      other_system,9846202,
      allocated_unused,9377056,
      reserved_unallocated,0,
      strategy,rss,
      total,[erlang,69528288,rss,78905344,allocated,78905344]],
 alarms,[],
 listeners,
     [clustering,25672,"::",
      amqp,5672,"::",
      amqp,5672,"0.0.0.0",
      http,15672,"::",
      http,15672,"0.0.0.0"],
 vm_memory_calculation_strategy,rss,
 vm_memory_high_watermark,0.4,
 vm_memory_limit,3435785420,
 disk_free_limit,50000000,
 disk_free,86038073344,
 file_descriptors,
     [total_limit,8092,
      total_used,2,
      sockets_limit,7280,
      sockets_used,0],
 processes,[limit,1048576,used,399],
 run_queue,1,
 uptime,6087,
 kernel,net_ticktime,60]

【问题讨论】:

RabbitMQ 没有在 masternode 上运行 - 它就在输出中。在masternode 上,rabbitmqctl status 的输出是什么? 多次安装和卸载RabbitMQ后发现cookie文件名看起来不正常,文件名看起来像“.erlang”而不是“.erlang.cookie” 我不知道为什么吗? 对不起,我复制了我从主节点卸载 RabbitMQ 的信息。现在我重新安装 RabbitMQ 并将 cookie 复制到 RabbitMQ02,然后我尝试启动 App 以查看它是否可以正常工作,但它没有。这是错误消息。 消息已更新以反映实际的错误消息。 在加入命令失败后,我无法在 RabbitMQ02 中启动 RabbitMQ 应用程序或执行与主节点的加入。 【参考方案1】:

问题解决:RABBITMQ_NODENAME设置错误“masternode”而不是“rabbit@masternode”,命令执行顺序出错(加入集群时-先stop_app然后服务停止),更改后重启服务配置而不是重新安装rabbitmq服务。

如果需要根据我的设置场景在 Windows 上安装、配置 rabbitmq 和配置集群,我将很乐意分享所有步骤详细信息。最好的问候。

【讨论】:

以上是关于如何在 Windows 上配置 RabbitMQ 集群的主要内容,如果未能解决你的问题,请参考以下文章

Windows 下安装RabbitMQ服务器及基本配置

Windows环境下 RabbitMQ集群配置

Windows中 RabbitMQ安装与环境变量配置

Windows中 RabbitMQ安装与环境变量配置

如何在一台机器上配置多个RabbitMQ

如何在一台机器上配置多个RabbitMQ