单机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。
应用场景:可靠性要求较高场合,如下单、库存队列。
缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。

单机部署

环境搭建(创建三个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!

猜你喜欢

转载自blog.csdn.net/qq_50573146/article/details/125899457