前言
《CentOS7部署RabbitMQ集群环境-普通集群》一文中说明了如何配置RabbitMQ的默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。如下文我们来看看如何镜像模式来解决复制的问题,从而提高可用性。
镜像集群:
使用Rabbit镜像功能,需要基于rabbitmq策略来实现,策略是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。配置具体步骤如下:
(1)登录web端
如《CentOS7部署RabbitMQ集群环境-普通集群》一文中我们增加的远程用户admin,进入网页http://192.168.12.106:15672/
(2) 创建镜像队列
a.在web端,选择点admin菜单,选择右侧的Virtual Hosts选项,然后选择"Add a new virtual host",输入virtual host的名称:test
b.点击admin菜单,选择右侧的Policies选项,在左侧最下下边的Add / update a policy
输入策略名称test,最主要是Apply to,可以作用在exchange或者queues上,当然也可以包含这两个。策略选择还是比较丰富的,最常用的是HAmode,还有MessageTTL(消息的过期时间)。这些策略按照几个维度分组了,有跟高可用相关的,有Federation(集群之间同步消息)相关的 ,有Queue相关的,还有Exchange相关的。可以根据的业务场景进行调整。
正则匹配:说明队列或交换机的名字要匹配的正则名称(如这里填写的.order.可以匹配a.order.b.c),也可以写成全名匹配,如test,只能test名称的队列或交换机才能匹配上。
应用于:交换机或队列或交换机以及队列(策略镜像复制应用于哪一类)
优先级:不填,使用默认即可(0)
策略定义:是以key-value成对出现,key为下方HA(HA mode、HA params、HA sync mode),value为选择下方的HA的3中模式的“?”说明的某一个值(点击?会提示你填写什么值)。
我们定义了策略的匹配模式.order.,这样可以避免将所有的exchange、queue都镜像了。我们新建了一个ex.order.topic exchange,它的features中应用了exchange_queue_ha策略(匹配上交换机或队列都可以用上--这里我们策略是应用于交换机和队列的);创建一个qu.order.crm queue,注意看它的node属性里有一个”Synchronised mirrors:rabbit@rabbitmq_node2“镜像复制(鼠标移动到队列行的feature上就能显示出来),features里也应用了exchange_queue_ha策略。这个时候,队列其实在3个节点里都是有的,虽然我们创建的时候是在rabbit@rabbit1里的,但是它会复制到集群里的其他节点.在创建HAmode的时候可以提供HA params参数,来限定复制节点的个数,这通常用来提高性能和HA之间的平衡。
最后填入参数,点击添加策略按钮即可:我这里参数为test、.order.、镜像和队列、ha-mode=all且ha-sync-mode为自动
正如我们说的,使用Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为,在cluster中任意节点启用策略,策略会自动同步到集群节点,命令如下:
rabbitmqctl set_policy -p test testpolice "^ha\." '{"ha-mode":"all"}'
表示:在虚拟即test下,将测试名为testpolice的策略应用到以“ha.”开头的queue mirror到cluster中所有节点。
实例:
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
rabbitmqctl set_policy ha-all "^SMS_BUSINESS_NOW\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'
具体使用:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-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,manually
Priority: 可选参数, policy的优先级
(3)虚拟机管理
新建:virtual_host: rabbitmqctl add_vhost xxx
撤销:virtual_host: rabbitmqctl delete_vhost xxx
删除队列:rabbitmqctl -p /activity purge_queue activity_register
(4)负载均衡以及应用层的高可用
可以使用haproxy进行负载均衡处理,使用keepalive虚拟ip,实现搞可用处理。
快来成为我的朋友或合作伙伴,一起交流,一起进步!
QQ群:961179337
微信:lixiang6153
邮箱:[email protected]
公众号:IT技术快餐
更多资料等你来拿!