Rabbitmq 相关介绍之单机镜像模式集群配置

一、镜像模式集群简介

如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候)。当然可以将所有的publish的message都设置为持久化的,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存在一个虽然短暂但是会产生问题的时间窗。通过publisher的confirm机制能够确保客户端知道哪些message已经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。

如果RabbitMQ集群是由多个broker节点构成的,那么从服务的整体可用性上来讲,该集群对于单点失效是有弹性的,但是同时也需要注意:尽管exchange和binding能够在单点失效问题上幸免于难,但是queue和其上持有的message却不行,这是因为queue及其内容仅仅存储于单个节点之上,所以一个节点的失效表现为其对应的queue不可用。

引入RabbitMQ的镜像队列机制,将queue镜像到cluster中其他节点之上。在该实现下,如果集群中的一个节点失效了,queue能自动地切换到镜像中的另一个节点以保证服务的可用性。在通常的用法中,针对每一个镜像队列都包含一个master和多个slave,分别对应于不同的节点。slave会准确地按照master执行命令的顺序进行命令执行,故slave与master上维护的状态应该是相同的。除了publish外所有动作都只会向master发送,然后由master将命令执行的结果广播给slave们,故看似从镜像队列中的消费操作实际上是在master上执行的。一旦完成了选中的slave被提升为master的动作,发送到镜像队列的message将不会再丢失:publish到镜像队列的所有消息总是被直接publish到master和所有的slave之上。这样一旦master失效了,message仍然可以继续发送到其他slave上。

RabbitMQ的镜像队列同时支持publisher confirm和事务两种机制。在事务机制中,只有当前事务在全部镜像queue中执行之后,客户端才会收到Tx.CommitOk的消息。同样的,在publisher confirm机制中,向publisher进行当前message确认的前提是该message被全部镜像所接受了。

二、开始配置

镜像队列是基于普通的集群模式的,所以还是得先配置普通集群,然后才能设置镜像队列,这里不再赘述,可以参考我的另一篇文章http://linuxg.blog.51cto.com/4410110/1965369配置普通集群。

1、首先查看策略
#rabbitmqctl -n rabbit1 list_policies    #以节点rabbit2和rabbit3查询结果是一样的
Listing policies
2、设置镜像队列策略
用法:
set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
      Sets a policy.
      name
         The name of the policy.
      pattern
         The regular expression, which when matches on a given resources causes the policy to apply.
      definition
         The definition of the policy, as a JSON term. In most shells you are very likely to need to quote this.
      priority
         The priority of the policy as an integer. Higher numbers indicate greater precedence. The default is 0.
      apply-to
         Which types of object this policy should apply to - "queues", "exchanges" or "all". The default is "all".
      For example:
         rabbitmqctl set_policy federate-me "^amq." ‘{"federation-upstream-set":"all"}‘
         This command sets the policy federate-me in the default virtual host so that built-in exchanges are federated.
 释义:
-p Vhost:      可选参数,针对指定vhost下的queue进行设置
Name:           policy的名称,可以自定义
Pattern:        queue的匹配模式(正则表达式)
Definition:    镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
ha-mode:        指明镜像队列的模式,有效值为 all/exactly/nodes
all:           表示在集群中所有的节点上进行镜像
exactly:       表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes:         表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params:     ha-mode模式需要用到的参数
ha-sync-mode:  进行队列中消息的同步方式,有效值为automatic和manual
priority:      可选参数,policy的优先级
ha-promote-on-shutdown: 用来控制选主的行为的,有效值为when-synced,always
3、开始设置:
#rabbitmqctl -n rabbit1 set_policy mirror_queue "^" ‘{"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}‘
Setting policy "mirror_queue" for pattern "^" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"automatic\",\"ha-promote-on-shutdown\":\"always\"}" with priority "0"

