rabbitmq怎么设置一个账户 cancan t access ttyvirtual hosts

rabbitmq的坑 - 徒涉春冰 - 博客园
刚接触rabbitmq,今天早上发现一个发布消息的进程僵死了,最后发现是rabbitmq默认的磁盘占用是80%,超过就僵死了。
搜了一下,可以删除vhost,再重新建立vhost,这样才能释放空间。反正要停止服务几分钟,还不如添加一个硬盘大点的节点,平衡之后将现在这个节点成为成为内存节点。废话不多说,看代码。
&在新节点上设置env,如下
echo &&&/etc/rabbitmq/rabbitmq-env.conf &&EOF
RABBITMQ_MNESIA_BASE=/pool/rabbitmq/dataRABBITMQ_LOG_BASE=/pool/rabbitmq/log
RabbitMQ会提供一些机制比如把exchange queue设置为durable,persistent mode设置为2,等等来尽可能保证消息不丢失,但是这种保证是有限的.即使你该做的都做了,RabbitMQ节点当掉还是有可能出现消息丢失的情况.这是因为RabbitMQ并没有在节点之间做数据复制(Data Replicate).没有特殊的配置(后面会提到Mirrored Queue),一个队列的数据只会出现在Queue所属的节点.
而且数据量大时继续插入数据很容易出现如下警告信息Mnesia(nonode@nohost): ** WARNING ** Mnesia is overloaded: {dump_log,
time_threshold}
消息是分发到多个队列的?AMQP协议里面定义了几种不同类型的exchange:direct, fanout, topic, and headers. 每一种都实现了一种 routing 算法. header的路由消息并不依赖routing key而是去匹配AMQP消息的header部分,这和下面提到的direct exchange如出一辙,但是性能要差很多,在实际场景中几乎不会被用到.
创建queue和exchange默认情况下都是没有持久化的,节点重启之后queue和exchange就会消失,这里需要特别指定queue和exchange的durable属性.
transient is for msgs sent to transient queues. This directory is blown&away on startup because no transient queues survive broker restart.&persistent is fro msgs sent to durable queues.
Repeat your test but declare the queue as exclusive. You should find&that the shutdown of the broker is then much much faster.&
新坑:rabbitmq server宕掉后重启报错,检查了一下,因为有节点在发消息,把这些节点都关掉以后,重启成功&
新坑:程序里有一处地方试图在connect之前disconnect,报Detail: "Access refused for user 'guest'\n",这是因为disconnect也会试图连接,因为没有connect,默认会用guest连接,而我已经把guest用户删除掉了,所以才会报这个错误
&新坑:一个节点触发memory resource limit alarm,堵塞消息大发送和接受,将limit从默认的0.4设为0.8,某个消息接受脚本仍然堵塞在那里,需要重启,要好好z研究研究
& 新坑: {error,{inconsistent_cluster,"Node rabbit@zw_81_80 thinks it's clustered with node rabbit@zw_81_86, but rabbit@zw_81_86 disagrees"}} 修改&&/pool/rabbitmq/data/rabbit\@zw_81_80/cluster_nodes.config 把改节点删除掉。
The management plugin extends the existing&&somewhat. Users can be given arbitrary tags within RabbitMQ. The management plugin makes use of tags called "management", "monitoring" and "administrator". The following table shows what the different types of user can do:
TagCapabilities
No access to the management plugin
management
Anything the user could do via AMQP plus:
List virtual hosts to which they can log in via AMQP
View all queues, exchanges and bindings in "their" virtual hosts
View and close their own channels and connections
View "global" statistics covering all their virtual hosts, including activity by other users within them
monitoring
Everything "management" can plus:
List all virtual hosts, including ones they could not log in to via AMQP
View other users's connections and channels
View node-level data such as memory use and clustering
View truly global statistics for all virtual hosts
administrator
Everything "monitoring" can plus:
Create and delete virtual hosts
View, create and delete users
View, create and delete permissions
Close other users's connections
Note that since "administrator" does everything "monitoring" does, and "monitoring" does everything "management" does, you only need to give each user a maximum of one tag.
Normal RabbitMQ permissions still apply to monitor just because a user is a monitor or administrator does not give them full access to exchanges, queues and bindings through either AMQP or the management plugin.
All users can only list objects within a particular virtual host if they have any permissions for that virtual host.
If you get locked out due to only having non-administrator users, or no users at all, you can use&to create a non-administrator user and&&to promote a user to administrator.
部署完之后头一件就是添加监控,我们这用的是nagios
git clone /jamesc/nagios-plugins-rabbitmq.gitcd /root/nagios-plugins-rabbitmq/scriptscp * /usr/local/nagios/libexec/chmod -R 775 /usr/local/nagios/libexec/chown -R nagios.nagios /usr/local/nagios/libexec/
commands.cfg配置
# 'check_rabbitmq_server' command definitiondefine command{
command_name
check_rabbitmq_server
command_line
$USER1$/check_rabbitmq_server -p $ARG1$ -H $ARG2$
# 'check_rabbitmq_broker' command definitiondefine command{
command_name
check_rabbitmq_broker
command_line
$USER1$/check_rabbitmq_server -p $ARG1$ -H $HOSTNAME$
# 'check_rabbitmq_aliveness' command definitiondefine command{
command_name
check_rabbitmq_aliveness
command_line
$USER1$/check_rabbitmq_aliveness -p $ARG1$ -H $HOSTADDRESS$
# 'check_rabbitmq_objects' command definitiondefine command{
command_name
check_rabbitmq_objects
command_line
$USER1$/check_rabbitmq_objects -p $ARG1$ -H $HOSTADDRESS$
# 'check_rabbitmq_overview' command definitiondefine command{
command_name
check_rabbitmq_overview
command_line
$USER1$/check_rabbitmq_overview -p $ARG1$ -H $HOSTADDRESS$
# 'check_rabbitmq_queue' command definitiondefine command{
command_name
check_rabbitmq_queue
command_line
$USER1$/check_rabbitmq_queue -p $ARG1$ -H $HOSTADDRESS$9059人阅读
rabbitmq(7)
1.&&&&&&安装erlang虚拟机
Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机
#tar zxvf otp_src_R15B01.tar.gz&& cd otp_src_R15B01
#./configure &&make install
2.&&&&&&安装rabbitmq server
#tar rabbitmq-server-generic-unix-2.8.2.tar.gz&& cd /rabbitmq-server-generic-unix-2.8.2
修改Makeifle ,添加以下参数,指定安装目录
SBIN_DIR = /usr/sbin
MAN_DIR = /usr/share/man
TARGET= /usr/lib/rabbitmq
#make && makeinstall
注意:安装脚本最后会从一个网站上拉man手册,有时连不上这个网站,安装脚本就会停住,这时可以Ctrl-c结束安装进程,这时其实已经安装完成只差man手册。
1.&&&&&&配置文件
Rabbitmq的配置文件有三个,位于/etc/rabbitmq/,
这三个文件分别是:
(1)enabled_plugins, 设置允许的插件列表,该配置文档的格式为erlang的列表格式如
[rabbitmq_management,rabbitmq_visualiser].
(2)rabbitmq.conf,设置rabbitmq的运行参数。该配置文件中的每个参数为一个erlang的 tuple,结构为{Key,Value}, Key为atom类型, Value为一个term。其中几个关键参数为:
tcp_listerners& 设置rabbimq的监听端口,默认为[5672]。
disk_free_limit &磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为
{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.
vm_memory_high_watermark,设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
hipe_compile 将部分rabbimq代码用HighPerformance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。
force_fine_statistics, 该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
(3)rabbitmq-env.conf &rabbitmq的环境参数配置
RABBITMQ_NODE_PORT& 端口设置,默认为5672
RABBITMQ_NODENAME&& 节点名称,默认为rabbit
MNESIA_BASE 后端存储目录& ,默认为/var/lib/rabbitmq/mnesia
LOG_BASE 日志目录,默认为/var/log/rabbitmq/
其它参数详情请见:
2.&&&&&&集群配置
(1)手动配置
a)首先在每个节点上启动RabbitMq
host1#rabbitmq-server-detached
host2#rabbitmq-server-detached
host3#rabbitmq-server-detached
此时每个节点自成集群,每个集群只有本节点
可以通过exportRABBITMQ_NAME=xxx 指定节点名称,若不指定默认为rabbit
完整的节点名为xxx@hostname
b)加入集群
让host2 和host3上的rabbitmq节点加入到 host1的rabbitmq集群
使用rabbitmqctl命令对rabbitmq进行操作
加入集群前必须停止当前app,加入后在重启app,过程如下:
host2#rabbitmqctlstop_app
host2#rabbitmqctlcluster rabbit@host1
host2#rabbitmqctlstart_app
host3#rabbitmqctlstop_app
host3#rabbitmqctlcluster rabbit@host1
host3#rabbitmqctlstart_app
关于节点类型(ram |disk)
ram节点的状态保存在内存中,disk节点保存在磁盘中
被加入的节点为disk,如本例中rabbit@host1为disk节点,rabbit@host2,rabbit@host3为ram节点
可以通过rabbitmqctlcluster命令改变加入的集群以及节点类型该命令后可以加多个节点名称,指定的节点就会变成disk节点
如可以将本例中所有节点都改成disk节点
host2#rabbitmqctlstop_app
host2#rabbitmqctlreset
host2#rabbitmqctlcluster rabbit@host1 rabbit@host2
host2#rabbitmqctlstart_app
host3#rabbitmqctlstop_app
host3#rabbitmqctlreset
host3#rabbitmqctlcluster rabbit@host1 rabbit@host3
host3#rabbitmqctlstart_app
(2) 自动配置:
rabbitmq的默认配置脚本为
/etc/rabbitmq/rabbitmq.conf
在其中添加
{rabbit, [
{cluster_nodes,['rabbit@host1', 'rabbit@host2', 'rabbit@host3']},
分别启动每个rabbitmq节点
rabbitmq-detached
rabbitmq就自动组成集群了
注意事项:
1)每个节点的erlangcookie须相同,可以在启动服务器加–setcookie参数设置相同的参数,也可以在home目录下设置相同的.erlang.cookie文件。
2)节点间应该能相互解析,可以通过修改/etc/hosts文件实现
Rabbitmq服务器的主要通过rabbitmqctl和rabbimq-plugins两个工具来管理,以下是一些常用功能。
1.&&&&&&服务器启动与关闭
启动: rabbitmq-server –detached
关闭:rabbitmqctl stop
若单机有多个实例,则在rabbitmqctlh后加–n 指定名称
2.&&&&&&插件管理
开启某个插件:rabbitmq-plugins enable xxx
关闭某个插件:rabbitmq-plugins disable xxx
注意:重启服务器后生效。
3.&&&&&&virtual_host 管理
新建virtual_host: rabbitmqctl add_vhost&xxx
撤销virtual_host:rabbitmqctl&delete_vhost xxx
4.&&&&&&用户管理
新建用户:rabbitmqctl add_user xxx pwd
删除用户:&& rabbitmqctl delete_userxxx
改密码: rabbimqctl change_password {username} {newpassword}
设置用户角色:rabbitmqctl set_user_tags {username} {tag ...}
Tag可以为administrator, monitoring, management
Capabilities
No access to the management plugin
management
Anything the user could do via AMQP plus:
List virtual hosts to which they can log in via AMQP
View all queues, exchanges and bindings in &their& virtual hosts
View and close their own channels and connections
View &global& statistics covering all their virtual hosts, including activity by other users within them
monitoring
Everything &management& can plus:
List all virtual hosts, including ones they could not log in to via AMQP
View other users's connections and channels
View node-level data such as memory use and clustering
View truly global statistics for all virtual hosts
administrator
Everything &monitoring& can plus:
Create and delete virtual hosts
View, create and delete users
View, create and delete permissions
Close other users's connections
5.&&&&&&权限管理
权限设置:set_permissions [-p vhostpath] {user} {conf} {write} {read}
一个正则表达式match哪些配置资源能够被该用户访问。
一个正则表达式match哪些配置资源能够被该用户读。
一个正则表达式match哪些配置资源能够被该用户访问。
6.&&&&&&获取服务器状态信息
服务器状态:rabbitmqctl status
队列信息:rabbitmqctl list_queues [-p vhostpath] [queueinfoitem ...]
Queueinfoitem可以为:name, durable,auto_delete,arguments,messages_ready,
messages_unacknowledged,messages,consumers,memory
Exchange信息:rabbitmqctl&list_exchanges [-p vhostpath][exchangeinfoitem ...]
Exchangeinfoitem有:name ,type,durable,auto_delete,internal,arguments.
Binding信息:rabbitmqctl&list_bindings [-p vhostpath][bindinginfoitem ...]
Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments
Connection信息:rabbitmqctllist_connections [connectioninfoitem ...]
Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
Channel信息:rabbitmqctl& list_channels [channelinfoitem ...]
Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted
,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked
更多的信息请参考:/man/rabbitmqctl.1.man.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:669175次
积分:7547
积分:7547
排名:第1837名
原创:82篇
转载:399篇
评论:56条
(6)(5)(2)(2)(2)(2)(1)(4)(13)(8)(14)(3)(11)(9)(17)(28)(5)(1)(9)(82)(22)(6)(12)(21)(36)(4)(16)(27)(9)(15)(21)(24)(31)(1)(12)(2)(1)&&国之画&&&&&&
版权所有 京ICP备号-2
迷上了代码!当前位置:&>& >
[原]RabbitMQ用户角色及权限控制
[原]RabbitMQ用户角色及权限控制
发布时间: 15:30:27&&&编辑:
none、management、p
#######################
#######################
none、management、policymaker、monitoring、administrator
RabbitMQ各类角色描述:
不能访问 management plugin
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts &
查看自己的virtual hosts中的queues, exchanges 和 ings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的&全局&的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker&
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator &&
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
创建用户并设置角色:
可以创建管理员用户,负责整个MQ的运维,例如:
$sudo rabbitmqctl add_user
user_admin
passwd_admin
赋予其administrator角色:
$sudo rabbitmqctl set_user_tags user_admin administrator
可以创建RabbitMQ监控用户,负责整个MQ的监控,例如:
$sudo rabbitmqctl add_user
user_monitoring
passwd_monitor
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags user_monitoring monitoring
可以创建某个项目的专用用户,只能访问项目自己的virtual hosts
$sudo rabbitmqctl
passwd_proj
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags user_proj management
创建和赋角色完成后查看并确认:
$sudo rabbitmqctl list_users
########################
#RabbitMQ 权限控制:
########################
默认virtual host:&/&
默认用户:guest&
guest具有&/&上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制:
[{rabbit, [{loopback_users, []}]}]
用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:
exchange和queue的declare与delete分别需要exchange和queue上的配置权限
exchange的bind与unbind需要exchange的读写权限
queue的bind与unbind需要queue写权限exchange的读权限
发消息(publish)需exchange的写权限
获取或清除(get、consume、purge)消息需queue的读权限
对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
set_permissions [-p ]
的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源
需要注意的是RabbitMQ会每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。
为用户赋权:
$sudo rabbitmqctl
set_permissions -p /vhost1
user_admin '.*' '.*' '.*'
该使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
查看权限:
$sudo rabbitmqctl list_user_peissions user_admin
Listing permissions for user &user_admin& ...
/vhost1 .* .* .*
$ rabbitmqctl list_permissions -p /vhost1
Listing permissions in vhost &/vhost1& ...
user_admin .* .* .*
本文来自:
本文链接:
相关热词搜索:

我要回帖

更多关于 apache virtual hosts 的文章

 

随机推荐