rabbitmq集群要点
rabbitmq 简介
rabbitmq是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 是由Erlang语言编写,mq集群也是基于Erlang分布式、并行运算等特点实现的。它支持多种客户端,如: python、ruby、php、java等
rabbitmq 部件
不管是开发还是运维,要想很好的使用rabbitmq,必须对它的部件有一个功能性的认识,接下来我就 简单介绍一下:
Queue
Queue(队列)是rabbitmq的内部对象,是消息队列载体,用于存储消息。每个消息都可以被投入到一个或多个队列
producer
producer:消息生产者,就是投递消息的程序。
consumer
consumer:消息消费者,就是接受消息的程序。
Exchange
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。exchange可以将消息路由到一个或多个Queue中(或者丢弃)。
Broker
Broker:简单来说就是消息队列服务器实体。
vhost
虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
Binding
RabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了。
Binding key
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中。
binding key 不是所有情况都有效,依赖于Exchange Type
Exchange Types
RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种(AMQP规范里还提到两种Exchange Type,分别为system与自定义,这里不予以描述)
Routing Key
路由关键字,exchange根据这个关键字进行消息投递。
channel
消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
RabbitMQ集群
RabbitMQ可以通过三种方法来部署分布式集群系统,分别是:cluster,federation,shovel
-
cluster
不支持跨网段,用于同一个网段内的局域网 可以随意的动态增加或者减少 节点之间需要运行相同版本的RabbitMQ和Erlang
-
federation
应用于广域网,允许单台服务器上的交换机或队列接收发布到另一台服务器上交换机或队列的消息,可以是单独机器或集群。federation队列类似于单向点对点连接,消息会在联盟队列之间转发任意次,直到被消费者接受。通常使用federation来连接internet上的中间服务器,用作订阅分发消息或工作队列。
-
shovel
连接方式与federation的连接方式类似,但它工作在更低层次。可以应用于广域网。
节点类型
RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和vhost的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node:将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启RabbitMQ的时候,丢失系统的配置信息。
注:RabbitMQ要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点。单点rabbitmq也就必须是磁盘节点。
Erlang Cookie
Erlang Cookie是保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的Erlang Cookie。具体的目录存放在/var/lib/rabbitmq/.erlang.cookie。
rabbitmq 常用命令
查看集群状态信息:rabbitmqctl cluster_status
查看队列:rabbitmqctl list_queues
查看节点信息和状态:rabbitmqctl status
停止/启动应用:rabbitmqctl stop_app
重置应用:rabbitmqctl reset
加入节点:rabbitmqctl join_cluster {rabbit_node_name}
剔除节点:rabbitmqctl forget_cluster_node {rabbit_node_name}
开启插件:rabbitmq-plugins enable {插件名} (插件在$RABBITMQ_HOME/plugins )
开启web需要:rabbitmq-plugins enable rabbitmq_management
添加用户:rabbitmqctl add_user {username} {password}
设置用户角色:rabbitmqctl set_user_tags {username} {tag}
删除用户:rabbitmqctl delete_user {username}
修改密码:rabbitmqctl change_password {username} {newpassword}
权限设置:rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read} 如:rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
更改节点类型:rabbitmqctl change_cluster_node_type ram/disc(前后需要开关应用)
添加vhost: rabbitmqctl add vhost {name}
删除vhost: rabbitmqctl delete vhost {name}
还有很多,不过这些已经够平时的工作。
rabbitmq集群选择方式
建议选择haproxy进行负载,比较简单,完全支持4–7层的分发,还可以很好的保持长连接。
集群注意事项
各个节点的erlang+rabbitmq的版本要一致
erlang的cookie信息很重要
rabbitmq官网,上面有erlang和mq的下载
建议rpm包安装erlang
文章不够详细,却能够把很多要点强调 —-随笔
参考博文: