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,后续再说


 




 
原文地址:https://www.cnblogs.com/gavin-yao/p/13974523.html