目录
rabbitmq的集群架构模式
主备模式Warren
也称为warren模式,简单好用,常用于并发数、数据量不高的情况,在中小公司用得多。
HaProxy相当于TCP级别的代理,自动监控rabbitmq集群的状态,主节点故障时自动切换到从节点。
- listen 指定要监听的rabbitmq集群的名称
- bind 指定rabbitmq集群节点之间通信的端口,默认5672
- server后面是hostname,backup表示是备份节点。每5000ms HaProxy检查一次该节点的状态,rise 2 表示2次正常就认为该节点正常,fall 3表示3次失败就认为该节点故障。
远程模式Shovel
有些rabbitmq集群负载很大时,可以把部分消息复制到远程空闲的rabbitmq集群代为处理。
exchange感知到正常队列负载过大时,自动将部分数据路由到backup备份队列,通过shovel插件将backup队列中消息复制到远程rabbitmq上处理。
这种是rabbitmq早期的集群架构模式,现在基本不用了,如果要使用异地的rabbitmq集群分担压力,可以使用更好的多活模式。
多活模式Federation
整体是多活模式,每个中心的rabbitmq集群可以使用其它集群模式
多活模式可以把消息拉取到多个rabbitmq集群中,在多个rabbitmq集群中进行不同行为的消费
镜像模式Mirror
某个rabbitmq节点接收到消息后,本机存储后自动同步此消息到其它节点,一般rabbitmq至少3个节点,2个做备用,可靠性更高。
应用通过负载均衡服务器访问rabbitmq集群的某个节点,用KeepAlived保证负载均衡服务器的高可用。
常见的rabbitmq高可用架构是:镜像队列+Haproxy+KeepAlived
镜像模式集群搭建
1、vim /etc/hostname 设置好各个机器的主机名
2、在3台机器上分别安装rabbitmq,安装好后都先停掉rabbitmq server
3、同步cookie文件
选择任意一个rabbitmq节点作为master,复制该节点的的cookie文件到其它rabbitmq节点上
#该文件默认权限为400,先chmod 777,再scp复制到其它节点上,复制后改回400
scp /var/lib/rabbitmq/.erlang.cookie 192.168.1.7:/var/lib/rabbitmq/
也可以用winscp之类的软件直接传
4、集群方式分别启动各个rabbitmq节点
rabbitmq-server -detached
5、各个slave节点都先停掉、再加入集群
rabbitmqctl stop_app
#@后面试master的hostname
rabbitmqctl join_cluster rabbit@xxx
rabbitmqctl start_app
集群启动以后,如果要移除集群中的某个节点,在任意一个节点上执行以下命令即可
#@后面是要移除的节点的hostname
rabbitmqctl forget_cluster_node rabbit@xxxx
6、修改集群名称
在任意一个节点上执行
rabbitmqctl set_cluster_name 新的集群名称
7、查看集群状态
在任意一个节点上执行
rabbitmqctl cluster_status
8、配置镜像队列
在任意一个节点上执行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
某个节点接收到消息,会自动同步到其它节点。镜像模式并没有严格的主从节点之分,任何节点都可以接受、处理消息。
引入HAProx实现rabbitmq集群的负载均衡
HAProxy是一个高性能、免费可靠的反向代理软件,提供负载均衡功能,支持数以万计的并发连接,特别适合代理负载大、又需要保持会话状态的服务器。
一般要使用2个及以上的haproxy节点,再用keepalive保证haproxy的高可用。
1、分别在2个节点上安装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,然后同步到从节点?)