以下均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
Rabbitmq的三种工作模式
1.单机模式
2.普通集群
1.每个节点元数据(队列结构等)相同,但是消息只在某个节点独一份
2.A节点有消息,B节点只有队列结构,当消费者连接B节点的时候,B与A就会通讯获取消息,然后从B口发给消费者
3.一个集群至少要有一个磁盘节点
4.如果有节点的的队列是持久化节点,当这个节点挂后,其他节点就不能定义已经创建过持久队列,只能等节点恢复
5.磁盘节点不等于他的队列都是持久化节点,莫混淆
3.镜像集群
1.节点会复制同步消息
2.它解决普通模式的消息丢失的问题
3.但是它也带来了集群内部的通讯消耗,造成速度慢的,资源消耗大的问题。
Docker普通集群搭建
Docker环境搭建
Ubuntu 18
Docker 使用官方deb安装
https://docs.docker.com/install/linux/docker-ce/ubuntu/
然后修改docker仓库地址为网易运
/etc/docker/daemon.json
如果没这个文件,自建。加入以下,然后重启
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
开始搭建
1.拉取镜像
拉取一个rabbitmq镜像
2.启动三个Rabbitmq节点
docker run -d --hostname rabbit1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
docker run -d --hostname rabbit2 --name rabbitmq2 -p 5673:5672 --link rabbitmq1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
docker run -d --hostname rabbit3 --name rabbitmq3 -p 5674:5672 --link rabbitmq1:rabbit1 --link rabbitmq2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
它们在不同的端口上,并使用-link选项使用三个节点可以通讯。
配置
然后进入每一个节点重置节点,并加入集群。
首个节点不需要使用join cluster命令
docker exec -it rabbitmq1 bash #用bash的方式进行容器rabbitmq1
rabbitmqctl stop_app #停止rabbitmq应用
rabbitmqctl reset #重置
rabbitmqctl join_cluster --ram rabbit@rabbit1 #以内存节点的方式加入集群,首个节点不需要
rabbitmqctl start_app #启动应用
exit #退出
注:rabbit@rabbit1,@符合前面的东西不要修改,三个节点都一样。以上命令有几个节点就执行几次
因为rabbitmq是基于erlang虚拟机运行,它们之间通过.erlang 的cookie通讯,所以需要保证三个节点的 “.erlang.cookie ”文件相同。
rabbitmq-homedir.png
docker cp rabbitmq1:/var/lib/rabbitmq/.erlang.cookie ./.erlang.cookie #从某个容器中考出文件到本地
docker cp ./.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie #从本地拷到某个容器上
验证
进入管理工具,看到一个磁盘节点两个内存节点
image.png
好,大功告成,再附加一些docker命令
附加:
命令 | 描述 |
---|---|
docker logs -f nginx | 查看日志命令 |
/var/lib/docker/containers/container_id/ | 日志文件所在位置 |
网友评论