RabbitMQ的运行与管理

本章内容

  • 节点及节点启停
  • rabbit中的权限
  • 查看rabbit

节点及节点启停

        我们都知道Rabbit是使用Erlang语言编写的,它有自己的一套方式。主要包含两个概念:Erlang节点和Erlang程序。我们所讲的通常意义上的节点是批Rabbit服务器的实例。实际上,节点描述的是一个Erlang节点上运行着一个Erlang应用程序。与java语言中的jvm类似,Erlang节点也可以看作是一个虚拟机,但不同于JVM的是多个Erlang应用程序可以运行在同一个节点之上,并且节点与节点之间可以进行本地通信(不管是否在同一台机器上),这使得调用另一个节点的程序方法时像是调用本地方法一样。

启动与停止

        rabbitmq启动节点与应用程序非常简单,在安装目录下找到/sbin目录后直接运行rabbitmq-server。这样就启动了节点与节点上的所有应用程序,启动的日志可以在默认的目录(/var/log/rabbitmq)下找到对应的日志文件查看。你也可以通过参数的方式启动节点,例如:增加-detached参数,rabbitmq-server -detached以守护程序的方式在后台运行。节点与应用都已经启动了,那么如何停止呢?如果是以非后台运行的方式启动的话,但按下CTRL+C时可以看到:

                                      BREAK:(a)bort (c)ontinue 等等内容

        这是节点在询问你是想要关闭应用程序还是整个节点,又或者这只是误操作,你还是想继续保持运行。如果是想关闭整个节点,选择abort即可。除此之外,我们还可以使用rabbitmqctl命令来操作,它几乎是所有rabbitmq管理需要的一站式解决方案,当执行./sbin/rabbitmqctl stop命令时它就会和本地节点进行通信并指示其干净地关闭。你也可以指定关闭的节点(包括远程节点),只需要传入 -n rabbit@[hostname]选项即可。当你看到rabbit stoped / mnesia stoped / os-mon stoped的时候,整个节点也就完全关闭了。

        上面也说了,一个节点可以运行多个应用程序,如果我只是想停止rabbitmq这一个应用程序而不是整个节点怎么办呢?只需要运行./rabbitmqctl stop_app即可。对应的start_app是启动应用程序。

配置

        与其它应用程序类似,rabbitmq也允许你设置系统中可调节的参数并通过配置文件来进行设置,rabbitmq的配置文件是etc/rabbitmq.config,其格式类似于:

         [

             {mnesia,[{dump_log_writetheashold,1000}]},

             {rabbit,[{vm_memory_high_watermark,0.4}]}

        ]

  • mnesia是内建在rabbitmq上的非SQL型数据库,用来存储交换器、队列元数据。
  • rabbit是rabbit特定的配置选项。

它们中的每一项的格式都是{[option-name],[option-value]},具体有哪些option-name请参考api【http://www.rabbitmq.com/configure.html

RabbitMQ中的权限

          在rabbitmq中,用户是访问控制的基本单元,权限控制的对像是具体的vhost,单个用户可以跨多个vhost进行授权。

管理用户

       可以通过

                 rabbitmqctl add_user xiaoming 123456

      来创建一个用户名为xiaoming密码为123456的用户。

      如果决定作废一个用户的话可以使用

                    rabbitmqctl delete_user xiaoming

      来删除一个用户,但要注意的是任何引用在此用户下的访问控制条目都将会自动删除并且不会警告。所以请慎重删除用户操作。

     修改一个用户的密码,可以通过:

                   rabbitmqctl change_password xiaoming new_password

     来修改密码。

     可以通过:

             rabbitmqctl list_users

      来查看有哪些用户并且每个用户是什么角色,其返回结果为:

                     Listing users ...

                         user tags

                        xiaoming []

                       admin [administrator]

                       guest [administrator]

这说明新增加的用户还没有角色,可以通过:

rabbitmqctl set_user_tags rabbit management

来为xiaoming用户增加management的角色,只有添加了角色的用户才可以访问控制台。

用户角色

