docker快速简单搭建Rabbitmq集群

安装

docker pull rabbitmq:management
docker run -d --hostname host0 --name mq0 -v /rabbitmq01:/var/lib/rabbitmq0 -e RABBITMQ_ERLANG_COOKIE='tomkluas' -p 5672:5672 -p 80:15672 rabbitmq:management
docker run -d --hostname host1 --name mq1 -v /rabbitmq01:/var/lib/rabbitmq1 -e RABBITMQ_ERLANG_COOKIE='tomkluas' -p 5673:5672 --link mq0:host0 rabbitmq:management
docker run -d --hostname host2 --name mq2 -v -v /rabbitmq01:/var/lib/rabbitmq12 -e RABBITMQ_ERLANG_COOKIE='tomkluas' -p 5674:5672 --link mq0:host0 --link mq1:host1 rabbitmq:management
进入容器后,操作rabbitmq

配置mq0

root@iZ282zj76jqZ:~# docker exec -it mq0 bash
root@host0:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@host0 ...
root@host0:/# rabbitmqctl reset
Resetting node rabbit@host0 ...
root@host0:/# rabbitmqctl start_app
Starting node rabbit@host0 ...
 completed with 3 plugins.
root@host0:/# exit
exit

配置mq1

root@iZ282zj76jqZ:~# docker exec -it mq1 bash
root@host1:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@host1 ...
root@host1:/# rabbitmqctl reset
Resetting node rabbit@host1 ...
root@host1:/# rabbitmqctl join_cluster --ram rabbit@host0
Clustering node rabbit@host1 with rabbit@host0
root@host1:/# rabbitmqctl start_app
Starting node rabbit@host1 ...
 completed with 3 plugins.
root@host1:/# exit
exit

配置mq2

root@iZ282zj76jqZ:~# docker exec -it mq2 bash
root@host2:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@host2 ...
root@host2:/# rabbitmqctl reset
Resetting node rabbit@host2 ...
root@host2:/# rabbitmqctl join_cluster --ram rabbit@host0
Clustering node rabbit@host2 with rabbit@host0
root@host2:/# rabbitmqctl start_app
Starting node rabbit@host2 ...
 completed with 3 plugins.
root@host2:/# exit
exit

在这里插入图片描述
到此以上整个集群部署成功了,但是上述只是普通集群,在此之外,还有镜像集群

使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。

为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。
在这里插入图片描述
添加策略
方法一:界面操作,登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy

在这里插入图片描述

方法二:进入mq0执行如下命令
rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}'
镜像集群模式

概念:
把队列做成镜像队列,让各队列存在于多个节点中,属于 RabbitMQ 的高可用性方案。镜像模式和普通模式的不同在于,queue和 message 会在集群各节点之间同步,而不是在 consumer 获取数据时临时拉取。

特点:
(1)实现了高可用性。部分节点挂掉后,不会影响 rabbitmq 的使用。
(2)降低了系统性能。镜像队列数量过多,大量的消息同步也会加大网络带宽开销。
(3)适合对可用性要求较高的业务场景。

普通集群模式

概念:
默认的集群模式。需要创建多个 RabbitMQ 节点。但对于 Queue 和消息来说,只存在于其中一个节点,其他节点仅同步元数据,即队列的结构信息。

(1)Exchange 的元数据信息在所有节点上是一致的,而 Queue(存放消息的队列)的完整数据则只会存在于创建它的那个节点上。其他节点只知道这个 queue 的 metadata 信息和一个指向 queue 的 owner node 的指针;

(2)RabbitMQ 集群会始终同步四种类型的内部元数据(类似索引):
  a.队列元数据:队列名称和它的属性;
  b.交换器元数据:交换器名称、类型和属性;
  c.绑定元数据:一张简单的表格展示了如何将消息路由到队列;
  d.vhost元数据:为 vhost 内的队列、交换器和绑定提供命名空间和安全属性;
  因此,当用户访问其中任何一个 RabbitMQ 节点时,通过 rabbitmqctl 查询到的元数据信息都是相同的。

(3)无法实现高可用性,当创建 queue 的节点故障后,其他节点是无法取到消息实体的。如果做了消息持久化,那么得等创建 queue 的节点恢复后,才可以被消费。如果没有持久化的话,就会产生消息丢失的现象。

有了集群之后 还要设置负载均,为了防止出现对单一节点造成高负载的情况。
# rabbitmq通信
stream{
	upstream rabbitTcp{
        server 192.168.9.219:5672;
        server 192.168.9.219:5673;
		server 192.168.9.219:5674;
    }

    server {
        listen 5675;
        proxy_pass rabbitTcp;
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值