zoukankan      html  css  js  c++  java
  • RabbitMQ集群

    rabbitMQ集群有两种模式:

    第一种 普通模式:对于Queue来说,消息实体只存在于其中的一个节点,A/B两个节点仅有相同的元数据(队列结构)。也就是说数据存在于集群中某个节点,我们从另一个节点获取的时候是该节点和存储数据的节点临时进行传输。可以理解为A/B,搭建集群,数据存到A,我们从节点B可以获取到是B节点临时和A节点建立了数据通道从A获取数据,假设A节点宕机,则数据丢失。这种模式的话没有实现高可用。

    第二种 镜像模式:也称为HA高可用模式,与普通集群模式区别 主要是消息实体会主动在镜像节点间同步数据,而不是只存储数据元信息。这种模式保证了HA,但是降低了系统性能,如果镜像队列过多,在消息大量进来的情况下,集群内部的网络带宽会被这种内部同步消耗掉,这种适用于可靠性要求较高的场景中。

    下面研究镜像集群模式的搭建,还是以docker的形式进行搭建。

    1.拉取镜像

    docker pull hub.c.163.com/library/rabbitmq:management

    2.创建容器,启动两个mq进程

    1.容器1

    $ docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' hub.c.163.com/library/rabbitmq:management
    df45f88945b572ed8b23c8998db8819e7c7826ded2058ea235c2f04f775f4a2c

    2.容器2

    $ docker run -d --hostname rabbitmq02 --name rabbitmqCluster02  -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie'  --link rabbitmqCluster01:rabbitmq01 hub.c.163.com/library/rabbitmq:management
    1f18cbceb309d9ac3f723563151d81f18955b1e5534f23222b3e92cba57dbb86

    参数解释:

    -d: 后台运行容器,并返回容器ID;
    --hostname rabbitmq02  指定容器的hostname
    --name="rabbitmqCluster02": 为容器指定一个名称;
    -p 外部端口:内部端口,是将端口做映射。15672是管理界面端口,5672是客户端通讯接口
    -e  设置环境变量
    --link=[]: 添加链接到另一个容器;也就是使得两个容器可以通信

    这里解释下。-e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' 是设置环境变量。ErlangCookie是保证不同节点间可以互相通信的密钥,要保证不同节点间可以互相通信必须保证共享相同的Erlang Cookie,在容器内部的话是放在/var/lib/rabbitmq/.erlang.cookie

    进入容器内部查看:

    root@rabbitmq02:/# cat /var/lib/rabbitmq/.erlang.cookie
    rabbitmqCookie

    3.启动后应该通过15672端口和15673端口都可以访问到management控制台

    4.容器节点加入集群

    1.对节点1设置

    (1)进入容器1,也就是rabbitmq01

    $ docker exec -it df bash

    (2) 停止服务、清数据、重启

    root@rabbitmq01:/# rabbitmqctl stop_app  #停服务
    Stopping rabbit application on node rabbit@rabbitmq01
    root@rabbitmq01:/# rabbitmqctl reset  #清掉数据
    Resetting node rabbit@rabbitmq01
    root@rabbitmq01:/# rabbitmqctl start_app  重启
    Starting node rabbit@rabbitmq01

    2.对节点2设置

    (1)进入容器

    $ docker exec -it 1f /bin/bash

    (2)加入集群

    root@rabbitmq02:/# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@rabbitmq02
    root@rabbitmq02:/# rabbitmqctl reset
    Resetting node rabbit@rabbitmq02
    root@rabbitmq02:/# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
    Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
    root@rabbitmq02:/# rabbitmqctl start_app
    Starting node rabbit@rabbitmq02

    rabbitmqctl join_cluster --ram rabbit@rabbitmq01 是加入集群,rabbitmq01 是另一个节点的hostname。

    补充:如果还有第三个节点加入集群,也是用上面的方式加入集群

    5.到管理端查看,可以看到节点信息

    6. 增加一个策略,设置集群镜像模式

      可以到控制台设置,也可以到界面设置。这里在控制台设置:

    root@rabbitmq01:/# rabbitmqctl set_policy ha "^" '{"ha-mode":"all"}'
    Setting policy "ha" for pattern "^" to "{"ha-mode":"all"}" with priority "0"

    到界面查看:

      到此集群搭建完成。

    7.Springboot连接集群

    只需要修改连接地址就可以了,如下:

    #cluster
    spring.rabbitmq.addresses=192.168.99.100:5672,192.168.99.100:5673
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
  • 相关阅读:
    jQuery为啥要提供一个load()方法?
    某大学程序设计竞赛
    【Error】JavaWeb: 严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
    form表单和表格
    AJAX入门---DOM操作HTML
    设计模式学习01—单例模式
    Spring MVC 数据验证——validate注解方式
    HOW TO: How to import UUID function into Postgre 9.3
    STM8S 串口应用 UART2 STM8S105
    微信公众平台应用开发框架sophia设计不足(1)
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/13943824.html
Copyright © 2011-2022 走看看