RabbitMQ集群搭建

集群配置

三台centos 7虚拟机
10.1.10.35  master 
10.1.10.36  slave1
10.1.10.37  slave2

资源下载

下载到 /Download 文件夹下
1. rabbitmq server 下载
[root@seclab-master Downloads]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz
2. erlang下载
[root@seclab-master Downloads]# wget http://erlang.org/download/otp_src_20.0.tar.gz

远程复制文件到slave1slave2

1. 到slave1
[root@seclab-master Downloads]# scp rabbitmq-server-generic-unix-3.6.10.tar.xz root@10.1.10.36:/root/Downloads/
[root@seclab-master Downloads]# scp otp_src_20.0.tar.gz root@10.1.10.36:/root/Downloads/

2. 到slave2
[root@seclab-master Downloads]# scp rabbitmq-server-generic-unix-3.6.10.tar.xz root@10.1.10.37:/root/Downloads/
[root@seclab-master Downloads]# scp otp_src_20.0.tar.gz root@10.1.10.37:/root/Downloads/

以下需要在三台虚拟机上重复操作:

安装需要的依赖

[root@seclab-master Downloads]# yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto

解压erlang并编译,指定安装路径到/opt/erlang

[root@seclab-master Downloads]# tar -xzvf otp_src_20.0.tar.gz
[root@seclab-master Downloads]# cd otp_src_20.0/
[root@seclab-master otp_src_20.0]# ./configure --prefix=/opt/erlang
[root@seclab-master otp_src_20.0]# make && make install

配置erlang环境变量

[root@seclab-master erlang]# pwd
/opt/erlang
[root@seclab-master erlang]# vim /etc/profile

在最末尾添加:
# set erlang environment
export ERLANG_HOME=/opt/erlang
export PATH=$PATH:$ERLANG_HOME/bin

保存之后记得让修改生效:
[root@seclab-master erlang]# source /etc/profile

测试一下,运行erl命令输出如下:
[root@seclab-master erlang]# erl
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.0  (abort with ^G)
1> 

解压rabbitmq压缩包到/opt文件夹下(和erlang同级),修改环境变量

[root@seclab-master Downloads]# xz -d rabbitmq-server-generic-unix-3.6.10.tar.xz
[root@seclab-master Downloads]# ls
otp_src_20.0  otp_src_20.0.tar.gz  rabbitmq-server-generic-unix-3.6.10.tar
[root@seclab-master Downloads]# tar -xvf rabbitmq-server-generic-unix-3.6.10.tar -C /opt

添加RABBITMQ_HOME变量,并求改PATH变量:
# set rabbitmq environment
export RABBITMQ_HOME=/opt/rabbitmq_server-3.6.10
export PATH=$PATH:$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin

保存之后记得让修改生效:
[root@seclab-master erlang]# source /etc/profile

相关命令

启动rabbitmq服务:
[root@seclab-master rabbitmq_server-3.6.10]# rabbitmq-server -detached # detached表示在后台启动(默认前台)
Warning: PID file not written; -detached was passed.

