一、环境介绍

系统: Centos 6.7  2.6.32-573.el6.x86_64
node1  172.16.60.187
node2  172.16.60.188
软件包 erlang-19.0.4-1.el6.x86_64.rpm   rabbitmq-server-3.6.12-1.el6.noarch.rpm
直接使用rpm包安装即可:
#yum install socat -y
#rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm
#rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm

二、开始配置普通集群

1、设置hosts,是rabbitmq节点可以顺利的互通
在两台服务器上配置/etc/hosts,如下:
#cat /etc/hosts
172.16.60.187 node1
172.16.60.188 node2
在2台服务器配置ulimit限制
#cat /etc/security/limits.conf 
*       hard nofile 65535
*       soft nofile 65535
2、启动2台rabbitmq
#service rabbitmq-server start
3、设置不同节点间同一认证的Erlang Cookie 
采用从主节点copy的方式保持Cookie的一致性,这里将node1节点的cookie拷贝到node2,拷贝之前先停掉node2节点的rabbitmq进程
#service rabbitmq-server stop
#scp /var/lib/rabbitmq/.erlang.cookie root@172.16.60.188:/var/lib/rabbitmq/.erlang.cookie
修改权限为400
#chmod 400 /var/lib/rabbitmq/.erlang.cookie
重新启动rabbitmq
#service rabbitmq-server start
4、查看Cookie情况
[root@node1 ~]# cat /var/lib/rabbitmq/.erlang.cookie 
CLAPXRVVRHOJYFPTZVTB
[root@node2 ~]# cat /var/lib/rabbitmq/.erlang.cookie
CLAPXRVVRHOJYFPTZVTB
5、没有创建普通集群之前,查看集群状态
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1]}]},
 {running_nodes,[rabbit@node1]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node1,[]}]}]
################################################################ 
[root@node2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node2
[{nodes,[{disc,[rabbit@node2]}]},
 {running_nodes,[rabbit@node2]},
 {cluster_name,<<"rabbit@node2">>},
 {partitions,[]},
 {alarms,[{rabbit@node2,[]}]}]
6、创建并部署集群,以node2为例
[root@node2 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node2
[root@node2 rabbitmq]# rabbitmqctl join_cluster  rabbit@node1
Clustering node rabbit@node2 with rabbit@node1
[root@node2 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@node2
注:根据官方文档,如果有node3,继续加入集群那么就在node3操作,停止app--添加--启动app
#rabbitmqctl join_cluster  rabbit@node1
7、查看集群状态
#rabbitmqctl cluster_status
Cluster status of node rabbit@node2
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},
 {running_nodes,[rabbit@node1,rabbit@node2]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node1,[]},{rabbit@node2,[]}]}]
 到这里2台服务器构成的普通集群就配置好了。
 8、启动管理界面
[root@node1 ~]# 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@node1... started 6 plugins.
#########################################################################
[root@node2 rabbitmq]# 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@node2... started 6 plugins.
9、配置用户名和密码
[root@node1 ~]# rabbitmqctl add_user admin admin123
Creating user "admin"
[root@node1 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]
[root@node1 ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "/"

在浏览器访问,并查看建状态如下:

wKioL1nEuZSj6k-PAADF3Wi8HwU045.jpg一个集群需要至少有一个disc节点,一个RAM节点,那么我们将node2修改为RAM节点。

在node2节点上操作如下:
[root@node2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node2
[root@node2 ~]# rabbitmqctl change_cluster_node_type ram
Turning rabbit@node2 into a ram node
[root@node2 ~]# rabbitmqctl start_app
Starting node rabbit@node2
查看是否修改成功
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 
[{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},   #修改成功
 {running_nodes,[rabbit@node2,rabbit@node1]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]
########################################################
[root@node2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node2
[{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},   #修改成功
 {running_nodes,[rabbit@node1,rabbit@node2]},
 {cluster_name,<<"rabbit@node1">>},
 {partitions,[]},
 {alarms,[{rabbit@node1,[]},{rabbit@node2,[]}]}]
同时通过rabbitmq-magagement界面看到的也是一个Disc一个Ram。

三、配置镜像队列集群

[root@node1 ~]# rabbitmqctl set_policy mirror_queue1 "^" '{"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}'
Setting policy "mirror_queue1" for pattern "^" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"automatic\",\"ha-promote-on-shutdown\":\"always\"}" with priority "0"
查看
[root@node1 ~]# rabbitmqctl list_policies
Listing policies
/       mirror_queue1   all     ^       {"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}  0
#######################
[root@node2 ~]# rabbitmqctl list_policies
Listing policies
/       mirror_queue1   all     ^       {"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}  0

同样的,添加好镜像队列之后,也可以在rabbitmq-management界面看到。