docker 部署 rabbitmq集群

rabbitmq集群:
    pull:
        docker pull rabbitmq
        
        
    普通模式(默认):
        what:
            集群中各节点有相同的队列结构, 但消息只会存在于集群中的一个节点。 对于消费者来说, 若消息进入 A 节点的 Queue 中, 当从 B 节点拉取时, RabbitMQ 会将消息从 A 中取出, 并经过 B 发送给消费者
    
        应用场景: 
            该模式各适合于消息无需持久化的场合, 如日志队列。 当队列非持久化, 且创建该队列的节点宕机, 客户端才可以重连集群其他节点, 并重新创建队列。 若为持久化,只能等故障节点恢复。
            
    镜像模式:
        what:
            与普通模式不同之处是消息实体会主动在镜像节点间同步, 而不是在取数据时临时拉取, 高可用; 该模式下, mirror queue 有一套选举算法, 即 1 个 master、 n 个 slaver, 生产者、 消费者的请求都会转至 master
            
        应用场景:
             可靠性要求较高场合, 如下单、 库存队列
             
        缺点:
             若镜像队列过多, 且消息体量大, 集群内部网络带宽将会被此种同步通讯所消耗。
             镜像集群也是基于普通集群, 即只有先搭建普通集群, 然后才能设置镜像队列。
             若消费过程中, master 挂掉, 则选举新 master, 若未来得及确认, 则可能会重复消费。
             
    集群搭建:
        准备阶段:
            #创建rabbitmq用于存放rabbitmq集群映射信息
            mkdir /mydata/rabbitmq
            #分别创建各集群映射目录
            cd rabbitmq/
            mkdir rabbitmq01 rabbitmq02 rabbitmq03
            
        启动容器:    
            
            docker run -d --hostname rabbitmq01 --name rabbitmq01 -v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='fly' rabbitmq:latest-management
            
            docker run -d --hostname rabbitmq02 --name rabbitmq02 -v/mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='fly' --link rabbitmq01:rabbitmq01 rabbitmq:latest-management
            
            docker run -d --hostname rabbitmq03 --name rabbitmq03 -v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15675:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='fly' --link rabbitmq01:rabbitmq01 --link rabbitmq02:rabbitmq02 rabbitmq:latest-management
            

        主意事项:
            –hostname 设置容器的主机名
            RABBITMQ_ERLANG_COOKIE: 节点认证作用, 部署集成时 需要同步该值
            RABBITMQ_ERLANG_COOKIE 为rabbitmq多节点之间通信所用到的cookie,rabbitmq集群就是利用这一特性实现的
            
        设置rabbitmq01为主节点
            docker exec -it rabbitmq01 /bin/bash
            rabbitmqctl stop_app
            rabbitmqctl reset
            rabbitmqctl start_app
            Exit
            
        将rabbitmq02加入rabbitmq01
            docker exec -it rabbitmq02 /bin/bash
            rabbitmqctl stop_app
            rabbitmqctl reset
            rabbitmqctl join_cluster --ram rabbit@rabbitmq01
            rabbitmqctl start_app
            exit
            
        将rabbitmq03加入rabbitmq01
            docker exec -it rabbitmq03 /bin/bash
            rabbitmqctl stop_app
            rabbitmqctl reset
            rabbitmqctl join_cluster --ram rabbit@rabbitmq01
            rabbitmqctl start_app
            exit


        首先进入主节点查看当前策略:
            docker exec -it rabbitmq01 /bin/bash
            rabbitmqctl list_policies -p /
            
        改为镜像模式:
            rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
            
            
        为rabbitmq安装可视化插件
            rabbitmq-plugins enable rabbitmq_management
            
        账号:guest

        密码:guest

            
            
        

 

posted @ 2023-11-12 18:38  54菜鸟  阅读(55)  评论(0编辑  收藏  举报