rabbitmq的用户角色可以分为:

  • none,不能访问management plugin
  • management,用户可以通过AMQP做的任何事外,还可以附加如下操作:
    • 列出自己可以通过AMQP登录的vhosts列表
    • 查看vhosts中的交换器、队列及绑定信息
    • 查看和关闭自己的channels和connnections
    • 查看所有vhosts的全局统计信息
  • policymaker,除management可以做的事情外,还可以附加如下操作:
    • 查看、创建和删除自己的vhosts所属的policies和parmeters
  • monitoring,除mangement可以做的事情外,还可以附加如下操作:
    • 列出rabbit中的所有vhosts(也包括不是自己的vhost)
    • 查看其它用户的channels和connections
    • 查看节点级别的数据
    • 查看所有vhosts的全局统计信息
  • administrator,管理员权限,也是最大的权限角色,除policymaker和monitoring可以做的事外,还可以操作:
    • 创建和删除vhost
    • 管理users
    • 管理permissions
    • 关闭其它用户的connections

管理权限

          rabbitmq实现了一套访问控制列表(ACL)风格的权限系统,它能够进行细粒度的控制权限,同时可以授予用户读、写、配置权限

  • 读,有关消费消息的任何操作,包括“清除”整个队列
  • 写,发布消息
  • 配置,队列和交换器的创建和删除

我们可以通过

                  rabbitmqctl set_permissions -p vhost xiaoming ".*" ".*" ".*"

这种命令的方式来给用户xiaoming赋权限。上例中的-p vhost表示是把权限赋到哪一个vhost上,而xiaoming就是被赋权限的用户。".*" ".*" ".*"指授予的权限 映射成:配置、写、读。“.*”的意思就是匹配任何队列和交换器。而下面的命令

rabbitmqctl set_permissions -p vhost xiaoming ".*" "order-.*" ".*"

意思是只可以操作名字以order-开头的交换器和队列。“”空字符串表示不匹配任何交换器或队列。

可以使用:rabbitmqctl list_permissions -p vhost列出在此vhost上的用户的权限

如果修改一个用户的权限,是重新执行set_permissions命令来设置。可以使用clear_permissions命令来清除用户在vhost上的权限。

综上所述,权限控制非常容易创建并且也很灵活,你可以为某个vhost创建复杂的权限结构,但如果这么做的话,如果没有单独的文档梳理,时间久后会很不好理解。所以,如果可能的话,尽量使用vhost来分隔业务并最小化每个vhost的访问控制条目。

查看rabbitmq

我们可以同样使用rabbitmqctl的相关命令来查看rabbitmq中的一些信息,例如

                 rabbitmqctl list_exchanges name type durable auto_delete

                rabbitmqctl list_queues name messages consumers memory

                rabbitmqctl list_bindings

等等。

日志

          在rabbit.config配置文件中我们可以通过{log_root, "/var/log/rabbitmq"},来指定rabbitmq运行的日志存储位置,同时也可以通过RABBITMQ_LOG_BASE的环境变量来指定。在此文件下会创建两个日志文件:

rabbitmq_nodename-sasl.log,rabbitmq_nodename是节点的名称一般是_rabbit@localhost_或者就是rabbit。SASL(System Application Support Libraries,系统应用程序支持库)记录的是Erlang相关的信息。

rabbitmq_nodename.log,记录对rabbitmq的操作日志,包含连接的主机客户端等等。

轮换日志:服务器启动会重新创建日志文件并在旧的文件后面添加一个数字,例如:rabbit.log.1。如果你想手动轮换日志文件或者通过cronjob来完成的话,可以使用如下命令:

rabbitmqctl rotate_logs suffix

其中suffix是指一个单词,通常是一个数字,例如:

rabbitmqctl rotate_logs .1

总结

         本章主要是讲rabbit服务的日常管理工作是如何进行的,通过这些内容我们可以创建非系统默认的一些参数来运行rabbit,例如:我们可以新创建一个vhost和一个新用户并赋上一些权限。以此来使得rabbitmq在实现运用中显示更强大的功能,满足不同业务的需求。

猜你喜欢

转载自blog.csdn.net/xpsallwell/article/details/84837687
今日推荐