CentOS下RabbitMQ集群配置

1、实验环境

rabbitmq-node1.com192.168.1.112
rabbitmq-node2.com192.168.1.113
rabbitmq-node3.com192.168.1.128

2、配置前检查同步时间

#ntpdate pool.ntp.org

3、注意一定要修改hosts

1
2
3
4
#cat /etc/hosts
192.168.1.112 rabbitmq-node1.com rabbitmq-node1
192.168.1.113 rabbitmq-node2.com rabbitmq-node2
192.168.1.128 rabbitmq-node3.com rabbitmq-node3

4、安装erlang

#yum -y install erlang

5、安装rabbitqmq

1
2
3
4
5
6
#wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.6/rabbitmq-server-2.8.6-1.noarch.rpm
#yum -y install rabbitmq-server-2.8.6-1.noarch.rpm

[root@rabbitmq-node1 ~]# /etc/init.d/rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

# rabbitmqctl status //查看状态

6、安装插件管理界面

1
2
#mkdir -m 777 /etc/rabbitmq/ (如果目录已经存在直接执行 # chmod 777 /etc/rabbitmq/)
#rabbitmq-plugins enable rabbitmq_management

重启rabbitmq-server

1
2
#rabbitmqctl stop
#/etc/init.d/rabbitmq-server start

查看管理端口有没有启动:

# netstat -tnlp|grep 55672

浏览器打开http://IP:55672 账号密码都是guest

注意:rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。

如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopback_users为[]

/etc/rabbitmq/rabbitmq.config文件完整内容如下(注意后面的半角句号):

[{rabbit, [{loopback_users, []}]}].

7、rabbitmq集群配置

(1)设置每个节点Cookie

Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信

1
2
# cat /var/lib/rabbitmq/.erlang.cookie 
EJARCZORCOTEQWFGPWXR

(2)停止所有节点RabbitMQ服务,然后使用detached参数独立运行,这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序

1
2
3
[root@rabbitmq-node3 ~]#rabbitmq-server -detached
[root@rabbitmq-node2 ~]#rabbitmq-server -detached
[root@rabbitmq-node1 ~]#rabbitmq-server -detached

(3)关于节点类型(ram |disk)

ram节点的状态保存在内存中,disk节点保存在磁盘中被加入的节点为disk,如本例中rabbit@host2为ram节点,rabbit@host1,rabbit@host3为ram节点,可以通过rabbitmqctl cluster命令改变加入的集群以及节点类型该命令后可以加多个节点名称,指定的节点就会变成disk节点

1
2
3
4
5
[root@rabbitmq-node3 ~]#rabbitmqctl cluster_status
[root@rabbitmq-node3 ~]#rabbitmq stop_app
[root@rabbitmq-node3 ~]#rabbitmqctl reset
[root@rabbitmq-node3 ~]#rabbitmqctl cluster
[root@rabbitmq-node3 ~]#rabbitmqctl start_app

指定为ram

1
2
3
4
[root@rabbitmq-node2 ~]#rabbitmq stop_app
[root@rabbitmq-node2 ~]#rabbitmqctl reset
[root@rabbitmq-node2 ~]#rabbitmqctl cluster rabbit@rabbitmq-node3
[root@rabbitmq-node2 ~]#rabbitmqctl start_app

指定为disc

1
2
3
4
[root@rabbitmq-node1 ~]#rabbitmq stop_app
[root@rabbitmq-node1 ~]#rabbitmqctl reset
[root@rabbitmq-node1 ~]#rabbitmqctl cluster rabbit@rabbitmq-node3 rabbit@rabbitmq-node1
[root@rabbitmq-node1 ~]#rabbitmqctl start_app

(4)自动配置集群,默认文件是没有的,如果需要必须手动创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@rabbitmq-node1 ~]# cat /etc/rabbitmq/rabbitmq.conf 
[

...

{rabbit, [

...

{cluster_nodes, ['rabbit@rabbitmq-node1','rabbit@rabbitmq-node2', 'rabbit@rabbitmq-node3']},

...

]},

...

].

[root@rabbitmq-node1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq///需要使用的MNESIA数据库的路径
RABBITMQ_LOG_BASE=/var/log/rabbitmq///log的路径
RABBITMQ_PLUGINS_DIR=/usr/lib/rabbitmq/lib/rabbitmq_server-2.8.6/plugins//插件的路径

(5)启动后就自动加入集群了

1
2
3
4
5
6
7
8
[root@rabbitmq-node1 ~]#rabbitmq-server -detached
[root@rabbitmq-node1 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-node1' ...
[{nodes,[{disc,['rabbit@rabbitmq-node1','rabbit@rabbitmq-node3']},
{ram,['rabbit@rabbitmq-node2']}]},
{running_nodes,['rabbit@rabbitmq-node2','rabbit@rabbitmq-node3',
'rabbit@rabbitmq-node1']}]
...done.

(6)在浏览器中可以看到所有节点的信息,如果其他节点信息没有显示启用web管理就好

转自:http://www.centoscn.com/CentosServer/cluster/2014/1216/4324.html