zoukankan      html  css  js  c++  java
  • RabbitMQ安装与初始配置

    本文只讨论linux下的Rabbitmq安装。

    Erlang安装

    rabbitmq依赖于Erlang,需先安装,推荐安装rabbitmq/erlang-rpm

    #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安装

    官网下载页面找到和系统版本对应的rabbitmq版本:

    #安装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
    

    其中状态查看会返回详细的状态信息:

    [{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]
    "},
     {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绑定相应端口,所以安装完之后需要确保一下端口可以打开:

    • 4369,epmd(Erlang Port Mapper Daemon),是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。
    • 5672, 5671, AMQP 0-9-1 和 1.0 客户端端口,used by AMQP 0-9-1 and 1.0 clients without and with TLS(Transport Layer Security)
    • 25672,Erlang distribution,和4369配合
    • 15672,HTTP_API端口,管理员用户才能访问,用于管理RbbitMQ,需要启用management插件,rabbitmq-plugins enable rabbitmq_management,访问http://server-name:15672/
    • 61613, 61614,当STOMP插件启用的时候打开,作为STOMP客户端端口(根据是否使用TLS选择)
    • 1883, 8883,当MQTT插件启用的时候打开,作为MQTT客户端端口(根据是否使用TLS选择)
    • 15674,基于WebSocket的STOMP客户端端口(当插件Web STOMP启用的时候打开)
    • 15675,基于WebSocket的MQTT客户端端口(当插件Web MQTT启用的时候打开)

    参考

    Installing on RPM-based Linux(Port Access)
    RabbitMQ~开篇与环境部署

    用户权限管理

    RabbitMQ有一个默认的用户"guest",密码也是"guest",这个用户默认只能通过本机访问,eg:http://localhost:15672/,在通过http访问之前记得启用management插件:

    $rabbitmq-plugins enable rabbitmq_management
    

    要让其他机器可以访问,需要创建一个新用户,为其分配权限。用户权限可以通过rabbitmqctl执行相关命令来维护,rabbitmqctl是管理rabbitmq的命令行管理工具,下面介绍相关的命令:

    用户管理

    • list_users,用户列表
    • add_user {username} {password},添加用户
    • delete_user {username},删除用户
    • change_password {username} {newpassword},修改密码
    • clear_password {username},删除密码,密码删除后就不能访问了。This user now cannot log in with a password (but may be able to through e.g. SASL EXTERNAL if configured)
    • authenticate_user {username} {password},用户认证
    • set_user_tags {username} {tag ...},为用户设置角色,tag可以是0个、一个、或多个,eg: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客户端连接到一个服务端的时候,在它的操作指令中指定了一个虚拟主机。服务端首先检查是否有访问该虚拟主机的权限,没有权限的会拒绝连接。

    对于exchanges和queues等资源,位于某个虚拟主机内;不同虚拟主机内即便名称相同也代表不同的资源。当特定操作在资源上执行时第二级访问控制开始生效。

    RabbitMQ在某个资源上区分了配置、写和读操作。配置操作创建或者销毁资源,或者更改资源的行为。写操作将消息注入进资源之中。读操作从资源中获取消息。

    要执行特定操作用户必须授予合适的权限。

    下面介绍相关命令:

    • list_vhosts [vhostinfoitem ...],获取vhosts列表
    • add_vhost {vhost}, eg:rabbitmqctl add_vhost test
    • delete_vhost {vhost}
    • set_permissions [-p vhost] {user} {conf} {write} {read},给用户分在对应的vhost上分配相应的权限。eg:rabbitmqctl set_permissions -p /myvhost chris "^chris-.*" ".*" ".*",这条指令,给用户chris在myvhost分配了权限,权限包括:以"chris-"开头的全部资源的配置权限,和所有资源的读写权限
    • clear_permissions [-p vhost] {username},清除权限
    • list_permissions [-p vhost],vhost权限分配列表
    • list_user_permissions {username},user权限列表
    $sudo rabbitmqctl set_permissions -p / chris ".*" ".*" ".*"
    Setting permissions for user "chris" in vhost "/"
    #此时用户chris才有访问队列资源的权限
    

    参考

    rabbitmqctl(1) manual page(User management, Access control)

    System Limits

    rabbitmq会维持大量的网络连接,所以系统允许同时打开的最大文件数需要调整。推荐的允许同时打开的最大文件数为65535。有两个地方需要设置:

    • 系统每个用户允许的最大同时打开文件数,ulimit -n,可以通过ulimit -n size设置
    • 系统允许的最大同时打开文件数,fs.file-max

    系统级限制查看与设置:

    #查看
    $ 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/,路径之下有两类日志文件:

    • rabbit@{hostname}.log,输出rabbitmq运行相关的信息,如网络流量、用户、交换器、队列等信息
    • rabbit@{hostname}-sasl.log,Erlang运行相关信息
  • 相关阅读:
    Python SocketServer模块
    网络爬虫urllib:request之urlopen
    1.numpy的用法
    21天打造分布式爬虫-简书整站爬取(十)
    21天打造分布式爬虫-下载汽车之家图片(九)
    21天打造分布式爬虫-Crawl类爬取小程序社区(八)
    21天打造分布式爬虫-Spider类爬取糗事百科(七)
    21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
    21天打造分布式爬虫-多线程下载表情包(五)
    21天打造分布式爬虫-中国天气网和古诗文网实战(四)
  • 原文地址:https://www.cnblogs.com/chrischennx/p/7071471.html
Copyright © 2011-2022 走看看