目录html
本文只讨论linux下的Rabbitmq安装。linux
rabbitmq依赖于Erlang,需先安装,推荐安装rabbitmq/erlang-rpm:ios
#clone源码 git clone https://github.com/rabbitmq/erlang-rpm.git #make cd erlang-rpm make #须要等待较长时间 cd RPMS/x86_64 #其下有两个rpm包 erlang-19.3.6-1.alios6.x86_64.rpm erlang-debuginfo-19.3.6-1.alios6.x86_64.rpm, 选择前者安装 #安装 sudo rpm -ivh erlang-19.3.6-1.alios6.x86_64.rpm
在官网下载页面找到和系统版本对应的rabbitmq版本:git
#安装rabbitmq-server sudo yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm #此时可能报:Requires: socat, 如下是解决方法, 参考:http://www.cnblogs.com/ray30th/p/6651800.html sudo wget --no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo sudo yum makecache sudo yum install socat #从新安装rabbitmq-server sudo yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm
#启动/中止 start/stop $sudo /sbin/service rabbitmq-server start Starting rabbitmq-server: SUCCESS rabbitmq-server. $sudo /sbin/service rabbitmq-server stop Stopping rabbitmq-server: rabbitmq-server. #状态查看 sudo rabbitmqctl status
其中状态查看会返回详细的状态信息:github
[{pid,2022}, {running_applications, [{rabbit,"RabbitMQ","3.6.10"}, {os_mon,"CPO CXC 138 46","2.4.2"}, {rabbit_common, "Modules shared by rabbitmq-server and rabbitmq-erlang-client", "3.6.10"}, {ranch,"Socket acceptor pool for TCP protocols.","1.3.0"}, {ssl,"Erlang/OTP SSL application","8.1.3"}, {public_key,"Public key infrastructure","1.4"}, {crypto,"CRYPTO","3.7.4"}, {compiler,"ERTS CXC 138 10","7.0.4"}, {asn1,"The Erlang ASN1 compiler version 4.0.4","4.0.4"}, {xmerl,"XML parser","1.3.14"}, {syntax_tools,"Syntax tools","2.1.1"}, {mnesia,"MNESIA CXC 138 12","4.14.3"}, {sasl,"SASL CXC 138 11","3.0.3"}, {stdlib,"ERTS CXC 138 10","3.3"}, {kernel,"ERTS CXC 138 10","5.2"}]}, {os,{unix,linux}}, {erlang_version, "Erlang/OTP 19 [erts-8.3.5] [source] [64-bit] [smp:2:2] [async-threads:64] [hipe] [kernel-poll:true]\n"}, {memory, [{total,53336792}, {connection_readers,0}, {connection_writers,0}, {connection_channels,0}, {connection_other,0}, {queue_procs,2832}, {queue_slave_procs,0}, {plugins,0}, {other_proc,20729016}, {mnesia,60688}, {metrics,184080}, {mgmt_db,0}, {msg_index,42608}, {other_ets,2138344}, {binary,116568}, {code,21389077}, {atom,891849}, {other_system,7962978}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"0.0.0.0"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,1660447948}, {disk_free_limit,50000000}, {disk_free,94489919488}, {file_descriptors, [{total_limit,65435}, {total_used,2}, {sockets_limit,58889}, {sockets_used,0}]}, {processes,[{limit,1048576},{used,152}]}, {run_queue,0}, {uptime,15}, {kernel,{net_ticktime,60}}]
SELinux和与其机制相似的系统可能会阻止RabbtMQ绑定相应端口,因此安装完以后须要确保一下端口能够打开:shell
rabbitmq-plugins enable rabbitmq_management
,访问http://server-name:15672/
Installing on RPM-based Linux(Port Access)
RabbitMQ~开篇与环境部署json
RabbitMQ有一个默认的用户"guest",密码也是"guest",这个用户默认只能经过本机访问,eg:http://localhost:15672/
,在经过http访问以前记得启用management插件:网络
$rabbitmq-plugins enable rabbitmq_management
要让其余机器能够访问,须要建立一个新用户,为其分配权限。用户权限能够经过rabbitmqctl
执行相关命令来维护,rabbitmqctl是管理rabbitmq的命令行管理工具,下面介绍相关的命令:app
rabbitmqctl set_user_tags chris administrator
,设置为管理员;rabbitmqctl set_user_tags chris
,清除chris与角色的关联。#用户列表查看 $sudo rabbitmqctl list_users Listing users guest [administrator] #添加用户 $sudo rabbitmqctl add_user chris 123 Creating user "chris" #为用户分配权限 $sudo rabbitmqctl set_user_tags chris administrator Setting tags for user "chris" to [administrator] #而后就能够经过http://host:15672 登陆management界面管理rabbitmq了,但此时用户chris尚未访问队列资源的权限
RabbitMQ客户端链接到一个服务端的时候,在它的操做指令中指定了一个虚拟主机。服务端首先检查是否有访问该虚拟主机的权限,没有权限的会拒绝链接。socket
对于exchanges和queues等资源,位于某个虚拟主机内;不一样虚拟主机内即使名称相同也表明不一样的资源。当特定操做在资源上执行时第二级访问控制开始生效。
RabbitMQ在某个资源上区分了配置、写和读操做。配置操做建立或者销毁资源,或者更改资源的行为。写操做将消息注入进资源之中。读操做从资源中获取消息。
要执行特定操做用户必须授予合适的权限。
下面介绍相关命令:
rabbitmqctl add_vhost test
rabbitmqctl set_permissions -p /myvhost chris "^chris-.*" ".*" ".*"
,这条指令,给用户chris在myvhost分配了权限,权限包括:以"chris-"开头的所有资源的配置权限,和全部资源的读写权限$sudo rabbitmqctl set_permissions -p / chris ".*" ".*" ".*" Setting permissions for user "chris" in vhost "/" #此时用户chris才有访问队列资源的权限
rabbitmqctl(1) manual page(User management, Access control)
rabbitmq会维持大量的网络链接,因此系统容许同时打开的最大文件数须要调整。推荐的容许同时打开的最大文件数为65535。有两个地方须要设置:
ulimit -n size
设置系统级限制查看与设置:
#查看 $ cat /proc/sys/fs/file-max 184289 $ cat /proc/sys/fs/file-nr 1024 0 184289 #已分配文件句柄的数目 分配了但没有使用的句柄数 文件句柄最大数目 #设置 $echo 284289 > /proc/sys/fs/file-max
ulimit 命令详解
ulimit用于shell启动进程所占用的资源,是shell内建命令。
参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前全部的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置建立文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可使用的常驻内存的最大值.单位:kbytes
-n size:设置内核能够同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytesLinux
能够经过rabbitmqctl status
查看当前的限制状态,status中的file_descriptors
描述了当前的限制:
{file_descriptors, [{total_limit,65435}, {total_used,2}, {sockets_limit,58889}, {sockets_used,0}]}, {processes,[{limit,1048576},{used,330}]}
rabbitmqctl(1) manual page (Controlling System Limits on Linux)
linux限制打开文件数量
Rabbitmq默认日志路径:/var/log/rabbitmq/
,路径之下有两类日志文件: