单机docker搭建rabbitmq集群

Docker-Hub地址

RabbitMQ的主要优点:

1.erLang语言天生支持高并发
2.MQ的环境搭建比较简便
3.有着较好的消息确认机制以及消息的持久化
4.高度可定制的路由策略
5.页面管理方便,社区活跃度较高

RabbitMQ 实战

几个重要概念:
▷ Broker: 简单来说就是消息队列服务器实体。
▷ Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列。
▷ Queue: 消息队列载体,每个消息都会被投入到一个或多个队列。
▷ Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
▷ Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
▷ vhost: 虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
▷ producer: 消息生产者,就是投递消息的程序。
▷ consumer: 消息消费者,就是接受消息的程序。
▷ channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

使用过程:

1.客户端连接到消息队列服务器,打开一个channel。
2.客户端声明一个exchange,并设置相关属性。
3.客户端声明一个queue,并设置相关属性。
4.客户端使用routing key,在exchange和queue之间建立好绑定关系。
5.客户端投递消息到exchange。
6.exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

端口号作用

默认的端口15672:rabbitmq管理平台端口号。 默认的端口5672:rabbitmq消息中间内部通讯的端口。 默认的端口号25672:rabbitmq集群的端口号

rabbitmq-plugins enable rabbitmq_management 	#启动管理插件,下次无需再手动启动该插件 
rabbitmqctl list_users					    	#查看当前有多少用户
rabbitmqctl add_user zhao 123456 				#设置用户账号和密码 
rabbitmqctl set_user_tags zhao administrator 	#设置权限

使用docker 搭建RabbitMQ集群

RabbitMQ集群中节点包含内存节点RAM、磁盘节点(Disk,消息持久化)、集群中至少有一个Disk节点。集群分为两种集群模式普通模式 和 镜像模式。

普通模式(默认)

对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点,对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。
应用场景:该模式更适合于消息无需持久化的场景,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化只能等故障节点恢复。
缺点:无法解决单点故障问题。

镜像模式

与普通模式不同之处时消息实体会主动在镜像节点见同步,而不是在取数据时临时拉取,高可用;该模式下 镜像队列(mirror queue)有一套选举算法,即1个master、n个slaver。 生产者、消费者的请求都会转至master。
应用场景:可靠性要求较高场合,如下单、库存队列。
缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。

节点信息:

RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中。好处是可以使得像交换机和队列声明等操作更加的快速
Disk node:将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
RabbitMQ 要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点。当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。
解决方案:设置两个磁盘节点,至少有一个是可用的,可以保存元数据的更改。

认证方式:

通过 Erlang Cookie 相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie。我们的为保证cookie的完全一致,采用从一个节点copy的方式,实现各个节点的cookie文件一致。注意修改文件的权限:600

单机部署

环境搭建(创建三个RabbitMQ节点)

mkdir -p ~/data/rabbitmq
cd ~/data/rabbitmq
mkdir rabbitmq01 rabbitmq02 rabbitmq03
docker network create --subnet 172.18.0.1/16 --gateway 172.18.0.1 mq-net

创建rabbitmq01节点容器

docker run -d --hostname rabbitmq01 --name rabbitmq01 \
-v /data/rabbitmq/rabbitmq01:/var/lib/rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_ERLANG_COOKIE=rabbitcookie \
--net mq-net \
rabbitmq:management

创建rabbitmq02节点容器

docker run -d --hostname rabbitmq01 --name rabbitmq02 \
-v /data/rabbitmq/rabbitmq02:/var/lib/rabbitmq \
-p 15673:15672  -p 5673:5672 \
-e RABBITMQ_ERLANG_COOKIE=rabbitcookie \
--net mq-net \
--link rabbitmq01:rabbitmq01  rabbitmq:management

创建rabbitmq03节点容器

docker run -d --hostname rabbitmq03 --name rabbitmq03 \
-v /data/rabbitmq/rabbitmq03:/var/lib/rabbitmq  \
-p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE=rabbitcookie \
--net mq-net \
--link rabbitmq01:rabbitmq01 --link rabbitmq02:rabbitmq02 rabbitmq:management

注意:–hostname 设置容器主机名,RABBITMQ_ERLANG_COOKIE 节点认证作用,集群部署需要同步该值,且值必须相同。多个容器之间使用“–link”连接,此属性不能少;
安装好后访问测试,使用http://192.168.235.14:15672 进行访问了,默认账号密码是guest/guest。

加入普通模式集群

1.进入rabbitmq01容器,重新初始化一下,如果是新安装则reset可以忽略重置。

docker exec -it rabbitmq01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

2.进入rabbitmq02容器,重新初始化一下,将02节点加入到集群中

