首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

RabbitMQ在分布式系统中的应用(4)

RabbitMQ在分布式系统中的应用(4)

Server支持各大主流操作系统,这里以Unix为例介绍下常用配置和命令:
安装由于RabbitMQ是依赖于Erlang的,所以得首先安装最近版本的Erlang。
单点的安装比较简单,下载解压即可。

  • 配置:(一般的,用默认的即可。)
    • $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf: 环境变量默认配置(也可在启动脚本中设置,且以启动命令中的配置为准)。常用的有:
      • RABBITMQ_NODENAME:节点名称,默认是rabbit@$HOSTNAME。
      • RABBITMQ_NODE_PORT:协议端口号,默认5672。
      • RABBITMQ_SERVER_START_ARGS:覆盖rabbitmq.config中的一些配置。
    • $RABBITMQ_HOME/etc/rabbitmq/rabbitmq.config: 核心组件,插件,erlang服务等配置,常用的有:
      • disk_free_limit:队列持久化等信息都是存到RabbitMQ本地的数据库中的,默认限制50000000(也就是最多只让它使用50M空间啦,不够可以上调,也支持空闲空间百分比的配置)。要是超标了,它就罢工了……
      • vm_memory_high_watermark:内存使用,默认0.4(最多让它使用40%的内存,超标罢工)
注:若启动失败了,可以在启动日志中查看到具体的错误信息。
  • 命令:
    • $RABBITMQ_HOME/sbin/rabbitmq-server:启动脚本,会打印出配置文件,插件,集群等信息;加上-detached为后台启动;
    • /sbin/rabbitmqctl status:查看启动状态
    • /sbin/rabbitmqctl add_user admin admin:添加新用户admin,密码admin;默认只有一个guest用户,但只限本机访问。
    • /sbin/rabbitmqctl set_user_tags admin administrator:将admin设置为管理员权限
    • /sbin/rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 赋予admin所有权限
    • /sbin/rabbitmqctl stop:关闭
集群集群节点共享所有的状态和数据,如:用户、路由、绑定等信息(队列有点特殊,虽然从所有节点都可达,但是只存在于第一次声明它的那个节点上,解决方案: );每个节点都可以接收连接,处理数据。
集群节点有两种,disc:默认,信息存在本地数据库;ram:加入集群时,添加--ram参数,信息存在内存,可提高性能。
  • 配置:(一般的,用默认的即可。)
    • $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf:
      • RABBITMQ_USE_LONGNAME:默认false,(默认的,RABBITMQ_NODENAME中@后面的H
        OS
        T
        N
        AM
        E
        hoststrue
        RABBI
        T
        M
        Q
        N

        ODE
        N
        AM
        E



      • HOSTNAME为域名了)
      • RABBITMQ_DIST_PORT:集群端口号,默认RABBITMQ_NODE_PORT + 20000
    • $RABBITMQ_HOME/etc/rabbitmq/rabbitmq.config:
      • cluster_nodes:设置后,在启动时会尝试自动连接加入的节点并组成集群。
      • cluster_partition_handling: 。
更多详细的配置见:

  • 命令
    • rabbitmqctl stop_app
    • rabbitmqctl join_cluster [--ram] nodename@hostname:将当前节点加入到集群中;默认是以disc节点加入集群,加上--ram为ram节点。
    • rabbitmqctl start_app
    • rabbitmqctl cluster_status:查看集群状态
注:如果加入集群失败,可先查看
  • 每个节点的$HOME/.erlang.cookie内容一致;
  • 如果hostname是主机名,那么此hostname和地址的映射需要加入hosts文件中;
  • 如果使用的是域名,那么需要设置RABBITMQ_USE_LONGNAME为true。
注:docker版集群的见:

高级AMQP协议简介RabbitMQ原生支持AMQP 0-9-1并扩展实现了了一些常用的功能:

包含三层:
  • 模型层: 最高层,提供了客户端调用的命令,如:queue.declare,basic.ack,consume等。
  • 会话层:将命令从客户端传递给服务器,再将服务器的应答传递给客户端,会话层为这个传递过程提供可靠性、同步机制和错误处理。
  • 传输层:主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示。

注:其他协议的支持见:

常用插件管理界面(神器)启动后,执行rabbitmq-plugins enable rabbitmq_management->
访问 ->查看节点状态,队列信息等等,甚至可以动态配置消息队列的主备策略,如下图:

management

Federation启用Federation插件,使得不同集群的节点之间可以传递消息,从而模拟出类似集群的效果。这样可以有几点好处:
  • 松耦合:联合在一起的不同集群可以有各自的用户,权限等信息,无需一致;此外,这些集群的RabbitMQ和Erlang的版本可以不一致。
  • 远程网络连接友好:由于通信是遵循AMQP协议的,故而对断断续续的网络连接容忍度高。
  • 自定义:可以自主选择哪些组件启用federation。
几个概念:
  • Upstreams: 定义上游节点信息,如:
    rabbitmqctl set_parameter federation-upstream my-upstream '{"uri":"amqp://server-name","expires":3600000}' 定义一个my-upstream
    • uri是其上游节点的地址,多个upstream的节点无需在同一集群中。
    • expires表示断开连接3600000ms后其上游节点会缓存消息。
  • Upstream sets: 多个Upstream的集合;默认有个all,会将所有的Upstream加进去。
  • Policies: 定义哪些exchanges,queues关联到哪个Upstream或者Upstream set,如:
    rabbitmqctl set_policy --apply-to exchanges federate-me "^amq\." '{"federation-upstream-set":"all"}' 将此节点所有以amq.开头的exchange联合到上游节点的同名exchange。
注:
  • 由于下游节点的exchange可以继续作为其他节点的上游,故可设置成循环,广播等形式。
  • 通过max_hops参数控制传递层数。
  • 模拟集群,可以将多个节点两两互连,并设置max_hops=1。

federated_cluster


federated_broadcast

rabbitmq-plugins enable rabbitmq_federation
如果启用了管理界面,可以添加:
rabbitmq-plugins enable rabbitmq_federation_management
这样就可以在界面配置Upstream和Policy了。
注:如果在一个集群中使用federation,需要该集群每个节点都启用Federation插件
返回列表