RabbitMQ集群

x33g5p2x  于2022-01-05 转载在 RabbitMQ  
字(2.5k)|赞(0)|评价(0)|浏览(476)

1、RabbitMQ集群

1.1、集群原理

  • node1作为主节点,node2节点从属于该主节点,node3从属于node3。那么它们三者形成了一个集群。

1.2、搭建步骤

1. 克隆虚拟机

2. 修改三台主机的名称

# 进入对应文件修改
vim /etc/hosts

3. 配置各个节点的 hosts 文件,让各个节点都能互相识别对方

# 进入对应得文件
vim /etc/hosts

# 修改的内容
192.168.123.129 node1
192.168.123.131 node2
192.168.123.130 node3

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

5. 启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务(在三台节点上分别执行以
下命令)

rabbitmq-server -detached

6. 在节点2上执行

rabbitmqctl stop_app
#rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务

# 进行重置
rabbitmqctl reset

# 加入到结点1得集群
rabbitmqctl join_cluster rabbit@node1

#(只启动应用服务)
rabbitmqctl start_app

7. 在节点3上执行

rabbitmqctl stop_app
#rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务

# 进行重置
rabbitmqctl reset

# 加入到结点2的集群
rabbitmqctl join_cluster rabbit@node2

#(只启动应用服务)
rabbitmqctl start_app

8. 查看集群状态

rabbitmqctl cluster_status

9. 需要重新设置用户

#创建账号
rabbitmqctl add_user admin 123

#设置用户角色
rabbitmqctl set_user_tags admin administrator

#设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

10. 解除集群节点命令

# 关闭服务
rabbitmqctl stop_app

# 重置服务
rabbitmqctl reset

# 开启服务
rabbitmqctl start_app

# 查看集群状态
rabbitmqctl cluster_status

# (node1 机器上执行) 让node1 忘掉 node2
rabbitmqctl forget_cluster_node rabbit@node2

11. 搭建成功图示

1.3、镜像队列

1.3.1、使用镜像队列的原因

  • 如果不使用镜像队列的话,那么我们在node1上创建的队列,其他两个节点都不会有相应的队列,所以一旦node1宕机的话,会导致消息丢失。
  • 所以我们需要使用镜像队列来进行集群层面上的队列备份。

1.3.2、如何搭建镜像队列?

1.3.3、测试结果

(1)、如果将node3的服务停掉

  • 它还会保持一份备份的原则,备份到node2
  • 注意这里的队列的名称必须为mirror_*
  • 就算整个集群只剩下一台机器了 依然能消费队列里面的消息。说明队列里面的消息被镜像队列传递到相应机器里面了

1.4、高可用负载均衡

  • 这里使用Haproxy实现负载均衡,当处于高并发的情况下十分有用。大量请求来临,Haproxy会将其分给node1~3进行处理。
  • 如果第一台Haproxy宕机,那么其中的keepalive会将请求转移给下一台Haproxy。从而不让请求丢失。

1.5、Federation Exchange

1.5.1、使用原因

  • 当两个RabbitMQ相距甚远,那么如果深圳的客户需要连接北京的RabbitMQ才能获得的相关信息就会造成网络延迟,所以北京和深圳两地的RabbitMQ中的信息要相同。

1.5.2、搭建步骤

1. 在每台机器上开启 federation插件

rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management

开启成功的标志

2. 原理图解析

  • node1(upstream)也就是上游会将数据同步到下游node2(downstream)
  • 我们需要先运行 consumernode2 创建 fed_exchange

3. 在 downstream(node2)配置 upstream(node1)

4. 添加策略

5. 成功说明

1.5、Federation Queue

1.5.1、使用原因

使用其队列形式来实现两个地区的RabbitMQ的数据同步。

1.5.2、搭建步骤

1. 原理图

  • 我们需要将node2上的队列联邦到node1上,node1的数据可以同步到node2

2. 添加 upstream(同上)

3. 添加 policy

1.6、Shovel

1.6.1、使用原因

  • Shovel 够可靠、持续地从一个 Broker 中的队列(作为源端,即source)拉取数据并转发至另一个 Broker 中的交换器(作为目的端,即 destination)。
  • Shovel 行为就像优秀的客户端应用程序能够负责连接源和目的地、负责消息的读写及负责连接失败问题的处理。

1.6.2、搭建步骤

1. 在需要的机器上开启插件

rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management

开启成功的标志

2. 原理图

  • 源端会将其接收到的数据转发给目的地

3. 添加shovel源和目的地

相关文章