安装

  • 查询rabbitMQ镜像
docker search rabbitmq:management
  • 拉取镜像:
docker pull rabbitmq:management
  • 查看docker镜像列表是否有了
docker images
  • 操作容器(默认简单版)
  • -d 后台运行
  • -p 隐射端口
  • –name 指定rabbitMQ名称
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
  • 操作(设置账户密码版本)
  • -d 后台运行
  • -p 隐射端口
  • –name 指定rabbitMQ名称
  • RABBITMQ_DEFAULT_USER 指定用户账号
  • RABBITMQ_DEFAULT_PASS 指定账号密码
docker run -d -p 15672:15672  -p  5672:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone  rabbitmq:management
  • 最后即可访问:http://ip:15672
  • 默认账号密码:guest/guest

搭建集群

  • 机器1:服务器1ip
  • 机器2:服务器2ip
  • 操作机器1
docker run  -d --hostname rabbitmq1 --add-host=rabbitmq2:服务器2ip --restart=unless-stopped --name rabbitmq1 --net host -p 15672:15672  -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbit_mq'  rabbitmq:management

参数解释:

-d 容器后台运行

--hostname rabbitmq1 容器的主机名为 rabbitmq1

--add-host="rabbitmq1":192.168.23.189  修改容器内部的hosts

--restart=unless-stopped docker 容器重启后重启MQ

--name rabbitmq1 容器名为rabbitma1,在宿主机上运行“docker ps”命令时显示的名称

-p "5672:5672" 消息通讯端口

-p "15672:15672" 后台管理端口

-e RABBITMQ_DEFAULT_USER=admin 设置rabbitmq默认用户为admin

-e RABBITMQ_DEFAULT_PASS=admin 设置rabbitmq默认密码为admin

-e RABBITMQ_ERLANG_COOKIE='rabbit_mq' 设置rabbitmq的cookie为“rabbit_mq”,可以自定义为其他文本,容器保持一致即可
  • 启动完毕后,在网页打开服务器1ip:15672访问看看是否正常

  • 操作机器2

docker run  -d --hostname rabbitmq2 --add-host=rabbitmq1:机器1ip --restart=unless-stopped --name rabbitmq2 --net host -p 15672:15672  -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='rabbit_mq'  rabbitmq:management
  • 启动完毕后,在网页打开服务器2ip:15672访问看看是否正常

  • 回到机器1 进入刚刚启动的rabbit容器

docker exec -it rabbitmq1 bash
  • 进入容器后通过rabbitmqctl命令对MQ进行操作
#首先停止当前MQ
rabbitmqctl stop_app
#resetMQ
rabbitmqctl reset
#重新启动MQ
rabbitmqctl start_app
退出容器
exit
  • 回到机器2 进入刚刚启动的rabbit容器
docker exec -it rabbitmq2 bash
  • 进入容器后通过rabbitmqctl命令对MQ进行操作
#首先停止当前MQ
rabbitmqctl stop_app
#resetMQ
rabbitmqctl reset
#跟机器1的消息队列建立关系
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
#重新启动MQ
rabbitmqctl start_app
退出容器
exit
  • 登录查看
  • docker rabbitmq安装 docker安装rabbitmq集群_nginx


通过nginx进行负载均衡
  • 到这里测试用的两台集群已经搭建完毕,但是这时候还不能用,因为没有做负载。
  • 这里可以另外找一台机器也可以再机器1或者机器2上进行部署nginx来进行负载;实际部署中是需要在另外一台机器进行部署的;测试的话就在机器1上进行部署nginx了
  • 在机器1上面随便建立一个文件夹用来存放nginx的配置文件:/root/nginx/nginx_rabbitmq.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	
	proxy_redirect          off;
	proxy_set_header        Host $host;
	proxy_set_header        X-Real-IP $remote_addr;
	proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
	client_max_body_size    10m;
	client_body_buffer_size   128k;
	proxy_connect_timeout   5s;
	proxy_send_timeout      5s;
	proxy_read_timeout      5s;
	proxy_buffer_size        4k;
	proxy_buffers           4 32k;
	proxy_busy_buffers_size  64k;
	proxy_temp_file_write_size 64k;
	#rabbitmq管理界面
	upstream rabbitManage {
		server 192.168.23.188:15672;
		server 192.168.23.185:15672;
	}
	server {
        listen       15673;
        server_name  192.168.23.188; 
        location / {  
            proxy_pass   http://rabbitManage;
            index  index.html index.htm;  
        }  
    }
}
# rabbitmq通信
stream{
	upstream rabbitTcp{
        server 192.168.23.188:5672;
        server 192.168.23.189:5672;
    }

    server {
        listen       5673;
        server_name  192.168.23.188; 
        location / {  
            proxy_pass   http://rabbitTcp;
            index  index.html index.htm;  
        } 
    }
}

配置完毕后启动nginx:

docker run -it -d --name nginxMQ -v /root/nginx/nginx_rabbitmq.conf:/etc/nginx/nginx.conf  --privileged --net=host nginx
  • 启动完毕后通过负载的地址进行统一访问MQ
  • 后台地址:192.168.23.188:15673
  • 通讯地址:192.168.23.188:5673
至此通过Docker 搭建普通版本RabbitMQ集群已经搭建完毕了,普通版本的集群对于一般公司的业务来说是够用的了,如果针对业务量比较大的公司还是有些弊端的;虽然搭建了nginx进行负载但是还是缺少高可用;这时候需要搭建镜像版的集群:
与普通集群模式区别 主要是消息实体会主动在镜像节点间同步数据,而不是只存储数据元信息。 普通通集群模式 一旦数据节点挂了,如果没有持久化数据,数据就会丢失,且这时候也不会进行消费,只能等待消息重新回到队列中才能再次消费;但镜像集群模式可以保证集群只要不全部挂掉,数据就不会丢失,当相对于性能来说,镜像集群模式会比普通集群模式多出消耗数据的传输。故取决于业务场景进行取舍;且镜像版集群不仅仅需要nginx来进行负载也需要keepaplived进行转发;对机器的要求相对更严格一点