查看rabbitmq服务状态:
[root@seclab-master ~]# rabbitmqctl status
Status of node 'rabbit@seclab-master'
[{pid,48527},
 {running_applications,
     [{rabbit,"RabbitMQ","3.6.10"},
      {mnesia,"MNESIA  CXC 138 12","4.15"},
      {rabbit_common,
          "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
          "3.6.10"},
      {ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
      {ssl,"Erlang/OTP SSL application","8.2"},
      {public_key,"Public key infrastructure","1.4.1"},
      {asn1,"The Erlang ASN1 compiler version 5.0","5.0"},
      {xmerl,"XML parser","1.3.15"},
      {os_mon,"CPO  CXC 138 46","2.4.2"},
      {syntax_tools,"Syntax tools","2.1.2"},
      {crypto,"CRYPTO","4.0"},
      {compiler,"ERTS  CXC 138 10","7.1"},
      {sasl,"SASL  CXC 138 11","3.0.4"},
      {stdlib,"ERTS  CXC 138 10","3.4"},
      {kernel,"ERTS  CXC 138 10","5.3"}]},
 {os,{unix,linux}},
 {erlang_version,
     "Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [hipe] [kernel-poll:true]\n"},
 {memory,
     [{total,52634456},
      {connection_readers,0},
      {connection_writers,0},
      {connection_channels,0},
      {connection_other,0},
      {queue_procs,2840},
      {queue_slave_procs,0},
      {plugins,0},
      {other_proc,20241416},
      {mnesia,61808},
      {metrics,184376},
      {mgmt_db,0},
      {msg_index,46552},
      {other_ets,1743024},
      {binary,56592},
      {code,21374827},
      {atom,891849},
      {other_system,8212636}]},
 {alarms,[]},
 {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,409573785},
 {disk_free_limit,50000000},
 {disk_free,19460112384},
 {file_descriptors,
     [{total_limit,924},{total_used,2},{sockets_limit,829},{sockets_used,0}]},
 {processes,[{limit,1048576},{used,153}]},
 {run_queue,0},
 {uptime,160},
 {kernel,{net_ticktime,60}}]

关闭rabbitmq服务:
[root@seclab-master ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-master'

启动浏览器插件

首先新建文件夹,否则可能报错:
[root@seclab-master ~]# mkdir /etc/rabbitmq

然后启用插件,便于用浏览器管理服务:
[root@seclab-master ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@seclab-slave1... started 6 plugins.

156725672端口开放

15672是浏览器访问端口:
[root@seclab-master ~]# firewall-cmd --zone=public --add-port=15672/tcp --permanent
success
[root@seclab-master ~]# firewall-cmd --reload 
success

5672是rabbitmq服务端口:
[root@seclab-master ~]# firewall-cmd --zone=public --add-port=5672/tcp --permanent
success
[root@seclab-master ~]# firewall-cmd --reload 
success

然后浏览器访问:
http://<ip or localhost>:15672
例如本机的话:http://localhost:15672

浏览器管理需要登陆

初始登陆账号:guest,密码:guest

创建账号:lhb,密码:lhb:
[root@seclab-master ~]# rabbitmqctl add_user lhb lhb
Creating user "lhb"

添加权限:
[root@seclab-master ~]# rabbitmqctl set_permissions -p "/" lhb ".*" ".*" ".*"
Setting permissions for user "lhb" in vhost "/"

设置账号lhb为管理员:
[root@seclab-master ~]# rabbitmqctl set_user_tags lhb administrator
Setting tags for user "lhb" to [administrator]

试一试远程访问:
浏览器输入:http://<ip>:15672,例如:http://10.1.10.35:15672, 即可登陆rabbitmq服务管理后台界面

以上为单机安装配置,下面开始集群搭建

修改hosts文件

seclab-master上:
127.0.0.1   localhost seclab-master localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost seclab-master localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35  seclab-master
10.1.10.36  seclab-slave1
10.1.10.37  seclab-slave2

seclab-slave1上:
127.0.0.1   localhost seclab-slave1 localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost seclab-slave1 localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35  seclab-master
10.1.10.36  seclab-slave1
10.1.10.37  seclab-slave2

seclab-slave2上:
127.0.0.1   localhost seclab-slave2 localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost seclab-slave2 localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35  seclab-master
10.1.10.36  seclab-slave1
10.1.10.37  seclab-slave2

查看是否相互ping

测试seclab-master:
[root@seclab-master etc]# ping seclab-slave1
PING seclab-slave1 (10.1.10.36) 56(84) bytes of data.
64 bytes from seclab-slave1 (10.1.10.36): icmp_seq=1 ttl=64 time=0.659 ms
...
[root@seclab-master etc]# ping seclab-slave2
PING seclab-slave2 (10.1.10.37) 56(84) bytes of data.
64 bytes from seclab-slave2 (10.1.10.37): icmp_seq=1 ttl=64 time=0.530 ms
...

测试seclab-slave1:
[root@seclab-slave1 ~]# ping seclab-master
PING seclab-master (10.1.10.35) 56(84) bytes of data.
64 bytes from seclab-master (10.1.10.35): icmp_seq=1 ttl=64 time=0.486 ms
...
[root@seclab-slave1 ~]# ping seclab-slave2
PING seclab-slave2 (10.1.10.37) 56(84) bytes of data.
64 bytes from seclab-slave2 (10.1.10.37): icmp_seq=1 ttl=64 time=0.467 ms
...

测试seclab-slave2:
[root@seclab-slave2 ~]# ping seclab-master
PING seclab-master (10.1.10.35) 56(84) bytes of data.
64 bytes from seclab-master (10.1.10.35): icmp_seq=1 ttl=64 time=0.358 ms
...
[root@seclab-slave2 ~]# ping seclab-slave1
PING seclab-slave1 (10.1.10.36) 56(84) bytes of data.
64 bytes from seclab-slave1 (10.1.10.36): icmp_seq=1 ttl=64 time=0.467 ms
...

开放436925672端口

此处和之前开放15672端口一样,略。
查看端口开放状态(三台虚拟机都要开放以下四个端口):
[root@seclab-master etc]# firewall-cmd --list-ports
5672/tcp 25672/tcp 4369/tcp 15672/tcp

seclab-slave1seclab-slave2erlang cookie设置成和seclab-master一致

.erlang.cookie文件夹可能存在于:
Windows:
C:\Users\Current User\.erlang.cookie (%HOMEDRIVE% + %HOMEPATH%\.erlang.cookie) 
or C:\Documents and Settings\Current User\.erlang.cookie
or C:\Windows\.erlang.cookie
Unix:
/var/lib/rabbitmq/.erlang.cookie 
or $HOME/.erlang.cookie.

查看并复制seclab-master的.erlang.cookie:
[root@seclab-master ~]# ls -a |grep .erlang
.erlang.cookie
[root@seclab-master ~]# cat .erlang.cookie 
WEVLCKAPKHTVCGKQTOJY

复制这些字符串并放到其余两个节点(覆盖掉它们原来的):
seclab-slave1:
[root@seclab-slave1 ~]# chmod 700 .erlang.cookie
[root@seclab-slave1 ~]# echo "WEVLCKAPKHTVCGKQTOJY" >./.erlang.cookie 
[root@seclab-slave1 ~]# chmod 400 .erlang.cookie
[root@seclab-slave1 ~]# cat .erlang.cookie 
WEVLCKAPKHTVCGKQTOJY

seclab-slave2:
[root@seclab-slave2 ~]# chmod 700 .erlang.cookie
[root@seclab-slave2 ~]# echo "WEVLCKAPKHTVCGKQTOJY" >./.erlang.cookie 
[root@seclab-slave2 ~]# chmod 400 .erlang.cookie
[root@seclab-slave2 ~]# cat .erlang.cookie 
WEVLCKAPKHTVCGKQTOJY

重启rabbitmq

seclab-slave1:
[root@seclab-slave1 ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmq-server -detached

seclab-slave2:
[root@seclab-slave2 ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmq-server -detached

按照以下步骤将slave1slave2加入master集群

seclab-slave1:
[root@seclab-slave1 ~]# rabbitmqctl stop_app   # 关闭
Stopping rabbit application on node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmqctl reset      # 重置
Resetting node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmqctl join_cluster rabbit@seclab-master  # 加入集群
Clustering node 'rabbit@seclab-slave1' with 'rabbit@seclab-master'
[root@seclab-slave1 ~]# rabbitmqctl start_app  # 启动slave1节点
Starting node 'rabbit@seclab-slave1'

seclab-slave2:
[root@seclab-slave2 ~]# rabbitmqctl stop_app    
Stopping rabbit application on node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmqctl reset
Resetting node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmqctl join_cluster rabbit@seclab-master
Clustering node 'rabbit@seclab-slave2' with 'rabbit@seclab-master'
[root@seclab-slave2 ~]# rabbitmqctl start_app
Starting node 'rabbit@seclab-slave2'

最后看看集群的状态:
[root@seclab-master ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@seclab-master'
[{nodes,[{disc,['rabbit@seclab-master','rabbit@seclab-slave1',
                'rabbit@seclab-slave2']}]},
 {running_nodes,['rabbit@seclab-slave2','rabbit@seclab-slave1',
                 'rabbit@seclab-master']},
 {cluster_name,<<"rabbit@localhost">>},
 {partitions,[]},
 {alarms,[{'rabbit@seclab-slave2',[]},
          {'rabbit@seclab-slave1',[]},
          {'rabbit@seclab-master',[]}]}]

参考

rabbitmq官网:
http://www.rabbitmq.com/
http://www.rabbitmq.com/clustering.html
博客:
http://www.cnblogs.com/silent2012/p/5329591.html
http://www.jianshu.com/p/54d56123a704
http://blog.csdn.net/jack85986370/article/details/51169203
http://blog.csdn.net/huoyunshen88/article/details/33738393
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 本帖内容转自博客:http://88250.b3log.org/rabbitmq-clustering-ha。部分...
    dzgdp888阅读 8,825评论 2 15
  • 消息队列对于处理高并发还是非常不错的选择。所以电商必然会采取这种方式。废话不多说。贴代码先。 1 .搭建环境 ra...
    YoRuo_阅读 1,076评论 0 3
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 584,160评论 51 785
  • rabbitmq有3种模式,集群模式2种• 单机模式:即单机情况不做集群,就单独运行一个rabbitmq而已。...
    嗷大彬彬阅读 3,983评论 1 9
  • 乌云拥抱着月光, 清风亲吻着山岗,来来回回, 在江面舞蹈,叠影涟漪, 柳树依稀扬起发鬓,听 云上的星星紧揉着眼睛,...
    云阅岩兮阅读 239评论 0 0