分布式架构

【消息队列】RabbitMQ的高可用集群

2019-05-07  本文已影响0人  夏天的风风风

        【高可用篇】

        做高可用的目的:允许个别节点崩溃的情况下继续平稳运行,可以通过动态扩容来增加吞吐量。

        RabbitMQ的Cluster集群分为两种情况:普通集群模式 和 镜像模式;

        一、普通模式

        默认的集群模式,以两个rabbit01和rabbit02为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01,rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的queue后,如果consumer从rabbit02节点进行消费,broker会临时在rabbit01和rabbit02之间进行消息传输,把rabbit01节点的消息实体取出后,经过rabbit02发送给consumer。所以consumer应尽量连接每一个节点,从中拉取消息。

        上述过程存在一个明显的缺点,即consumer无论是连接rabbit01还是rabbit02,如果入口总是在rabbit01,那么瓶颈就在rabbit01上面,如果rabbit01挂掉的话,则会造成消费者无法消费到消息,此类问题属于单节点依赖问题。

        要避免该模式的缺陷,合理的方式是对于同一个逻辑队列,在多个节点建立物理Queue,从而避免掉单节点的依赖问题。

        二、镜像模式

        将需要消费的队列变为镜像队列,存在于多个节点,这样就实现了HA,消息实体会主动在镜像节点之间同步,而不像普通模式那样,在consumer消费时才临时读取。

        镜像模式的缺点就是在集群内部的同步通讯会占用额外的带宽。

        三、设置镜像模式

        设置镜像队列的命令:“rabbitmqctl set_policy 名称 匹配模式(正则) 镜像定义”

        例如:rabbitmqctl set_policy   hapolicy   "^"   '{"ha-mode":"exactly","ha-params":2}'

        可以看出,设置镜像模式一共需要三个参数,参数之间用空格分割

        四、镜像参数解读

        1  参数一:hapolicy  代表策略名称,内容自定义;

        2  参数二:"^"  队列名称的匹配规则,使用正则表达式表示,^代表匹配所有;

        3  参数三:为镜像队列的主体规则,是个json字符串,分为三个属性,ha-mode | ha-params | ha-sync-mode,详细解释如下:

        ha-mode:镜像模式,分类:all/exactly/nodes,all存储在所有节点;exactly存储x个节点,节点的个数由ha-params指定;nodes指定存储的节点上名称,通过ha-params指定;

        ha-params:作为参数,为ha-mode的补充;

        ha-sync-mode:镜像消息同步方式:automatic(自动),manually(手动);

HA 策略

        

上一篇下一篇

猜你喜欢

热点阅读