rabbitmq分布式集群简单研究

1.为什么要研究rabbitmq分布式集群,希望解决什么问题?
  最近做巡检,然后发现生产环境,有两台mq的负载很高了。已经达到了10了。经过排查发现是由于写操作导致(因为mq要把消息持久化,所以要大量的进行写操作。)。和研发的头进行了一次拆分以后,即不同的服务使用不同的mq(这里说下,本来我们每种服务应该单独使用此服务的mq,但是因为初期上线时服务器资源不够。所以部分服务合用了一些mq)。拆分完以后发现,负载还是没有办法下去。重新分析了下后发现,发送消息频繁的服务,无法从此组mq切走。因为其他mq没有此消息。此时就需要把此组mq的消息,也转到到另一组mq。所以开始进行调研,看是否有支持的功能。然后从rabbitmq官网找到了插件。
2.想要rabbitmq分布式集群完成一个什么结果?
  实现双集群之间的消息共享

rabbitmq分布式研究过程

1.测试资源准备

  1. 源mq:192.168.2.211   目的mq:192.168.1.202

2.搭建rabbitmq集群

  1. rabbitmq集群搭建

3.学习rabbitctl、rabbitmq-plugins等命令的使用

  1. rabbitmqctl命令详解
  2. rabbitmq-plugins命令用法

4.需要基础知识

  1. 了解rabbitmq的基本三个基本概念:Queue(队列)、Exchange(交换机)、路由、routing key、Binding、Binding key等概念。可以参考此博文。rabbitmq基本概念

5.了解Federation和Shovel这两个插件的区别。

  1. Federation插件官方文档
  2. Shovel插件官方文档
  3. 从官网的文章看,这两个插件的主要差别在Shovel会把消息消费掉,而Federation是把消息转发到路由(英文不好,所以不确定对不对。)。最后选定了Federation来做实现。

6.Federation插件配置过程

  1. 安转Feration插件
    1.1 rabbitmq-plugins enable rabbitmq_federation
    1.2 rabbitmq-plugins enable rabbitmq_federation_management
  2. 配置Feration
    2.1 rabbitmqctl:rabbitmqctl set_parameter federation-upstream my-upstream
    '{"uri":"amqp://server-name","expires":3600000}'
    2.2 rabbitmqctl(Windows):rabbitmqctl set_parameter federation-upstream my-upstream
    ^ "{""uri"":""amqp://server-name"",""expires"":3600000}"
    2.3 HTTP_API:PUT /api/parameters/federation-upstream/%2f/my-upstream
    {"value":{"uri":"amqp://server-name","expires":3600000}}
    2.4 Web_UI:Navigate to Admin > Federation Upstreams > Add a new upstream.
    Enter "my-upstream" next to Name,
    "amqp://server-name" next to URI, and 36000000 next to Expiry. Click Add upstream.
  3. 添加upstream
    3.1 rabbitmqctl:rabbitmqctl set_policy --apply-to exchanges federate-me
    "^amq\." '{"federation-upstream-set":"all"}'
    3.2 rabbitmqctl(Windows):rabbitmqctl set_policy --apply-to exchanges federate-me
    "^amq\." ^ "{""federation-upstream-set"":""all""}"
    3.3 HTTP_API:PUT /api/policies/%2f/federate-me{"pattern":"^amq\.",
    "definition":{"federation-upstream-set":"all"}, "apply-to":"exchanges"}
    3.4 Web_UI:Navigate to Admin > Policies > Add / update a policy. Enter "federate-me"
    next to "Name", "^amq\." next to "Pattern", choose "Exchanges" from the "Apply to"
    drop down list and enter "federation-upstream-set" = "all" in the first line next to "Policy". Click "Add" policy.
  4. 经过上面三步以后,服务器的配置已经完成。最后一步,在下游服务器创见队列,并通过Binding key与上游服务器的某个交换机进行绑定。绑定完成以后。发送到上游此交换机的消息,都会路由到这个队列一份。
Previous Post

阿里云语音通知程序

Next Post

rabbitmq集群搭建

Related Posts