zoukankan      html  css  js  c++  java
  • RabbitMQ docker部署镜像队列

    一、镜像模式

    docker pull rabbitmq:3-management

    容器间建立连接,不使用--link,推荐使用 network

    创建桥接网络

    docker network create rabbitmanet

    启动并创建容器master72、slave73、slave74

    docker run -d --name=master72 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=master72 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h master72 --net=rabbitmanet rabbitmq:3-management
    docker run -d --name=slave73 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=slave73 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h slave73 --net=rabbitmanet rabbitmq:3-management 
    docker run -d --name=slave74 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=slave74 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h slave74 --net=rabbitmanet rabbitmq:3-management
    RABBITMQ_ERLANG_COOKIE:通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有容器都一致即可。
    -h: 设置容器hostname名称
    –net: 设置所属网络

    访问:IP:15672

    遇到问题,阿里云服务器需要创建安全组才能访问

    默认账户密码:guest

    基础了解:https://blog.csdn.net/lobber1987/article/details/79045494

    新增用户密码(可以跳过):

    在添加用户时,我们选择了Tags,Tags也就是用户角色,它有如下五种:

    超级管理员(administrator):可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

    监控者(monitoring):可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。

    策略制定者(policymaker):可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。

    普通管理者(management):仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

    其他:无法登陆管理控制台,通常就是普通的生产者和消费者。

    通过命令的方式

    1.  
      # 设置用户为administrator角色
    2.  
      rabbitmqctl set_user_tags username administrator

    添加用户

    docker exec -it myrabbit1 bash

    rabbitmqctl list_users

    rabbitmqctl add_user username passwd
    rabbitmqctl set_user_tags newadmin administrator 
    rabbitmqctl set_permissions -p / newadmin "." "." ".*" (这个没有执行,也能登陆,等遇到问题在说)

    删除用户

    rabbitmqctl delete_user username

    修改用户密码

    rabbitmqctl change_password username newpasswd

    查看用户列表

    rabbitmqctl list_users

    salve加入集群操作(注意做这个步骤的时候:需要配置/etc/hosts必须相互能够寻地到 我们已通过-h指定hostname)
    分别进入slave73、slave73容器(docker exec -it 容器id /bin/bash),执行一下:

    rabbitmqctl stop_app

    rabbitmqctl join_cluster --ram master72@master72

    //(--ram:内存存储方式,默认磁盘存储 master72磁盘存储,用于数据存储和交换)

    rabbitmqctl start_app 

    ex:

    [root@iZuf6f9ue9eyhx2y1892nhZ ~]# docker exec -it 5ba894a93d6a /bin/bash
    root@slave74:/# rabbitmqctl stop_app
    RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
    Stopping rabbit application on node slave74@slave74 ...
    root@slave74:/# rabbitmqctl join_cluster --ram master72@master72
    RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
    Clustering node slave74@slave74 with master72@master72
    root@slave74:/# rabbitmqctl start_app
    RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
    Starting node slave74@slave74 ...

    访问任意一个节点:

    //其他基本操作 // 在另外其他节点上操作要移除的集群节点 rabbitmqctl forget_cluster_node master73@master73

    //集群名称(默认为第一个node名称)修改(任意节点): rabbitmqctl set_cluster_name rabbitmq_cluster1

    //查看集群状态(任意节点) rabbitmqctl cluster_status

    配置镜像队列:

    //设置镜像队列策略(在任意一个节点上执行) rabbitmqctl set_policy ha-all "^node." '{"ha-mode":"all"}'

    其他问题

    如出现改过期警告:RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.

    有些特殊的情况,比如已经运行了一段时间的几个单个物理机,我们在之前没有设置过相同的Erlang Cookie值,现在我们要把单个的物理机部署成集群,实现我们需要同步Erlang的Cookie值。

    1.为什么要配置相同的erlang cookie?

    因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。

    2.Erlang Cookie的位置

    要想知道Erlang Cookie位置,首先要取得RabbitMQ启动日志里面的home dir路径,作为根路径。使用:“docker logs 容器名称”查看,

    注意:每个人的erlang cookie位置可能不同,一定要查看自己的home dir路径。

    3.复制Erlang Cookie到其他RabbitMQ节点

    获取到第一个RabbitMQ的Erlang Cookie之后,只需要把这个文件复制到其他RabbitMQ节点即可。

    物理机和容器之间复制命令如下:

    • 容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
    • 物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录

    设置Erlang Cookie文件权限:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。

    二、HaProxy

    HaProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HaProxy特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。HaProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以简单安全整合进您当前框架中,同时可以保护你的web服务器不被暴露到网络上

    获取最新镜像:

    sudo docker pull haproxy

    创建容器rabbitmq-haproxy8100挂载的配置文件haproxy.cfg

    [root@iZuf6f9ue9eyhx2y1892nhZ 8100]# pwd
    /home/haproxy/8100

    [root@iZuf6f9ue9eyhx2y1892nhZ 8100]# cat haproxy.cfg

    #logging options
    global
        log 127.0.0.1 local0 info
        maxconn 5120
        chroot /usr/local/etc/haproxy
        uid 99
        gid 99
        daemon
        quiet
        nbproc 20
        pidfile /var/run/haproxy.pid
    
    defaults
        log global
        #使用4层代理模式,”mode http”为7层代理模式
        mode tcp
        #if you set mode to tcp,then you nust change tcplog into httplog
        option tcplog
        option dontlognull
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5s
        #客户端空闲超时时间为 60秒 则HA 发起重连机制
        timeout client 60s
        #服务器端链接超时时间为 15秒 则HA 发起重连机制
        timeout server 15s
    #front-end IP for consumers and producters
    listen rabbitmq_cluster
        bind 0.0.0.0:5678
        #配置TCP模式
        mode tcp
        #balance url_param userid
        #balance url_param session_id check_post 64
        #balance hdr(User-Agent)
        #balance hdr(host)
        #balance hdr(Host) use_domain_only
        #balance rdp-cookie
        #balance leastconn
        #balance source //ip
        #简单的轮询
        balance roundrobin
        #rabbitmq集群节点配置 
        #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
        server master72 11.111.11.11:5672 check inter 5000 rise 2 fall 2
        server slave73 11.111.11.11:5673 check inter 5000 rise 2 fall 2
        server slave74 11.111.11.11:5674 check inter 5000 rise 2 fall 2
    #配置haproxy web监控,查看统计信息
    listen stats
        bind 0.0.0.0:8101
        mode http
        option httplog
        stats enable
        #设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
        stats uri /rabbitmq-stats
        stats refresh 5s
        stats auth admin:admin@1234
    listen rabbitmq_admin #监听8000端口转发到rabbitmq的客户端
        bind 0.0.0.0:8001
        server master72 11.111.11.11:15672 check inter 5000 rise 2 fall 2
        server slave73 11.111.11.11:15673 check inter 5000 rise 2 fall 2
        server slave74 11.111.11.11:15674 check inter 5000 rise 2 fall 2

    -----

    运行容器:

    docker run --name rabbitmq-haproxy8100 -p 5677:5677 -p 8100:8100 -p 8000:8000 --net=rabbitmanet -v /home/haproxy/8100/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest

    后记:至于keppalived,后续再说

    
    

     




     
  • 相关阅读:
    报表中的Excel操作之Aspose.Cells(Excel模板)
    .NET开源组件
    JSON 和 JSONP
    servlet 中getLastModified()
    spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。
    spring mvc dispatcherservlet处理request流程
    log显示error时的堆栈信息理解和分析
    web项目log日志查看分析->流程理解
    war包结构
    Spring Boot干货系列:(三)启动原理解析
  • 原文地址:https://www.cnblogs.com/gavin-yao/p/13974523.html
Copyright © 2011-2022 走看看