集群-消息队列-RabbitMQ-Centos7
RabbitMQ部署文档
消息队列,先写入再调用,与tomcat关联
1. 单点
单点部署RabbitMQ直接运行脚本。
ftp://172.16.0.99:/scripts/RabbitMQ-3.6.11-centos7.sh
访问:本机IP:15672
用户名:admin
密码:1qazxsw2
===============================================
2. 集群
172.16.0.51 RabbitMQ1
172.16.0.52 RabbitMQ2
172.16.0.53 RabbitMQ3
2.1 先部署RabbitMQ1
ftp://172.16.0.99:/scripts/RabbitMQ-3.6.11-centos7.sh
[root@RabbitMQ1 ~]# tail -3 /etc/hosts
192.168.1.51 RabbitMQ1.up.com RabbitMQ1
192.168.1.52 RabbitMQ2.up.com RabbitMQ2
192.168.1.53 RabbitMQ3.up.com RabbitMQ3
使用RabbitMQ1克隆RabbitMQ2,RabbitMQ3。
检查.erlang.cookie文件:
[root@RabbitMQ1 ~]# cd /var/lib/rabbitmq/
[root@RabbitMQ1 rabbitmq]# cat .erlang.cookie
CLJYRPKIXSWCDKDODKPL
[root@RabbitMQ1 /var/lib/rabbitmq]# ll .erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Jul 30 00:00 .erlang.cookie
[root@RabbitMQ2 ~]# cd /var/lib/rabbitmq/
[root@RabbitMQ2 rabbitmq]# cat .erlang.cookie
CLJYRPKIXSWCDKDODKPL
[root@RabbitMQ2 /var/lib/rabbitmq]# ll .erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Jul 30 00:00 .erlang.cookie
[root@RabbitMQ3 ~]# cd /var/lib/rabbitmq/
[root@RabbitMQ3 rabbitmq]# cat .erlang.cookie
CLJYRPKIXSWCDKDODKPL
[root@RabbitMQ3 /var/lib/rabbitmq]# ll .erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Jul 30 00:00 .erlang.cookie
2.2 使用detached参数,在后台启动Rabbit Node
要先停止现有的Rabbitmq-server,再重新在后台运行。
[root@RabbitMQ1 ~]# rabbitmqctl stop
Stopping and halting node rabbit@RabbitMQ1
[root@RabbitMQ2 ~]# rabbitmqctl stop
Stopping and halting node rabbit@RabbitMQ2
[root@RabbitMQ3 ~]# rabbitmqctl stop
Stopping and halting node rabbit@RabbitMQ3
[root@RabbitMQ1 ~]# rabbitmq-server -detached
[root@RabbitMQ2 ~]# rabbitmq-server -detached
[root@RabbitMQ3 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@RabbitMQ1 ~]# netstat -antp | grep 5672
[root@RabbitMQ2 ~]# netstat -antp | grep 5672
[root@RabbitMQ3 ~]# netstat -antp | grep 5672
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 5173/beam.smp
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 5173/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 5173/beam.smp
[root@RabbitMQ1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ1
[{nodes,[{disc,[rabbit@RabbitMQ1]}]},
{running_nodes,[rabbit@RabbitMQ1]},
{cluster_name,<<"rabbit@RabbitMQ1">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ1,[]}]}]
[root@RabbitMQ2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ2
[{nodes,[{disc,[rabbit@RabbitMQ2]}]},
{running_nodes,[rabbit@RabbitMQ2]},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ2,[]}]}]
[root@RabbitMQ3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ3
[{nodes,[{disc,[rabbit@RabbitMQ3]}]},
{running_nodes,[rabbit@RabbitMQ3]},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ3,[]}]}]
2.3 将RabbitMQ1、RabbitMQ2、RabbitMQ3组成集群
(1)RabbitMQ2
[root@RabbitMQ2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@RabbitMQ2
[root@RabbitMQ2 ~]# rabbitmqctl join_cluster rabbit@RabbitMQ1
Clustering node rabbit@RabbitMQ2 with rabbit@RabbitMQ1
[root@RabbitMQ2 ~]# rabbitmqctl start_app
Starting node rabbit@RabbitMQ2
(2)RabbitMQ3
[root@RabbitMQ3 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@RabbitMQ3
[root@RabbitMQ3 ~]# rabbitmqctl join_cluster rabbit@RabbitMQ1
Clustering node rabbit@RabbitMQ3 with rabbit@RabbitMQ1
[root@RabbitMQ3 ~]# rabbitmqctl start_app
Starting node rabbit@RabbitMQ3
查看集群的状态:
[root@RabbitMQ1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ1
[{nodes,[{disc,[rabbit@RabbitMQ1,rabbit@RabbitMQ2,rabbit@RabbitMQ3]}]},
{running_nodes,[rabbit@RabbitMQ3,rabbit@RabbitMQ2,rabbit@RabbitMQ1]},
{cluster_name,<<"rabbit@RabbitMQ1">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ3,[]},{rabbit@RabbitMQ2,[]},{rabbit@RabbitMQ1,[]}]}]
[root@RabbitMQ2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ2
[{nodes,[{disc,[rabbit@RabbitMQ1,rabbit@RabbitMQ2,rabbit@RabbitMQ3]}]},
{running_nodes,[rabbit@RabbitMQ3,rabbit@RabbitMQ1,rabbit@RabbitMQ2]},
{cluster_name,<<"rabbit@RabbitMQ1">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ3,[]},{rabbit@RabbitMQ1,[]},{rabbit@RabbitMQ2,[]}]}]
[root@RabbitMQ3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@RabbitMQ3
[{nodes,[{disc,[rabbit@RabbitMQ1,rabbit@RabbitMQ2,rabbit@RabbitMQ3]}]},
{running_nodes,[rabbit@RabbitMQ1,rabbit@RabbitMQ2,rabbit@RabbitMQ3]},
{cluster_name,<<"rabbit@RabbitMQ1">>},
{partitions,[]},
{alarms,[{rabbit@RabbitMQ1,[]},{rabbit@RabbitMQ2,[]},{rabbit@RabbitMQ3,[]}]}]
浏览器访问:
http://172.16.0.51:15672/#/
http://172.16.0.52:15672/#/
http://172.16.0.53:15672/#/
在【Nodes】栏可以看到3个节点。
RabbitMQ1 说明书
1. 用户管理
用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
(1)新增一个用户
# rabbitmqctl add_user Username Password
(2)删除一个用户
# rabbitmqctl delete_user Username
(3)修改用户的密码
# rabbitmqctl change_password Username Newpassword
(4)查看当前用户列表
# rabbitmqctl list_users
2. 用户角色
按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1)超级管理员(administrator)
可登录管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2)监控者(monitoring)
可登录管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3)策略制定者(policymaker)
可登录管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
(4)普通管理者(management)
仅可登录管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5)其他
无法登录管理控制台,通常就是普通的生产者和消费者。
3. 用户权限
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如:将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
(1)设置用户权限
# rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
设置用户角色,$user用户名 $permissions用户角色
# rabbitmqctl set_user_tags $user $permissions
(2)查看(指定hostpath)所有用户的权限信息
# rabbitmqctl list_permissions [-p VHostPath]
(3)查看指定用户的权限信息
# rabbitmqctl list_user_permissions User
(4)清除用户的权限信息
# rabbitmqctl clear_permissions [-p VHostPath] User