RabbitMQ概念及环境搭建(四)RabbitMQ High Availability

####################################################

RabbitMQ High Availability

####################################################

1.高可用queue

默认情况下RabbitMQ cluster中的queues位于单独的节点(queues被首次声明的节点),而exchanges和bindings存在于cluster中各节点。因而每个节点失效exchanges和bindings并无影响,单弱queues所在的节点失效就会影响该节点上存在的queues。但是。queues可以在多个节点上镜像。每个被镜像的queue包含一个master和一个或者多个slave。若原master失效则最旧的slave被提升为新的master。

publish到queue的message会被复制到各个slave、consumers无论从cluster中哪个节点连接都会连接到master上,对于已经自master上被确认的message各slave会丢弃。所以,queue镜像只是增强了可用性。并没有在各节点间均衡负载。

该方案需要RabbitMQ cluster, 不能再cluster内处理network partitions因而不推荐在WAN中使用,仅用于LAN。

2.配置镜像

通过policy进行,可在任意时刻更改,将non-mirrored queue改为mirrored queue,或者反之。需注意的是non-mirrored queue与没有slave的mirrore的queue并不相同,前者无需额外mirroring架构运行的更快。

可用的policy

ha-mode   ha-params   行为

all                              queue被mirror到cluster中所有节点。

cluster中新添加节点,queue也会被mirror到该节点。

exactly   count            queue被mirror到指定数目的节点。

count大于cluster中节点数则queue被mirror到所有节点。

若count小于cluster中节点数,在包含mirror的某节点down后不会在其他节点建新的mirror(为避免cluster中queue migrating)

nodes     node names  queue被mirror到指定名字的节点。

若任一名称在cluster中不存在并不会引发错误。

若指定的任何节点在queue声明时都不在线则queue在被连接到的节点创建。

关于nodes类型的policy

设置或更改nodes类型的policy可能引起原master迁移。比如原master没有出现的新的lolicy节点列表中时。RabbitMQ采取的策略是保持原master直到至少一个新的slave已经同步,一旦同步后原master马上自动失效。原consumer连接会断掉,需重连。

如,原queue在节点{A,B},A为master。来一个新的policy{C,D},会有一段时间的状态为{A,C,D},待queue同步后A上的master关闭,新的mirror为{C,D}

特殊queue:Exclusivequeues

exclusive queues不会被镜像(mirror)也不会被持久化(durable),即使被声明为如此。因为一但存放queue的节点down了上边的连接也会断掉,对于exclusive queues相关的queue会被马上删除。

3.镜像配置示例(可通过多种方式)

下面的例子将“ha.”开头的queue mirror到cluster中所有节点

rabbitmqctl   rabbitmqctl set_policy ha-all "^ha\." ‘{"ha-mode":"all"}‘

HTTP API    PUT /api/policies/%2f/ha-all {"pattern":"^ha\.", "definition":{"ha-mode":"all"}}

Web UI        Navigate to Admin > Policies > Add / update a policy.

Enter "ha-all" next to Name, "^ha\." next to Pattern, and "ha-mode" = "all" in the first line next to Policy.

Click Add policy.

下面的例子将“two.”开头的queue mirror到cluster中两个节点,且自动同步

rabbitmqctl    rabbitmqctl set_policy ha-two "^two\." ‘{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}‘

HTTP API    PUT /api/policies/%2f/ha-two {"pattern":"^two\.", "definition":{"ha-mode":"exactly", "ha-params":2,"ha-sync-mode":"automatic"}}

Web UI        Navigate to Admin > Policies > Add / update a policy.

Enter "ha-two" next to Name and "^two\." next to Pattern.

Enter "ha-mode" = "exactly" in the first line next to Policy, then "ha-params" = 2 in the second line, then "ha-sync-mode" = "automatic" in the third, and set the type on the second line to "Number".

Click Add policy.

下面的例子将“nodes.”开通的queue mirror到cluster中特定的node

rabbitmqctl   rabbitmqctl set_policy ha-nodes "^nodes\." ‘{"ha-mode":"nodes","ha-params":["nodeA", "nodeB"]}‘

