企业私有云之rabbitmq高可用

简介:

默认openstack使用rabbitmq做信息队列,如果想是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文主要介绍如何使用rabbitmq做高可用。

高可用的方法为:

1
2
通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。
这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。

环境为:

系统centos 7.1

rabbitmq版本是3.6.2

主机信息

1
2
3
node1 10.10.33.163
node2 10.10.33.166
node3 10.10.33.167

/etc/hosts配置为

1
2
3
10.10.33.163 ip-10-10-33-163
10.10.33.166 ip-10-10-33-166
10.10.33.167 ip-10-10-33-167

下面是开始安装

一、安装

安装第三方库与rabbitmq

1
2
yum  install  -y epel-release
yum  install  rabbitmq-server

启动服务

1
2
systemctl  enable  rabbitmq-server.service
systemctl start rabbitmq-server.service

二、配置

在node1里配置

1
将node1的 /var/lib/rabbitmq/ .erlang.cookie复制到node2与node3

修改权限(所有节点)

1
2
chmod  400  /var/lib/rabbitmq/ .erlang.cookie
chown  -R rabbitmq:rabbitmq  /var/lib/rabbitmq/ .erlang.cookie

在node2里配置

1
2
3
4
5
6
7
[root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl stop_app
Stopping node  'rabbit@ip-10-10-33-166'  ...
[root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl join_cluster rabbit@ip-10-10-33-163
Clustering node  'rabbit@ip-10-10-33-166'  with  'rabbit@ip-10-10-33-163'  ...
You have new mail  in  /var/spool/mail/root
[root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl start_app
Starting node  'rabbit@ip-10-10-33-166'  ...

在node3里配置

1
2
3
4
5
6
[root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl stop_app
Stopping node  'rabbit@ip-10-10-33-167'  ...
[root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl join_cluster rabbit@ip-10-10-33-163
Clustering node  'rabbit@ip-10-10-33-167'  with  'rabbit@ip-10-10-33-163'  ...
[root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl start_app
Starting node  'rabbit@ip-10-10-33-167'  ...

查看集群状态

1
2
3
4
5
6
7
8
9
10
11
[root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl cluster_status
Cluster status of node  'rabbit@ip-10-10-33-166'  ...
[{nodes,[{disc,[ 'rabbit@ip-10-10-33-163' , 'rabbit@ip-10-10-33-166' ,
                 'rabbit@ip-10-10-33-167' ]}]},
  {running_nodes,[ 'rabbit@ip-10-10-33-163' , 'rabbit@ip-10-10-33-167' ,
                  'rabbit@ip-10-10-33-166' ]},
  {cluster_name,<< "rabbit@ip-10-10-33-163" >>},
  {partitions,[]},
  {alarms,[{ 'rabbit@ip-10-10-33-163' ,[]},
           { 'rabbit@ip-10-10-33-167' ,[]},
           { 'rabbit@ip-10-10-33-166' ,[]}]}]

三、集群高可用配置

设计镜像队列策略

在任何一个节点执行

1
2
[root@ip-10-10-33-163 ~] # rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'
Setting policy  "ha-all"  for  pattern  "^(?!amq\\.).*"  to  "{\"ha-mode\": \"all\"}"  with priority  "0"  ...





 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1864895 ,如需转载请自行联系原作者

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 存储 负载均衡
一文读懂RocketMQ的高可用机制——消息发送高可用
一文读懂RocketMQ的高可用机制——消息发送高可用
494 1
|
消息中间件 存储 Kafka
如何保证MQ消息队列的高可用?
如何保证MQ消息队列的高可用?
301 0
|
消息中间件 存储
RabbitMQ的高可用机制
RabbitMQ 提供了多种高可用机制来确保消息队列的可靠性和稳定性。
878 0
|
14天前
|
消息中间件 存储 算法
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
|
7月前
|
消息中间件 存储 算法
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
本文介绍 RocketMQ 如何利用 Raft(一种简单有效的分布式一致性算法)进行高可用的保障,总结了 RocketMQ 与 Raft 的前世今生。可以说 Raft 的设计给 RocketMQ 的高可用注入了非常多的养分,RocketMQ 的共识算法与高可用设计在 2023 年也得到了学术界的认可,被 CCF-A 类学术会议 ASE 23' 录用。
601 20
|
10月前
|
消息中间件 存储 运维
深入理解MQ消息队列的高可用与可靠性策略
深入理解MQ消息队列的高可用与可靠性策略
1393 3
|
10月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
1084 1
|
消息中间件 存储 算法
解读 RocketMQ 5.0 全新的高可用设计
本文主要介绍高可用架构的演进以及RocketMQ 5.0 全新的高可用设计。
12118 22
|
消息中间件 Java Spring
搭建高可用rabbitmq集群及spring boot实现集群配置
搭建高可用rabbitmq集群及spring boot实现集群配置
313 0
|
存储 消息中间件 缓存
一文读懂RocketMQ的高可用机制——消息存储高可用
一文读懂RocketMQ的高可用机制——消息存储高可用
1285 1