欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-multiple-instances-in-one-machine/

由于某些因素的限制,有时候你不得不在一台机器上去搭建一个rabbitmq集群,当然这种集群只适合自己玩玩,验证下结论,这个有点类似zookeeper的单机版。真实生成环境还是要配成多机集群的。有关怎么配置多机集群的可以参考其他的资料,这里主要论述如何在单机中配置多个rabbitmq实例。

主要参考官方文档:https://www.rabbitmq.com/clustering.html

前提
配置的前提是你的rabbitmq可以运行起来,比如"ps aux|grep rabbitmq"你能看到相关进程,又比如运行“rabbitmqctl status”你可以看到类似如下信息,而不报错:

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl status
Status of node 'rabbit@hiddenzhu-8drdc' ...
[{pid,13014},{running_applications,[{rabbit,"RabbitMQ","3.4.0"},{mnesia,"MNESIA  CXC 138 12","4.14.1"},{os_mon,"CPO  CXC 138 46","2.4.1"},{xmerl,"XML parser","1.3.12"},{sasl,"SASL  CXC 138 11","3.0.1"},{stdlib,"ERTS  CXC 138 10","3.1"},{kernel,"ERTS  CXC 138 10","5.1"}]},{os,{unix,linux}},{erlang_version,"Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:30] [hipe] [kernel-poll:true]\n"},{memory,[{total,37276536},{connection_readers,0},{connection_writers,0},{connection_channels,0},{connection_other,2832},{queue_procs,2832},{queue_slave_procs,0},{plugins,0},{other_proc,13331064},{mnesia,66248},{mgmt_db,0},{msg_index,41184},{other_ets,778528},{binary,23152},{code,14637029},{atom,654241},{other_system,7739426}]},{alarms,[]},{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},{vm_memory_high_watermark,0.4},{vm_memory_limit,3301929779},{disk_free_limit,50000000},{disk_free,37108654080},{file_descriptors,[{total_limit,924},{total_used,3},{sockets_limit,829},{sockets_used,1}]},{processes,[{limit,1048576},{used,126}]},{run_queue,0},{uptime,2143}]

为了简单化,这里也要保证rabbitmq的plugin没有开启(因为开启之后要占用一些端口,多实例配置起来会更加复杂,这里简单问题简化说明)。

情景
假设有三个rabbitmq节点,分别为rabbit1, rabbit2和rabbit3
主要开启命令如下:

RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached

结束命令如下:

rabbitmqctl -n rabbit1 stop
rabbitmqctl -n rabbit2 stop
rabbitmqctl -n rabbit3 stop

rabbit1

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit1 stop_app
Stopping node 'rabbit1@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit1 reset
Resetting node 'rabbit1@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit1 cluster
Clustering node 'rabbit1@hiddenzhu-8drdc' with [] ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit1 start_app
Starting node 'rabbit1@hiddenzhu-8drdc' ...
...done.

TIPS
有些版本(比如3.4.0)在第一个节点(主节点)运行“rabbitmqctl -n rabbit1 cluster” 时会遇到:

Error: could not recognise command

的错误,可以不运行“rabbitmqctl -n rabbit1 cluster”这句。然后在从节点运行:

rabbitmqctl -n rabbit2 join_cluster rabbit1@`hostname -s`

这一句。
主要原因是:有些版本不识别cluster这个命令

rabbit2

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 stop_app
Stopping node 'rabbit2@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 reset
Resetting node 'rabbit2@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 cluster rabbit1@`hostname -s`
Clustering node 'rabbit2@hiddenzhu-8drdc' with ['rabbit1@hiddenzhu-8drdc'] ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 start_app
Starting node 'rabbit2@hiddenzhu-8drdc' ...
...done.

TIPS
如果略去“rabbitmqctl -n rabbit2 reset”这一句,可能会报错:

Error: {ok,already_member}

查看cluster信息

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit1 cluster_status
Cluster status of node 'rabbit1@hiddenzhu-8drdc' ...
[{nodes,[{disc,['rabbit1@hiddenzhu-8drdc']},{ram,['rabbit2@hiddenzhu-8drdc']}]},{running_nodes,['rabbit2@hiddenzhu-8drdc','rabbit1@hiddenzhu-8drdc']}]
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 cluster_status
Cluster status of node 'rabbit2@hiddenzhu-8drdc' ...
[{nodes,[{disc,['rabbit1@hiddenzhu-8drdc']},{ram,['rabbit2@hiddenzhu-8drdc']}]},{running_nodes,['rabbit1@hiddenzhu-8drdc','rabbit2@hiddenzhu-8drdc']}]
...done.

加入节点rabbit3

