十、RabbitMQ集群

一、clustering

1、 使用集群的原因

  • 单台RabbitMQ遇到内存崩溃、机器故障等情况会导致服务不可用
  • 单台RabbitMQ只能满足每秒1000条的消息吞吐量

2、搭建步骤

1、准备三台虚拟机
十、RabbitMQ集群_第1张图片
2、修改3台机器的主机名称 分别为node1、node2、node3
vi /etc/hostname
十、RabbitMQ集群_第2张图片
3、配置节点的hosts文件,让各个节点都能互相识别到对方
vim /etc/hosts
十、RabbitMQ集群_第3张图片

4、确保各个节点的cookie文件使用的是同一个值
在node1上执行远程操作命令:

scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie                    scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

十、RabbitMQ集群_第4张图片
5、启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务(在三台节点上分别执行以 下命令)

rabbitmq-server -detached

6、在节点 2 执行 => 节点2 加入节点1

rabbitmqctl stop_app 
(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ服务) 
rabbitmqctl reset 
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)

十、RabbitMQ集群_第5张图片

7、在节点3执行 =》 节点3 加入节点2

rabbitmqctl stop_app 
rabbitmqctl reset 
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app

十、RabbitMQ集群_第6张图片

8、查看集群状态

rabbitmqctl cluster_status

十、RabbitMQ集群_第7张图片

9、需要重新设置用户

创建账号 rabbitmqctl add_user admin 123
设置用户角色 rabbitmqctl set_user_tags admin administrator
设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

进入 http://192.168.56.11:15672/
十、RabbitMQ集群_第8张图片

10、(备注)解除RabbitMQ的集群状态

rabbitmqctl stop_app 
rabbitmqctl reset 
rabbitmqctl start_app 
rabbitmqctl cluster_status
rabbitmqctl forget_cluster_node rabbit@node2(node1 机器上执行)

二、镜像队列

1、 为什么要引入镜像队列

假设队列1处于node1节点上,当node1宕机时,所有发送消息给队列1以及从队列1消费消息的客户端全部不能使用

引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他Broker节点之上,如果集群中的一个节点失效了,队列能自动切换到镜像中的另一个节点上以保证服务的可用性

2、 镜像队列的搭建步骤

1、启动三台集群节点

2、随便找一个节点添加 policy
十、RabbitMQ集群_第9张图片

3、在node1上创建一个队列,发送一条消息,队列存在镜像队列

4、停掉 node1 节点,发现node3上的队列称为主队列,node2节点上存在其镜像队列

三、Haproxy + Keepalive实现高可用负载均衡

你可能感兴趣的:(RabbitMQ,rabbitmq)