4、再次查看策略
#rabbitmqctl -n rabbit1 list_policies
Listing policies
/       mirror_queue    all     ^       {"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}  0
#rabbitmqctl -n rabbit2 list_policies
Listing policies
/       mirror_queue    all     ^       {"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}  0
#rabbitmqctl -n rabbit3 list_policies
Listing policies
/       mirror_queue    all     ^       {"ha-mode":"all","ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}  0

可以通过rabbitmq_management界面查看策略,Admin-->Policies, 如下图:

同样的,也可以通过此界面添加policies!

时间: 2024-07-29 18:53:41

Rabbitmq 相关介绍之单机镜像模式集群配置的相关文章

Rabbitmq 相关介绍之双机镜像模式集群配置

一.环境介绍 系统: Centos 6.7  2.6.32-573.el6.x86_64 node1  172.16.60.187 node2  172.16.60.188 软件包 erlang-19.0.4-1.el6.x86_64.rpm   rabbitmq-server-3.6.12-1.el6.noarch.rpm 直接使用rpm包安装! 二.开始配置普通集群 1.设置hosts,是rabbitmq节点可以顺利的互通 在两台服务器上配置/etc/hosts,如下: #cat /etc/

Rabbitmq 相关介绍之单机集群配置

一.说明: 说到集群,大家应该都不陌生,为了提高性能需要配置集群,而在有的时候,我们需要在测试环境先测试然后灰度上线,所以这里介绍在一台服务器上配置rabbitmq集群 二.rabbitmq集群模式 1.普通模式:rabbitmq默认的集群模式 RabbitMQ集群中节点包括内存节点.磁盘节点.内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘上.如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘.那么内存节点的性能只能体现在资源管理上,比如增加或删除队列(qu

RabbitMQ入门教程(十五):普通集群和镜像集群

原文:RabbitMQ入门教程(十五):普通集群和镜像集群 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78740346 分享一个朋友的人工智能教程(请以"右键"->"在新标签页中打开连接"的方式访问).比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 普通集群 推荐一篇优秀的文章: RabbitM

Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)

安装ssh Hadoop是采用ssh进行通信的,此时我们要设置密码为空,即不需要密码登陆,这样免去每次通信时都输入秘密,安装如下: 输入“Y”进行安装并等待自动安装完成. 安装ssh完成后启动服务 以下命令验证服务是否正常启动: 可以看到ssh正常启动: 设置免密码登录,生成私钥和公钥: 在/root/.ssh中生成两个文件:id_rsa和id_rsa.pub,id_rsa为私钥,id_rsa.pub为公钥,我们将公钥id_rsa.pub追加到 authorized_keys中,因为author

Redis安装(单机及各类集群,阿里云)

Redis安装(单机及各类集群,阿里云) 前言 上周,我朋友突然悄悄咪咪地指着手机上的一篇博客说,这是你的博客吧.我看了一眼,是之前发布的<Rabbit安装(单机及集群,阿里云>.我朋友很哈皮地告诉我,我的博客被某个Java平台进行了微信推送.看到许多人阅读,并认同了我的博客,心理还是很开心的. 好了,话题收回来.这次就Redis在实际服务器中的各种安装,进行详细描述. 另外由于内容较多,并不一定能涵盖各个方面,万望见谅.如果存在什么问题,或者有什么需要添加的,请私信或@我. 最后,由于打马赛

Springboot2.x整合Redis以及连接哨兵模式/集群模式

依赖: <!--spirngboot版本为2.x--><!-- 加载spring boot redis包,springboot2.0中直接使用jedis或者lettuce配置连接池,默认为lettuce连接池,这里使用jedis连接池 --><!-- 加载spring boot redis包 --><dependency> <groupId>org.springframework.boot</groupId> <artifact

RabbitMQ集群配置

RabbitMQ的集群节点包括内存节点.磁盘节点.顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘.如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘. 普通模式: 对于queue来说,message data只存在于集群中的一个节点上,而message metadata则存在于集群中的所有节点.当message进入A节点的queue后,consumer从B节点拉去时,rabbitmq会临时在A.B之间进行消息传输,把A中的message data取出

亿级Web系统搭建:单机到分布式集群【转】

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配“工作任务”,而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡的策略有很

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配“工作任务”,而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡的策略有很