docker exec -it rabbitmq02 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbitmq01    #参数“--ram”表示设置为内存节点,忽略该参数默认为磁盘节点。
rabbitmqctl start_app
exit

3.进入rabbitmq03容器,重新初始化一下,将03节点加入到集群中

docker exec -it rabbitmq03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

如何列出支持的功能标志

当节点第一次启动时,默认情况下所有支持的功能标志都是启用的。当一个节点升级到较新版本的RabbitMQ时,如果它是一个单独的节点,默认情况下会启用新功能标志,如果它属于一个集群,默认情况下会保持禁用状态。
要列出功能标志,请使用

rabbitmqctl list_feature_flags

为了提高表格的可读性,请切换到pretty_table格式化程序:

rabbitmqctl -q --formatter pretty_table list_feature_flags \
  name state provided_by desc doc_url

这将生成如下所示的表格:
在这里插入图片描述
如上例所示,list_feature_flags命令接受要显示的列列表。可用的列有:

name: 			功能标志的名称
state: 			启用或禁用(如果功能标记已启用或禁用),不支持(如果群集中的一个或多个节点不知道此功能标记,因此无法启用)
provided_by: 	提供特性标志的RabbitMQ组件或插件
desc: 			功能标志的描述
doc_url: 		了解有关功能标志的更多信息的网页的URL
stability: 		指示功能标志是稳定的还是实验性的

What I’m saying is never wait!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是用 Docker 搭建 RabbitMQ 集群的步骤: 1. 首先,确保已经安装了 DockerDocker Compose。 2. 在本地创建一个新的文件夹,用于存储 RabbitMQ 的配置文件和数据。 3. 在该文件夹中创建一个名为 docker-compose.yml 的文件,并将以下内容复制到该文件中: ``` version: '3' services: rabbitmq-node1: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node1 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" ports: - "5672:5672" - "15672:15672" volumes: - ./data/node1:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node1 rabbitmq-node2: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node2 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node2:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node2 rabbitmq-node3: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node3 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node3:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node3 networks: rabbitmq-network: driver: bridge ``` 该文件定义了一个 RabbitMQ 集群,由三个节点组成。每个节点都有一个名称、一个主机名、一个环境变量(Erlang cookie、默认用户名和密码)、端口映射、数据卷和网络别名。该文件还定义了一个网络,用于连接三个节点。 4. 在该文件夹中创建一个名为 config 的文件夹,并在其中创建一个名为 rabbitmq.conf 的文件。将以下内容复制到该文件中: ``` cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 ``` 该文件定义了 RabbitMQ 集群的配置,包括节点发现方式和节点列表。 5. 在该文件夹中创建一个名为 data 的文件夹,用于存储 RabbitMQ 节点的数据。 6. 在终端中导航到该文件夹,并运行以下命令: ``` 回复:搭建rabbitmq集群需要使用Docker,可以参考Docker官方文档:https://docs.docker.com/engine/examples/rabbitmq/。好的,以下是如何使用Docker搭建RabbitMQ集群的步骤: 1. 首先,确保您已经在本地安装了Docker,并且已经在命令行中登录到了Docker。 2. 在命令行中输入以下命令,以在Docker中下载和运行RabbitMQ镜像: ``` docker run -d --name rabbitmq-node1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management ``` 这将下载最新版本的RabbitMQ,并将其运行在Docker容器中。这里我们指定了两个端口,一个用于AMQP通信(5672),另一个用于Web管理界面(15672)。 3. 等待RabbitMQ容器启动后,您可以使用以下命令在另一个容器中运行第二个RabbitMQ节点: ``` docker run -d --name rabbitmq-node2 -p 5673:5672 -p 15673:15672 --link rabbitmq-node1:rabbit1 rabbitmq:3.8-management ``` 这将启动第二个RabbitMQ容器,并将其链接到第一个容器,以便它们可以互相通信。请注意,我们使用了不同的端口(5673和15673),以便避免与第一个节点的端口冲突。 4. 接下来,您可以使用以下命令启动第三个节点: ``` docker run -d --name rabbitmq-node3 -p 5674:5672 -p 15674:15672 --link rabbitmq-node1:rabbit1 --link rabbitmq-node2:rabbit2 rabbitmq:3.8-management ``` 同样,我们指定了不同的端口,并将此容器链接到前两个容器,以创建一个RabbitMQ集群。 5. 等待第三个节点启动后,您可以使用以下命令检查集群状态: ``` docker exec -it rabbitmq-node1 rabbitmqctl cluster_status ``` 这将显示集群中所有节点的状态。 恭喜!您已经成功地在Docker中部署了一个RabbitMQ集群

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值