[root@hiddenzhu-8drdc rabbitmq]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
Activating RabbitMQ plugins ...
0 plugins activated:[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit3 stop_app
Stopping node 'rabbit3@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit3 reset
Resetting node 'rabbit3@hiddenzhu-8drdc' ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit3 cluster rabbit1@`hostname -s`
Clustering node 'rabbit3@hiddenzhu-8drdc' with ['rabbit1@hiddenzhu-8drdc'] ...
...done.
[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit3 start_app
Starting node 'rabbit3@hiddenzhu-8drdc' ...
...done.

最终查看集群状态

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit3 cluster_status
Cluster status of node 'rabbit3@hiddenzhu-8drdc' ...
[{nodes,[{disc,['rabbit1@hiddenzhu-8drdc']},{ram,['rabbit3@hiddenzhu-8drdc','rabbit2@hiddenzhu-8drdc']}]},{running_nodes,['rabbit1@hiddenzhu-8drdc','rabbit2@hiddenzhu-8drdc','rabbit3@hiddenzhu-8drdc']}]
...done.

TIPS
有可能遇到这样的情况:

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl status -n rabbit2
Status of node 'rabbit2@hiddenzhu-8drdc' ...
Error: {badarith,[{rabbit_vm,bytes,1,[]},{rabbit_vm,'-mnesia_memory/0-lc$^0/1-0-',1,[]},{rabbit_vm,mnesia_memory,0,[]},{rabbit_vm,memory,0,[]},{rabbit,status,0,[]},{rpc,'-handle_call_call/6-fun-0-',5,[{file,"rpc.erl"},{line,187}]}]}

有一种解决版本是将“/var/lib/rabbitmq/mnesia/”目录下的所有内容删掉(rm -rf *),然后重新启动再配置。

And…
很多时候也会遇到这样的情况:

[root@hiddenzhu-8drdc rabbitmq]# rabbitmqctl -n rabbit2 status
Status of node 'rabbit2@hiddenzhu-8drdc' ...
Error: unable to connect to node 'rabbit2@hiddenzhu-8drdc': nodedown
diagnostics:
- nodes and their ports on hiddenzhu-8drdc: [{rabbit1,44494},{rabbitmqctl2271,60458}]
- current node: 'rabbitmqctl2271@hiddenzhu-8drdc'
- current node home dir: /root
- current node cookie hash: VCwbL3S9/ydrGgVsrLjVkA==

这说明rabbitmq节点并未启动起来,需要进一步查看排除异常。

End…

欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-multiple-instances-in-one-machine/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


RabbitMQ单机多实例配置相关推荐

  1. MySQL 5.5.35 单机多实例配置详解

    一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...

  2. mysql 5.5.35 单机多实例配置详解_MySQL 5.5.35 单机多实例配置详解

    一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...

  3. 生产环境MySQL 5.5.x单机多实例配置实践

    背景需求: 1)在一台新采购的服务器上通过源码编译安装一个版本为5.5.x以上的MySQL数据库,并将所有配置文件与数据等均存放在/opt/mysql,以便于今后实现快速迁移.复制和整体备份: 2)在 ...

  4. Tomcat单机多实例配置

    原文链接:http://blog.csdn.net/xyang81/article/details/51997053 当一个进程的线程超过500个的话,那么这个进程的运行效率会变得很低.因为一个进程产 ...

  5. mysql 5.5.35 单机多实例配置详解_基于mysql-5.5.32的单机多实例多配置文件的

    1.安装环境: [root@localhost ~]# [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.32-504.16.2 ...

  6. RabbitMQ集群(单机多实例部署)

    RabbitMQ集群(单机多实例部署) 一.单机多实例部署 单机版安装地址:RabbitMQ3.8.4安装和配置 在单机版基础上 ,也就是一台Linux虚拟机上启动多个RabbitMQ实例,部署集群. ...

  7. MySQL单机多实例部署详解之------利用mysqld_multi配置实现

    一.mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程.这些服务进程通过不同的socket监听不 ...

  8. 单机mongodb最大_mongodb单机多实例主从配置

    1.需要启动两个mongodb实例,首先关闭mongodb默认开机启动. service mongodb stop chkconfig mongodb off 2.复制 /etc/mongod.con ...

  9. Spring Cloud Stream多RabbitMQ实例配置时报错no default binder has been set

    当前Spring Cloud Rabbit的版本为2.1.2 <dependency><groupId>org.springframework.cloud</groupI ...

最新文章

  1. Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#
  2. 一些关于人工智能的讨论(二)
  3. linux 查看lv格式,linux lv pv lv 命令
  4. dspmq dspmqver command not found(dspmq命令找不到,dspmqver主安装目录设置不正确
  5. Hbase Solr 二级索引 同步int数据报错com.ngdata.hbaseindexer.parse.ByteArrayValueMappers: Error mapping byte
  6. SpringMvc 跨域
  7. 配置两个Hadoop集群Kerberos认证跨域互信(两个集群互通)
  8. 结构型模式之 适配器模式
  9. 网站性能优化 - 数据库及服务器架构篇
  10. Java中的素数求法
  11. 【君思智慧园区】智慧能源综合管理平台,智慧能源管理云平台建设方案!
  12. 使用标尺工具获取某点的坐标
  13. python吃显卡还是内存条_内存条与显卡金手指氧化了解决方法
  14. open3d使用总结
  15. C语言绘图示例-繁花图案
  16. 仿酒仙网品牌活动动画效果 (鼠标移上 图片平移)
  17. IntelliJ IDEA调整字体大小
  18. HTML—— 超链接 行内框架 表格 知识总结。
  19. 把执行结果转成json对象报错_关于JSON转换成对象 报错LinkedHashMap不能直接转成对象...
  20. 2021-2027全球与中国MPO连接器市场现状及未来发展趋势

热门文章

  1. verilog设计简易正弦波信号发生器_电子设计竞赛教程-信号源类
  2. 指定版本的python运行和指定python版本的pip
  3. springboot加入com.fasterxml.jackson.core-jackson-databind依赖后报错Error creating bean with name ‘requestM
  4. A quick introduction to Google test
  5. spark on yarn 配置及异常解决
  6. selenium webdirver之rdoc使用
  7. 超级寒潮考验智慧城市万亿投资
  8. 组合破解windows域账号
  9. linux系统判断是否重启、关机、查询登录诊断分析简介
  10. VMware Workstation中Linux虚拟机安装VMware-Tools