在三个节点分别安装rabbitmq-server,如果是CentOS使用yum即可,如果是Debian使用apt-get即可。
1 $apt-getinstall rabbitmq-server
在三个节点分别启动rabbitmq-server
$service rabbitmq-server start
或
$rabbitmq-server-detached
同步erlang.cookie文件,通过Erlang的分布式特性(通过magic cookie认证节点)进行RabbitMQ集群,各RabbitMQ服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。
root@live-mq-01:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA
root@live-mq-02:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA
root@live-mq-03:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA
在live-mq-01节点上查看集群信息,此时集群中应只有自己。
root@live-mq-01:~# rabbitmqctl cluster_status
Cluster status of node'rabbit@live-mq-01'...
[
{nodes,[{disc,['rabbit@live-mq-01']}]},
#集群中的节点,disc表示为磁盘模式,ram表示为内存模式
{running_nodes,['rabbit@live-mq-01']},
#正在运行的集群节点
{cluster_name,<<"rabbit@live-mq-01">>},
#集群的名称
{partitions,[]}
]
...done.
下面将live-mq-01、live-mq-02、live-mq-03组成集群:
live-mq-02加入live-mq-01节点。
root@live-mq-02:~# rabbitmqctl stop_app
root@live-mq-02:~# rabbitmqctl join_cluster rabbit@live-mq-01
root@live-mq-02:~# rabbitmqctl start_app
live-mq-03加入live-mq-01节点。
root@live-mq-03:~# rabbitmqctl stop_app
root@live-mq-03:~# rabbitmqctl join_cluster rabbit@live-mq-01 --ram
root@live-mq-03:~# rabbitmqctl start_app
此时live-mq-02与live-mq-03也会自动建立连接,上面我的两个节点,其中live-mq-02是磁盘节点,live-mq-03是内存节点,但live-mq-01节点默认是磁盘节点(一个集群中最少要有一个磁盘节点)。如果想把live-mq-02由磁盘节点改成内存节点,使用如下change_cluster_node_type命令修改即可,但要先stop:
root@live-mq-02:~# rabbitmqctl stop_app
Stopping node'rabbit@live-mq-02'...
...done.
root@live-mq-02:~# rabbitmqctl change_cluster_node_type ram
Turning'rabbit@live-mq-02'intoaram node...
...done.
root@live-mq-02:~# rabbitmqctl start_app
Starting node'rabbit@live-mq-02'...
...done.
查看集群信息
root@live-mq-01:~# rabbitmqctl cluster_status
Cluster status of node'rabbit@live-mq-01'...
[{nodes,[{disc,['rabbit@live-mq-01']},
{ram,['rabbit@live-mq-03','rabbit@live-mq-02']}]},
{running_nodes,['rabbit@live-mq-02','rabbit@live-mq-03','rabbit@live-mq-01']},
{cluster_name,<<"rabbit@live-mq-01">>},
{partitions,[]}]
...done.
我们可以看到三个节点都加入了集群中,两个ram节点、一个disc节点。其中三个节点都在运行中,以及集群名称显示。
2)允许远程用户访问
第一、添加mq用户并设置密码
1 root@live-mq-01:~# rabbitmqctl add_user mq 123456
第二、设置mq用户为管理员
1 root@live-mq-01:~# rabbitmqctl set_user_tags mq administrator
第三、设置mq用户的权限,指定允许访问的vhost以及write/read
root@live-mq-01:~# rabbitmqctl set_permissions -p "/" mq ".*" ".*" ".*"
Setting permissions foruser"live"invhost"/"...
...done.
第四、查看vhost(/)允许哪些用户访问
root@live-mq-01:~# rabbitmqctl list_permissions -p /
Listing permissions invhost"/"...
mq.*.*.*
...done.
第五、配置允许远程访问的用户,rabbitmq的guest用户默认不允许远程主机访问。
root@live-mq-01:~# cat /etc/rabbitmq/rabbitmq.config
[
{rabbit,[{tcp_listeners,[5672]},{loopback_users,["mq"]}]}
].
ps:主机1设置完以上这些之后,在集群内的机器都会同步此配置,但是/etc/rabbitmq/rabbitmq.config文件不会同步。
root@live-mq-02:~# rabbitmqctl list_users
Listing users...
mq[administrator]
...done.
最后,可以选择删除默认guest用户(密码也是guest)
1 root@live-mq-01:~# rabbitmqctl delete_user guest
3)RabbitMQ退出集群
假设要把rabbit@live-mq-02退出集群,在rabbit@live-mq-02上执行:
$rabbitmqctl stop_app
$rabbitmqctl reset
$rabbitmqctl start_app
在集群主节点上执行
$rabbitmqctl forget_cluster_node rabbit@live-mq-02
4)RabbitMQ集群重启
集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启:
先在一个节点上执行
$rabbitmqctl force_boot
$service rabbitmq-server start
在其他节点上执行
$service rabbitmq-server start
查看cluster状态是否正常(要在所有节点上查询)。
rabbitmqctl cluster_status
如果有节点没加入集群,可以先退出集群,然后再重新加入集群。
上述方法不适合内存节点重启,内存节点重启的时候是会去磁盘节点同步数据,如果磁盘节点没起来,内存节点一直失败。
5)RabbitMQ开启图形化页面
RabbitMQ提供了一个非常友好的图形化监控页面插件(rabbitmq_management),让我们可以一目了然看��Rabbit的状态或集群状态。
分别在三个节点上执行开启rabbitmq_management插件的命令,注意开启几个节点在监控页面就可以看见几个节点:
root@live-mq-01:~# rabbitmq-plugins enable rabbitmq_management
root@live-mq-01:~# rabbitmq-plugins list
查看监听端口(插件监控的端口是15672)