RabbitMQ消息队列
说明:用户权限指的是用户对exchange(交换器),queue(队列)的操作权限,包括配置权限,读写权限。虚拟主机类似于Apache的虚拟主机,如果没有虚拟主机,当RabbitMQ中的数据越来越庞大,队列越来越多,随之而来的是令人头痛的管理问题,比如队列、交换器命名冲突,它们相互影响等等。虚拟主机提供了资源的逻辑分组和分隔,每一个虚拟主机本质上是mini版的RabbitMQ服务器,他们有用自己的
一:RabbitMQ介绍
RabbitMQ是一款在全球范围内使用非常广泛的开源消息队列中间件。它轻量级、易部署、并支持多种协议。它基于Erlang开发,天生拥有高并发的能力。
1:RabbitMQ相关术语
(1)生产者
产生消息的进程或服务
(2)消费者
接收消息的进程或服务
(3)队列
RabbitMQ是消息队列中间件,而真正储存消息数据的就是队列,队列可以有很多。
(4)交换器
类似于网络设备交换机,它可以根据不同的关键字,将消息发送到不同的队列。
(5)虚拟主机
虚拟主机类似于Apache的虚拟主机,如果没有虚拟主机,当RabbitMQ中的数据越来越庞大,队列越来越多,随之而来的是令人头痛的管理问题,比如队列、交换器命名冲突,它们相互影响等等。虚拟主机能够解决这些问题,而不需要我们部署多个RabbitMQ来负责不同的业务。
虚拟主机提供了资源的逻辑分组和分隔,每一个虚拟主机本质上是mini版的RabbitMQ服务器,他们有用自己的连接、队列、绑定、交换器,更重要的是有用自己的权限机制,这有点类似服务器和运行在服务器上的虚拟机一样。
rabbitmq常用命令
1:虚拟机管理
[root@localhost ~]# rabbitmqctl list_vhosts ##列出所有的虚拟主机
[root@localhost ~]# rabbitmqctl add_vhost fll ##创建名字叫fll的虚拟主机
[root@localhost ~]# rabbitmqctl delete_vhost fll ##删除名字叫fll的虚拟主机
rabbitmqctl add_vhost <虚拟主机名字> #创建虚拟主机
rabbitmqctl delete_vhost <虚拟主机名字> #删除虚拟主机
2:用户管理
[root@localhost ~]# rabbitmqctl add_user user1 user1_passwd
##创建user1用户,密码为user1_passwd
[root@localhost ~]# rabbitmqctl list_users ##列出所有用户
[root@localhost ~]# rabbitmqctl change_password user1 new_passwd
##更改user1的密码为new_passwd
[root@localhost ~]# rabbitmqctl delete_user user1 #删除user1用户
rabbitmqctl list_users #列出用户
rabbitmqctl add_user <username> <password> #创建用户
rabbitmqctl change_password <username> <password> ##更改用户密码
rabbitmqctl delete_user <username> #删除用户
rabbitmqctl clear_password <username> #清除用户密码
3:tags角色介绍
(1) 超级管理员(administrator):guest
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
[root@localhost ~]# rabbitmqctl set_user_tags user1 managemnet
##赋予user1用户management角色
[root@localhost ~]# rabbitmqctl set_user_tags user2 monitoring management
##同时赋予多个角色
[root@localhost ~]# rabbitmqctl set_permissions -p fll user1 '.*' '.*' '.*'
##针对fll虚拟主机给user1用户设置所有的配置、读写queue和exchange的权限。默认是没有任何权限的
rabbitmqctl set_user_tags <username> <rolename> #赋予用户某个角色
rabbitmqctl set_permissions -p <vhostname> <username> <conf> <write> <read>
#给用户设置权限
说明:用户权限指的是用户对exchange(交换器),queue(队列)的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。
[root@localhost ~]# rabbitmqctl list_user_permissions user1 ##列出user1的权限
[root@localhost ~]# rabbitmqctl list_permissions -p fll ##列出fll下的所有用户权限
[root@localhost ~]# rabbitmqctl clear_permissions -p fll user2
##清除user2在fll上的权限
rabbitmqctl list_user_permissions <username>
#列出某用户的权限,即该用户对哪个虚拟主机有权限
rabbitmqctl list_permissions -p <vhostname>
#列出指定虚拟主机下所有用户的权限,即哪些用户对该虚拟主机有权限
rabbitmqctl clear_permissions -p <vhostname> <user>
#清除某用户在指定虚拟机上的授权
4:插件管理
rabbitmq-plugins list ##获取RabbitMQ插件列表
rabbitmq-plugins enable <插件名字> ##安装RabbitMQ插件
rabbitmq-plugins disable <插件名字> ##卸载某个插件
5:限制
rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 256}'
#设置虚拟主机的最大连接数
rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": 0}'
#不允许客户端连接虚拟主机
rabbitmqctl set_vhost_limits -p vhost_name '{"max-connections": -1}'
#不限制连接数
rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": 1024}'
#限制虚拟主机里最大的队列数
rabbitmqctl set_vhost_limits -p vhost_name '{"max-queues": -1}'
#不限制队列数
6:其他
rabbitmqctl list_exchanges
#列出所有的交换器
rabbitmqctl list_bindings
#列出所有的绑定,即把exchange和queue按照路由规则绑定起来
rabbitmqctl list_queues
#分别查看当前系统种存在的Exchange和Exchange上绑定的Queue信息。
rabbitmqctl status
#查看运行信息
五:RabbitMQ集群
RabbitMQ本身是基于Erlang编写的,Erlang天生支持分布式(通过同步Erlang集群各节点的cookie来实现),因此不需要像Kafka那样通过ZooKeeper来实现分布式集群。
1:元数据
RabbitMQ内部有各种基础构件,包括队列、交换器、绑定、虚拟主机等,他们组成了AMQP协议消息通信的基础,而这些构件以元数据的形式存在
2:内存节点与磁盘节点
在集群中的每个节点,要么是内存节点,要么是磁盘节点,如果是内存节点,会将所有的元数据信息仅存储到内存中,而磁盘节点则不仅会将所有元数据存储到内存上, 还会将其持久化到磁盘。所以在搭建集群的时候,为了保证数据的安全性和性能,最好是两种节点都要有
3:规划
主机名 | Ip | 节点类型 |
centos01 | 192.168.10.101 | 磁盘节点 |
Centos02 | 192.168.10.102 | 内存节点 |
Centos03 | 192.168.10.103 | 内存节点 |
4:部署集群
(1)配置hosts以及hostname
三台机器设置hostname
hostnamectl set-hostname centos01
hostnamectl set-hostname centos02
hostnamectl set-hostname centos03
三台机器上都需要编辑如下hosts
192.168.10.101 centos01
192.168.10.102 centos02
192.168.10.103 centos03
(2)关闭selinux以及firewalld
三台机器都要执行
setenforce 0
systemctl stop firewalld
(3)安装rabbitmq
三台机器都要安装,步骤参考上面
(4)启动服务
三台机器都启动起来
systemctl start rabbitmq-server
(5)安装management插件
三台机器都要开启
rabbitmq-plugins enable rabbitmq_management
(6)编辑cookie文件
vim /var/lib/rabbitmq/.erlang.cookie #将三台机器的该文件内容编辑为一致
cat /var/lib/rabbitmq/.erlang.cookie
在centos01上操作(其实任何一个上都可以),
可以先将02,03上的cookie删除,然后再同步
rsync -av /var/lib/rabbitmq/.erlang.cookie cenos02:/var/lib/rabbitmq/.erlang.cookie
rsync -av /var/lib/rabbitmq/.erlang.cookie cenos03:/var/lib/rabbitmq/.erlang.cookie
(7)分配节点
centos01为磁盘节点,centos02和centos03为内存节点
centos02和centos03上都执行:
停止rabbitmq
systemctl start rabbitmq-server
rabbitmqctl stop_app
将centos02作为内存节点连接到centos01
rabbitmqctl join_cluster --ram rabbit@centos01
开启rabbitmq
rabbitmqctl start_app
查看集群状态
rabbitmqctl cluster_status
更多推荐
所有评论(0)