赞
踩
本博文主要围绕RabbitMQ管理这个主题展开,包括多租户、权限、用户、应用和集群管理、服务端状态等方面,并且从侧面讲述rabbitmqctl 工具和rabbitmq_management 插件的使用。
每一个RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host) ,简称为vhost。每一个vhost本质上是一个独立的小型RabbitMQ 服务器,拥有自己独立的队列、交换器及绑定关系等,井且它拥有自己独立的权限。vhost 就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,为不同程序安全保密地运行数据,它既能将同一个RabbitMQ 中的众多客户区分开,又可以避免队列和交换器等命名冲突。vhost 之间是绝对隔离的,无法将vhostl 中的交换器与vhost2 中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。如果在使用RabbitMQ 达到一定规模的时候,建议用户对业务功能、场景进行归类区分,并为之分配独立的vhost。
vhost 是AMQP 概念的基础,客户端在连接的时候必须制定一个vhost. RabbitMQ 默认创建的vhost 为"/" , 如果不需要多个vhost 或者对vhost 的概念不是很理解,那么用这个默认的vhost 也是非常合理的,使用默认的用户名guest 和密码guest 就可以访问它。但是为了安全和方便,建议重新建立一个新的用户来访问它。
- 可以使用rabbitmqctl add vhost {vhost} 命令创建一个新的vhost,大括号里的参数表示vhost 的名称。
- 示例如下:
-
- [root@nodel -]# rabbitmqctl add vhost vhostl
- Creating vhost "vhostl"
-
- 可以使用rabbitmqctl list vhosts [vhostinfoitem...) 来罗列当前vhost 的相关信息。目前vhostinfoitem 的取值有2 个。
-
- name: 表示vhost 的名称。
- tracing: 表示是否使用了RabbitMQ 的trace 功能。
-
- 对应的删除vhost 的命令是: rabbitmqctl delete_vhost {vhost) ,其中大括号里面的参数表示vhost 的名称。删除一个vhost 同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数和策略等信息。
-
- [root@nodel -]# rabbitmqctl delete_vhost vhostl
- Deleting vhost "vhostl "
-
- [root@nodel -]# rabbitmqctl list vhosts
- Listing vhosts
AMQP 协议中并没有指定权限在vhost 级别还是在服务器级别实现,由具体的应用自定义。在RabbitMQ 中,权限控制则是以vhost 为单位的。当创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派的vhost 内的队列、交换器和绑定关系等。因此, RabbitMQ中的授予权限是指在vhost 级别对用户而言的权限授予。
- 相关的授予权限命令为: rabbitmqctl set permissions [-p vhost] {user)
- {conf) {write) {read) 。其中各个参数的含义如下所述。
-
- vhost:授予用户访问权限的vhost名称,可以设置为默认值,即 vhost 为 "/"
-
- user:可以访问指定vhost 的用户名。
-
- conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
-
- write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
-
- read:一个用于匹配用户在哪些资源上拥有可读权限的正则表达式。
注:可配直指的是队列和交换器的创建及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息及清空整个队列等。
在RabbitMQ 中,用户是访问控制( Access Contro l)的基本单元,且单个用户可以跨越多个vhost 进行授权。针对一至多个vhost,用户可以被赋予不同级别的访问权限,并使用标准的用户名和密码来认证用户。
创建用户的命令为rabbitmqctl add user {username} {password} 。其中username 表示要创建的用户名称; password 表示创建用户登录的密码。可以通过rabbitmqctl chan ge_password {username} {newpassword} 命令来更改指定用户的密码, 其中username 表示要变更密码的用户名称,newpassword 表示要变更的新的密码。
- 具体创建一个用户名为root 、密码为root1 23 的用户:
- [root@nodel -] # rabbitmqctl add_user root root123
- Creating user "root "
-
- 举例,将root 用户的密码变更为root3 21 :
- [root@nodel -] # rabbitmqctl change_password root root321
- Changing password for user " root "
同样可以清除密码,这样用户就不能使用密码登录了,对应的操作命令为rabbitmqctl clear password {username} ,其中user口ame 表示要清除密码的用户名称。使用rabbitmqctl authentiçate_user {userηame} {password} 可以通过密码来验证用户,其中user口ame 表示需要被验证的用户名称, password 表示密码。
删除用户的命令是rabbitmqctl delete user {username) ,其中username 表示要删除的用户名称。
- 删除root 用户的示例如下:
- [root@nodel - ]# rabbitmqctl delete user root
- Deleting user " root"
- [root@nodel - ]# rabbitmqctl list users
- Listing users
- guest [administrator]
- root []
-
- 用户的角色分为5 种类型。
- none: 无任何角色。新创建的用户的角色默认为none。
-
- manageme 口t: 可以访问Web 管理页面。Web 管理页面在5.3 节中会有详细介绍。
-
- policymaker: 包含management 的所有权限,并且可以管理策略( Policy) 和参数Parameter。
-
- monitoring: 包含management 的所有权限,并且可以看到所有连接、信道及节点相关的信息。
-
- administartor: 包含monitoring 的所有权限,井且可以管理用户、虚拟主机、权限、策略、参数等。administator 代表了最高的权限。
- rabbitmqctl stop [pid_file]
-
- 用于停止运行RabbitMQ 的Erlang 虚拟机和RabbitMQ 服务应用。如果指定了pid_file ,还需要等待指定进程的结束。其中pid file 是通过调用rabbitmq-server 命令启动RabbitMQ 服务时创建的,默认情况下存放于Mnesia 目录中,可以通过RABBITMQ PID FILE这个环境变量来改变存放路径。注意,如果使用rabbitmq -ser ver -detach 这个带有-detach 后缀的命令来启动RabbitMQ 服务则不会生成pid file 文件。
-
- rabbitmqctl shutdown
-
- 用于停止运行RabbitMQ 的Erlang 虚拟机和RabbitMQ 服务应用。执行这个命令会阻塞直到Erlang 虚拟机进程退出。如果RabbitMQ 没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop 不同的是,它不需要指定pid file 而可以阻塞等待指定进程的关闭。
-
- rabbitmqctl stop_ app
-
- 停止RabbitMQ 服务应用,但是Erlang 虚拟机还是处于运行状态。此命令的执行优先于其他管理操作(这些管理操作需要先停止RabbitMQ 应用),比如rabbitmqctl reset 。
-
- rabbitmqctl start_ app
-
- 启动RabbitMQ 应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ 应用,比如rabbitmqctl reset 。
-
- rabbitmqctl wait [pid_file]
-
- 等待RabbitMQ 应用的启动。它会等到pid_file 的创建,然后等待pid_file 中所代表的进程启动。当指定的进程没有启动RabbitMQ 应用而关闭时将会返回失败。
-
- rabbitmqctl reset
-
- 将RabbitMQ 节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如己配置的用户、vhost 等,以及删除所有的持久化消息。执行rabbi tmqctl reset 命令前必须停止RabbitMQ 应用(比如先执行rabbitmqctlstop_app) 。
-
- rabbitmqctl force reset
-
- 强制将RabbitMQ 节点重置还原到最初状态。不同于rabbitmqctl reset 命令,rabbitmqctl force reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重直节点。它只能在数据库或集群配置己损坏的情况下使用。与rabbitmqctl reset命令一样,执行rabbitmqctl force reset 命令前必须先停止RabbitMQ 应用。
-
- rabbitmqctl rotate_logs {suffix}
-
- 指示RabbitMQ 节点轮换日志文件。RabbitMQ 节点会将原来的日志文件中的内容追加到"原始名称+后缀"的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,会重新创建。如果不指定后缀suffix. 则日志文件只是重新打开而不会进行轮换。示例如下所示,原日志文件为rabbit@nodel .log 和rabbit@nodel-sasl.1og. 轮换日志之后,原日志文件中的内容就被迫加到rabbit@nodel .log.l 和rabbit@nodel-sasl.1og.1 日志中,之后重新建立rabbit@nodel .log 和rabbit@nodel-sasl.1og 文件用来接收新的日志。
-
- rabbitmqctl hipe_compile {directory}
-
- 将部分RabbitMQ 代码用HiPE (HiPE 是指High Performance Erlang ,是Erlang 版的且T)编译,井且将编译后的.beam 文件( beam 文件是Erlang 编译器生成的文件格式,可以直接加载到Erlang 虚拟机中运行的文件格式〉保存到指定的文件目录中。如果这个目录不存在则会自行创建。如果这个目录中原本有任何. beam 文件,则会在执行编译前被删除。如果要使用预编译的这些文件,则需要设置RABBITMQ SERVER CODE PATH 这个环境变量来指定hipe_ compile调用的路径。
- rabbitmqctl joio_cluster {cluster_node} [--ram]
-
- 将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ 应用井重置节点。
-
- rabbitmqctl cluster_status
-
- 显示集群的状态
-
- rabbitmqctl change_cluster_node_type {disclram}
-
- 修改集群节点的类型。在这个命令执行前需要停止RabbitMQ 应用
-
- rabbitmqctl forget_cluster_ node [--offiine]
-
- 将节点从集群中删除,允许离线执行
-
- rabbitmqctl update_ cluster_nodes {clusternode}
-
- 在集群中的节点应用启动前咨询clusternode 节点的最新信息, 井更新相应的集群信息。
-
- rabbitmqctl force_boot
-
- 确保节点可以启动,即使它不是最后一个关闭的节点。通常情况下,当关闭整个RabbitMQ集群时,重启的第一个节点应该是最后关闭的节点,因为它可以看到其他节点所看不到的事情。但是有时会有一些异常情况出现,比如整个集群都掉电而所有节点都认为它不是最后一个关闭的。在这种情况下,可以调用rabbitmqctl force_boot 命令,这就告诉节点可以无条件地启动节点。在此节点关闭后,集群的任何变化,它都会丢失。如果最后一个关闭的节点永久丢失了,那么需要优先使用rabbitmqctl forget cluster 一口ode 一offline 命令,因为它可以确保镜像队列的正常运转。
-
- rabbitmqctl sync_queue [-p vhost] {queue}
-
- 指示未同步队列queue 的slave 镜像可以同步master 镜像行的内容。同步期间此队列会被阻塞(所有此队列的生产消费者都会被阻塞),直到同步完成。此条命令执行成功的前提是队列queue 配置了镜像。注意, 未同步队列中的消息被耗尽后, 最终也会变成同步,此命令主要用于未耗尽的队列。
- rabbitmqctl cancel_sync_queue [-p vhost] {queue}
-
- 取消队列queue 同步镜像的操作。
-
- rabbitmqctl set_cluster_name {name}
-
- 设置集群名称。集群名称在客户端连接时会通报给客户端。Federation 和Shovel 插件也会有用到集群名称的地方,详细内容可以参考第8 章。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。在Web 管理界面的右上角(可参考图5 -1 )有个"(生且应)"的地方,点击也可以修改集群名称。
- rabbitmqctllist_queues [-p vhost] [queueinfoitem ...]
-
- 此命令返回队列的详细信息,如果无[-p vhost] 参数,将显示默认的vhost 为" j " 中的队列详情。queueinfoitem 参数用于指示哪些队列的信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。queueinfoitem 可以是下面列表中的任何值。
-
- rabbitmqctllist_exchanges [-p vhost] [exchangeinfoitem ...]
-
- 返回交换器的详细细节,如果无[ - p vhostl 参数,将显示默认的vhost 为U / " 中的交换器详情。exchangeinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。exchangeinfoitem 可以是下面列表中的任何值。
- rabbitmqctllist_bindings [-p vhost] [bindinginfoitem ...]
- 返回绑定关系的细节, 如果无[-p vhostl 参数, 将显示默认的vhost 为"/"中的绑定关系详情。bindinginfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。bindinginfoitem 可以是下面列表中的任何值。
- rabbìtmqctllìst_connectìons [connectìonìnfoìtem ...]
- 返回TCP!IP连接的统计信息。connectioninfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。connectioninfoitem 可以是下面列表中的
- 任何值。
- rabbitmqctllist_ channels [channelinfoitem ...]
- 返回当前所有信道的信息。channelinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。channelinfoitem 可以是下面列表中的任何值。
- rabbitmqctllist_consumers [-p vhost]
- 列举消费者信息。每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认、prefetch_ count 及参数列表这些信息。
- rabbitmqctl status
- 显示Broker 的状态, 比如当前Erlang 节点上运行的应用程序、RabbitMQÆrlang 的版本信息、os 的名称、内存及文件描述符等统计信息
- rabbitmqctl node_health_check
- 对RabbitMQ 节点进行健康检查, 确认应用是否正常运行、list queues 和list channels是否能够正常返回等。
- rabbitmqctl environment
- 显示每个运行程序环境中每个变量的名称和值。
- rabbitmqctl report
- 为所有服务器状态生成一个服务器状态报告,井将输出重定向到一个文件
- rabbitmqctl eval {expr}
- 执行任意Erlang 表达式。相关示例如下(示例命令用于返回rabbitmqctl 连接的节点名称)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。