HTTP API    PUT /api/policies/%2f/ha-nodes {"pattern":"^nodes\.", "definition":{"ha-mode":"nodes", "ha-params":["nodeA", "nodeB"]}

Web UI        Navigate to Admin > Policies > Add / update a policy.

Enter "ha-nodes" next to Name and "^nodes\." next to Pattern.

Enter "ha-mode" = "nodes" in the first line next to Policy, then "ha-params" in the second line, set the second line‘s type to "List", and then enter "nodeA" and "nodeB" in the sublist which appears.

Click Add policy.

4.其他注意事项

参考:

http://www.rabbitmq.com/ha.html

时间: 2024-10-10 06:08:37

RabbitMQ概念及环境搭建(四)RabbitMQ High Availability的相关文章

[置顶] RabbitMQ概念及环境搭建(三)RabbitMQ cluster

http://blog.csdn.net/zyz511919766/article/details/41896747 测试环境:VMS00781 VMS00782 VMS00386 (centos5.8)1.先在三台机器上分别安装RabbitMQ Server 2.读取其中一个节点的cookie,并复制到其他节点(节点间通过cookie确定相互是否可通信)两者之一均可:sudo vim /var/lib/rabbitmq/.erlang.cookiesudo vim $HOME/.erlang.

RabbitMQ概念及环境搭建(一)单节点安装与配置

############################################### #异步.分布式消息处理模型 ############################################### binding  +----------+    +----------------+ /------------+ queue +---+ consumer + +---------------+   +----------------+   |            +---

RabbitMQ概念及环境搭建(三)RabbitMQ cluster

测试环境:VMS00781 VMS00782 VMS00386 (centos5.8) 1.先在三台机器上分别安装RabbitMQ Server 2.读取其中一个节点的cookie,并复制到其他节点(节点间通过cookie确定相互是否可通信) 两者之一均可: sudo vim /var/lib/rabbitmq/.erlang.cookie sudo vim $HOME/.erlang.cookie 3.逐个启动节点 sudo service rabbitmq-server start 4.查看

RabbitMQ概念及环境搭建(二)RabbitMQ Broker管理

rabbitmqctl [-n node] [-q] {command} [command options...] 1.停Server rabbitmqctl stop 2.查看状态 rabbitmqctl status 其他常用项 sudo rabbitmqctl list_queues sudo rabbitmqctl list_exchanges sudo rabbitmqctl list_bindings ... 3.UI rabbitmq-management plugin 基于HTT

RabbitMQ概念及环境搭建(五)与web的整合

#################################### rabbitmq_web_stomp #################################### 处于试验阶段,同伙WebSocket兼容层SockJS时 Web Browser与RabbitMQ(rabbitmq-stomp)实时通讯,可用于实时的WEB应用 安装 sudo rabbitmq-plugins enable rabbitmq_web_stomp 测试 http://127.0.0.1:1567

BootStrap之基础-1 BootStrap起步(基本概念、环境搭建)

一.基本概念 Bootstrap 简介 - 移动设备优先 - 所有的主流浏览器都支持Bootstrap 它既是由动态CSS语言Less写成 Github热门开源项目 包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目 够成 Bootstrap 目录说明 - CSS目录--用于存放Bootstrap框架使用的样式文件 - bootstrap.css文件: Bootstrap框架的样式文件 - bootstrap.min.css文件:Bootstrap框架的样式压

ExtJS之基本概念、环境搭建

一.基本概念 ExtJS 简介 - ExtJS 是一个兼容各浏览器的纯 JavaScript 应用程序框架,使用它可以创建最佳跨平台互联网应用程序 为什么 ExtJS 原因 二.环境搭建 目录结构 - 推荐下面这种目录结构 使用ExtJS 动态加载 引入库的方法 发布 Containers容器 Panel Layouts布局 布局系统如何工作 组件component 别名和延迟初始化 显示和隐藏 浮动组件 数据 模型和存储(Model & Stores) 创建一个模型 Model 创建一个存储S

AngularJS之基础-1 简介(基本概念、环境搭建)

一.基本概念 软件设计原则 - 不论是桌面应用还是Web应用,在进行设计编码时应该遵守一定的设计原则 软件设计模式 - 设计模式 Design Pattern,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式用于已于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样 - 23+1中设计模式 工厂模式.抽象工厂模式.建造者模式.原型模式.单例

Elasticsearch技术解析与实战(一)基础概念及环境搭建

基础概念 Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时.Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往写句柄写入的数据刷新之后,读句柄重新打开,这才能读到新写入的数据. 名词解释: Cluster:集群. Index:索引,Index相当于关系型数据库的DataBase. Type:类型,这是索引下的逻辑划分,一般把有共性的文档放到一个类型里面,相当于关系型数据库的table. Document:文档,