zoukankan      html  css  js  c++  java
  • docker-compose安装rabbitmq集群(主从集群---》镜像集群)

    docker-compose安装rabbitmq集群(主从集群---》镜像集群)

    yls
    2020/5/11

    创建docker-compose.yml 文件

    version: '3'
    services:
      rabbitmq1:
        image: rabbitmq:3.8.3-management
        container_name: rabbitmq1
        restart: always
        hostname: rabbitmq1
        ports:
          - 15683:15672
          - 5683:5672
        volumes:
          - ./data1:/var/lib/rabbitmq
          - ./rabbitmq.sh:/home/rabbitmq.sh
          - ./etc/hosts:/etc/hosts
        environment:
          - RABBITMQ_DEFAULT_USER=root
          - RABBITMQ_DEFAULT_PASS=root
          - RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
        networks:
          rabbit:
            ipv4_address: 192.168.6.2
    
      rabbitmq2:
        image: rabbitmq:3.8.3-management
        container_name: rabbitmq2
        restart: always
        hostname: rabbitmq2
        ports:
          - 15684:15672
          - 5684:5672
        volumes:
          - ./data2:/var/lib/rabbitmq
          - ./rabbitmq.sh:/home/rabbitmq.sh
          - ./etc/hosts:/etc/hosts
        environment:
          - RABBITMQ_DEFAULT_USER=root
          - RABBITMQ_DEFAULT_PASS=root
          - RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
        networks:
          rabbit:
            ipv4_address: 192.168.6.3
    
      rabbitmq3:
        image: rabbitmq:3.8.3-management
        container_name: rabbitmq3
        restart: always
        hostname: rabbitmq3
        ports:
          - 15692:15672
          - 5692:5672
        volumes:
          - ./data3:/var/lib/rabbitmq
          - ./rabbitmq.sh:/home/rabbitmq.sh
          - ./etc/hosts:/etc/hosts
        environment:
          - RABBITMQ_DEFAULT_USER=root
          - RABBITMQ_DEFAULT_PASS=root
          - RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
        networks:
          rabbit:
            ipv4_address: 192.168.6.4
    
    networks:
      rabbit:
        external:
          name: rabbitmqnet
    
    

    创建 rabbitmqnet 子网

    docker network create --subnet 192.168.6.1/24 rabbitmqnet
    

    创建 rabbitmq.sh 脚本

    如果想用ram存储就用第一个shell文件,用硬盘存储就用第二个shell文件

    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbitmq@rabbitmq1
    rabbitmqctl start_app
    
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster rabbitmq@rabbitmq1
    rabbitmqctl start_app
    

    配置docker-compose.yml文件同步目录下的 ./etc/hosts 文件(集群节点间需能互相访问,故每个集群节点的hosts文件应包含集群内所有节点的信息以保证互相解析)

    192.168.6.2 rabbitmq1
    192.168.6.3 rabbitmq2
    192.168.6.4 rabbitmq3
    

    注意:一定不要加rabbit@ ,我之前配成 192.168.6.4 rabbit@rabbitmq1 ,白白浪费好多时间

    若不配置或者配错hosts文件,会出现如下错误

    sudo rabbitmqctl join_cluster --ram rabbit@rabbitmq11
    Clustering node rrabbit@rabbitmq1 with rabbit@rabbitmq-node1...
    Error: unable to connect to nodes rabbit@rabbitmq1]: nodedown
     
    DIAGNOSTICS
    ===========
    attempted to contact: [rabbit@rabbitmq1]
    rabbit@rabbitmq-node1:
      * unable to connect to epmd (port 4369) on rabbitmq1: nxdomain (non-existing domain)
    current node details:
    - node name: 'rabbitmqctl-526rabbitmq1'
    - home dir: /var/lib/rabbitmq
    - cookie hash: 50YO3zK+HJHos0tab1vHjg==
    

    docker-compose up -d 运行容器

    docker exec -it rabbitmq1 bash 分别进入从节点容器(本文中从节点是 rabbitmq3,rabbitmq2),启动脚本

    chmod +777 /home/rabbitmq.sh
    
    ./home/rabbitmq.sh
    

    主从集群已经搭建好,查看集群状态 rabbitmqctl cluster_status

    主从集群的不足: 默认情况下,队列只位于主节点上,尽管他们可以从所有节点看到和访问,也就是说整个集群与主节点共存亡。
    因此,当主节点宕机时,无法进行自动的故障转移,下面的队列镜像集群可以解决这个问题。

    下面开始搭队列镜像集群

    镜像集群就是在主从集群的基础上,添加相应策略,将主节点消息队列中的信息备份到其它节点上,主节点宕机时,对整个集群不产生影响,使集群可以高可用。

    添加策略(可以在创建队列之前添加,也可以创建队列之后添加)

    参考官方文档: https://www.rabbitmq.com/parameters.html#policies

    策略模板([]表示可选参数,<>表示必穿参数)
    rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
    
    参数 说明
    -p vhost 对指定的vhost进行设置
    name policy的名称
    pattern queue的匹配模式(正则表达式)
    definition 镜像定义:包含三个部分ha-mode,ha-params,ha-sync-mode
    ha-mode:指明镜像队列的模式。all: 集群中所有节点进行镜像;exactly:在指定个数节点进行镜像,节点个数由ha-params指定;nodes:在指定节点进行镜像,节点名称由ha-params指定
    ha-params: ha-mode模式需要用到的参数
    ha-sync-mode: 消息的同步方式(automatic,manual)
    priority policy的优先级,当有多个策略指定同一个队列时,优先级高的策略生效

    添加策略实例

    rabbitmqctl set_policy ha-11 '^11' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    

    说明:策略正则表达式为 "^" 表示匹配所有队列名称, ^11 :表示匹配hello开头的队列

    查看当前策略

    rabbitmqctl list_policies
    

    删除策略

    rabbitmqctl clear_policy ha-11
    

    以上策略的添加,删除,查看都可以在web UI 界面操作。

  • 相关阅读:
    c++ tinyxml
    fmod简单播放mp3
    D3DXVec3TransformCoord 函数 D3DXVec3TransformNormal 函数
    D3DXMATRIX
    OpenGL FBO
    Opengl Freeimage 保存屏幕像素到图片
    fmod播放mp3 vs2010测试通过
    Hermite与Bezier曲线绘制方法研究
    D3DXVECTOR3
    c++ windows下创建文件夹和删除文件夹
  • 原文地址:https://www.cnblogs.com/yloved/p/12868892.html
Copyright © 2011-2022 走看看