先安装Docker
RabbitMQ集群模式介绍
RabbitMQ 有三种模式:单机模式,普通集群模式,镜像集群模式。单机模式即单独运行一个 rabbitmq 实例,而集群模式需要创建多个 rabbitmq实例
第一种 普通集群模式:rabbitmq集群与其他集群有些不同,rabbitmq集群同步指的是复制队列,元数据信息的同步,即同步的是数据存储信息;消息的存放只会存储在创建该消息队列的那个节点上。并非在节点上都存储一个完整的数据。在通过非数据所在节点获取数据时,通过元数据信息,路由转发到存储数据节点上,从而得到数据 。
第二种 镜像集群模式:与普通集群模式区别 主要是消息实体会主动在镜像节点间同步数据,而不是只存储数据元信息。 故普通集群模式 但凡数据节点挂了,容易造成数据丢失但镜像集群模式可以保证集群只要不全部挂掉,数据就不会丢失,当相对于性能来说,镜像集群模式会比普通集群模式多出消耗数据的传输。故取决于业务场景进行取舍。
Docker搭建普通集群模式
在一台机器上使用Docker搭建RabbitMQ集群
#拉取镜像
docker pull rabbitmq:3.8.2-management
#启动三个容器
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15672:15672 -p 5672:5672 -p 1883:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.8.2-management
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -p 15673:15672 -p 5673:5672 -p 1884:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.8.2-management
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -p 15674:15672 -p 5674:5672 -p 1885:1883 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.8.2-management
主要参数:
-p 15672:15672 management 界面管理访问端口
-p 5672:5672 amqp 访问端口
-p 1883:1883 mqtt访问端口
也可以把容器里的数据共享到宿主机上
-v /home/soft/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq
–link 容器之间连接
Erlang Cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同。因为 RabbitMQ 是用Erlang实现的,Erlang Cookie 相当于不同节点之间通讯的密钥,Erlang节点通过交换 Erlang Cookie 获得认证。
访问:查看是否正常启动成功
http://localhost:15672/
http://localhost:15673/
http://localhost:15674/
账号/密码:guest / guest
容器节点加入集群
#进入第一个容器
docker exec -it rabbitmqCluster01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
#进入第二个容器
docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
#进入第三个容器
docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
主要参数:
–ram 表示设置为内存节点,忽略此参数默认为磁盘节点。该配置启动了3个节点,1个磁盘节点和2个内存节点。
设置好之后,使用任意容器,比如:http://localhost:15672/ 进行访问,默认账号密码:guest/guest
可以看到,已经有多个节点了。集群搭建成功了
镜像集群模式
镜像集群模式是基于普通集群模式上配置策略来实现
1、策略policy概念
使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。
为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。
2、添加策略
登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy
name:随便取,策略名称
Pattern:^ 匹配符,只有一个^代表匹配所有
Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)
或者使用如下命令:在cluster中任意节点启用策略,策略会自动同步到集群节点
#进入容器
docker exec -it rabbitmqCluster01 bash
#创建策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}'
rabbitmqctl set_policy-p/ha-all"^message"'{"ha-mode":"all"}'
“^message” 这个规则要根据自己修改,这个是指同步“message”开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为“^”
3、查看效果
此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://localhost:15672 再次进行访问,可以看到队列镜像同步。
spring cloud stream rabbitmq 使用集群方式
但每次连第一台,没有负载均衡,要用nginx等负载均衡一下
如果停止第一台,会自动连接到第二台上去处理
addresses: 127.0.0.1:5672,127.0.0.1:5673,127.0.0.1:5674
username: admin
password: admin
virtual-host: /
参考链接:
https://www.cnblogs.com/alan6/p/11691229.html
https://blog.csdn.net/belonghuang157405/article/details/83540148