rabbitmq镜像集群,java实现消息队列
目录rabbitmq的集群体系结构模式主准备模式Warren远程模式Shovel多活动模式Federation镜像模式Mirror镜像模式引入集群构建HAProx实现rabbitmq集群的负载平衡kkqr
rabbitmq的集群体系结构模式主准备模式Warren
也称为warren模式,简单易用,常用于并发数、数据量不高的情况,多用于中小企业。
HaProxy相当于TCP级别的代理,自动监视rabbitmq集群的状态,如果主节点发生故障,则自动切换到从节点。
listen指定要监听的rabbitmq群集的名称。 bind指定在rabbitmq群集节点之间进行通信的端口。 默认的5672服务器后跟主机名称,backup表示它是备份节点。 每5000ms HaProxy检查一次该节点的状态,如果rise 2正常两次,则认为该节点正常,如果fall 3失败三次,则认为该节点故障。
远程模式Shovel
部分rabbitmq集群负载较大时,可以将部分消息复制到远程空闲的rabbitmq集群并代为处理。
如果exchange发现正常队列负载过大,它会自动将部分数据路由到备份队列,并通过shovel插件将备份队列中的消息复制到远程rabbitmq进行处理。
这是rabbitmq早期的集群架构模型,现在很少使用。 如果使用异地rabbitmq集群来分担压力,则可以使用更好的多模式。
多模式融合
整体为多模式,每个中心的rabbitmq群集可以使用其他群集模式
多模式可以将消息提取到多个rabbitmq集群中,并且多个rabbitmq集群消耗不同的行为
镜像模式Mirror
当一个rabbitmq节点接收到消息时,本地存储会自动将该消息同步到另一个节点。 通常,rabbitmq至少有三个节点,两个用作备用节点更可靠。
通过负载平衡服务器,APP应用程序访问rabbitmq群集的某个节点,以确保负载平衡服务器的高可用性。
典型的rabbitmq高可用性体系结构是镜像队列ha proxy保持不变
镜像模式的集群构建
1、设置vim /etc/hostname每台机器的主机名
2、在三台机器上分别安装rabbitmq,安装后停止rabbitmq服务器
3、同步cookie文件
选择任何rabbitmq节点作为主节点,并将该节点的cookie文件复制到另一个rabbitmq节点
#此文件的默认权限为400,它将chmod 777、scp复制到另一个节点,然后复制400 scp/var/lib/rabbit MQ/. Erlang.cookie 192.168.1.1
4、集群方式启动各自的rabbitmq节点
rabbitmq-server -detached
5、各从属节点停止后加入集群
rabbitmqctl stop_app#@后面接master的hostnamerabbitmqctljoin _ cluster rabbit @ xxrabbitmqctlstart _ app群集启动后,群集之一
#@之后要删除的节点的hostnamerabbitmqctlforget _ cluster _ node rabbit @ xxxx
6、更改集群名称
在任一节点上运行
rabbitmqctl set_cluster_name新群集名称
7、观察集群状态
在任一节点上运行
rabbitmqctl cluster_status
8、构成镜像队列
在任一节点上运行
rabbitmqctlset _ policy ha-all ' ^ ' { ' ha-mode ' : ' all ' } '一个节点收到消息时,将自动与另一个节点同步。 镜像模式没有严格的主从区分,任何节点都可以接受和处理消息。
HAProxy是一款高性能、免费、可靠的反向代理软件,可部署HAProx以实现rabbitmq群集负载平衡,并支持数万个并发连接。 特别适用于代理负载较大且需要保持会话状态的服务器。
通常使用两个或多个haproxy节点,keepalive确保haproxy的高可用性。
1、在两个节点上分别安装haproxy
2,
创建haproxy的配置文件
绑定本机的5672端口,外部访问rabbitmq集群时要通过 haproxy的ip:5672去访问。
3、启动haproxy
-f指定配置文件位置
4、访问haproxy查看rabbitmq集群状态
ip、port是任意一个haproxy节点的
引入KeepAlived保证HAProxy的高可用
反向代理只有一个节点时,容易出现单点故障,所以反向代理一般要多个节点集群。
反向代理是对外暴露的入口,访问地址固定,需使用keepalived保证高可用,节点故障时自动切换,保持访问地址不变。
1、安装keepalived
一般keepalived与haproxy节点对应,在每个haproxy节点上安装keepalived
ln是生成软连接,之前存在的可能是以前生成的,链接地址可能不对,要 rm -f 删除后重新生成。
2、修改keepalived的配置文件(新建?)
选择其中一个keepalived节点作为主节点,主keepalived节点配置:
sh脚本要自己写,确认haproxy节点是否正常。每隔指定时间自动执行1次那个脚本
密码一致才会加入到keepalived集群中
从keepalived节点配置:
优先级要设置得比主节点低。
主从节点的虚拟ip配置要一致。此处写错了,虚拟ip应该是11.70
3、编写执行脚本
分别再2个keepalived节点上操作
作用:检测haproxy集群状态,如果主haproxy节点挂掉了,自动切换为备份的haproxy
4、启动keepalived
用start启动,ps -ef查看keepalived是否已启动
5、可在keepalived节点上用 ip a 查看所有的ip地址,a即all,除了机器的实际ip,还有虚拟ip。
停掉主haproxy服务,虚拟ip会自动切换到从haproxy节点上。在从haproxy节点上ip a查看。
因为haproxy、keepalived都在相同机器上,虚拟ip即是haproxy的ip,haproxy集群(全部haproxy节点)共用这个虚拟ip。外部通过 虚拟ip:5672 访问rabbitmq集群。
rabbitmq集群配置文件
如果采用tar.xz源码方式编译安装,可以:
关键参数如下:
低水位线的设置要与集群模式对应,使用内存模式时配置内存低水位线,使用磁盘模式时配置磁盘低水位线
rabbitmq(镜像模式)集群的故障转移、恢复
rabbitmq集群节点宕机故障的解决
比如正常停机。
所有场景的前提:B是master
注意:是 --offline 2横
无法恢复
rabbitmq延迟插件的使用
比如:
订单签收后,如果一段时间内没有评价,默认好评淘宝订单签收后,如果一段时间内没有点击收货,自动收货,淘宝将钱打给卖家
1、下载插件
选择任意一个地址下载即可
2、将插件放到rabbitmq的plugin目录下
rabbitmq-plugins list #查看所有插件rabbitmq-plugins enable rabbitmq_delayed_message_exchange #启用指定插件第二步在rabbitmq集群的各个节点上都要做。无需重启节点。
3、使用
在管控台创建exchange时type选择x-delayed-message,初次使用时如果没有type刷新一下页面;在其它参数中设置 x-delayed-type=topic,此处指定的是交换机类型,根据需要指定,不一定要用topic。创建一个queue,绑定到exchange上。发送消息时,在headers中用x-delay指定延迟时间,单位ms。如果是镜像集群,会自动同步exchange、queue的改动到其它节点,镜像备份会用不同颜色显示。
(如果修改的是从节点,会自动同步到master?还是只能修改master,然后同步到从节点?)