RabbitMQ之镜像模式及Haproxy的安装使用

接上一篇:Centos7 RabbitMQ集群版安装

前言:上一篇搭建的仅仅是普通集群,虽然交换机、绑定关系、对列等可以复制到集群的其他节点,但是队列内容不会复制,如果队列宕机将会导致队列无法使用,不能保证队列的高可用性。

详情参考:http://next.rabbitmq.com/ha.html

集群模式:

      对于queue来说,message data只存在于集群中的一个节点上,而message metadata则存在于集群中的所有节点。当message进入A节点的queue后,consumer从B节点拉去时,rabbitmq会临时在A、B之间进行消息传输,把A中的message data取出来发送给链接在B上的consumer。这样就存在A这个瓶颈,无论链接A还是B,出口总是在A。还有如果A节点故障后,在B节点无法取到A节点中还未消费的消息,如果做了消息持久化,则A节点恢复后,仍然可以被消费,但是如果没做消息持久化,即使A恢复了,消息也丢失了。

镜像模式:

      该模式和集群模式的区别在于,message data会在镜像节点间主动同步,而不是在consumer取数据时临时拉取,当然由于在节点间主动同步数据,副作用也很明显,降低系统性能,一但大量消息进入,则同步的消息非常多。

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

1.设置镜像队列策略

  1. 在任意一个节点上执行
  2. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  3. 将所有队列设置为镜像队列,队列会被复制到各个节点,状态保持一致
  4. 在rabbitmq的web控制台上可以看到
  5. 输入rabbitmqctl查看帮助
  6. set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>   //设置策略
  7. clear_policy [-p <vhost>] <name>    //清除策略
  8. list_policies [-p <vhost>]   //策略列表
  9. rabbitmqctl详情查看:https://blog.csdn.net/mlym521/article/details/81990265
  10. [-p <vhost>]: 可选参数,针对指定vhost下的queue进行设置

    [--priority <priority>]:可选参数,policy的优先级

    [--apply-to <apply-to>]:应用到 exchanges或者queue或者 all

    <name>: policy的名称

    <pattern>: 对列(queue)或者转换器(exchange)的正则匹配模式

    <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

  11. 具体用法参考:http://www.cnblogs.com/zhengchunyuan/p/9253722.html

2.Haproxy的安装

  1. 上传haproxy-1.7.8.tar.gz包到服务器上
  2. tar -zxvf  haproxy-1.7.8.tar.gz -C /usr/local
  3. 将源码解压之后,需要运行make来将HAProxy编译为可执行程序。在执行make之前需要先选择目标平台,通常对于UNIX系的操作系统可以选择TARGET=generic
  4. make TARGET=generic //编译
  5. export PATH=$PATH:/usr/local/haproxy-1.7.8  //配置环境变量
  6. source /etc/profile //source一下就OK了

  7. mkdir conf   //在haproxy-1.7.8目录下创键conf目录

  8. 配置haproxy.cfg

  9. haproxy -f ./conf/haproxy.cfg -d   //启动haproxy  -d表示debug模式

  10. 该图显示我的rabbitmq第二个节点没有启动DOWN,启动之后显示UP

  11. 两个rabbitmq节点启动完成之后

  12. 重新启动haproxy显示为

  13. 访问haproxy的web端,绑定端口为8100

  14. 通过haproxy访问rabbitmq的web管理控制台,绑定端口为8004

  15. 客户端连接haproy就OK了,这里haproxy绑定的端口为5671

猜你喜欢

转载自blog.csdn.net/qq_39669058/article/details/84982772