企业私有云之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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 存储 Kafka
如何保证MQ消息队列的高可用?
如何保证MQ消息队列的高可用?
209 0
|
7月前
|
消息中间件 存储 负载均衡
一文读懂RocketMQ的高可用机制——消息发送高可用
一文读懂RocketMQ的高可用机制——消息发送高可用
175 1
|
9月前
|
消息中间件 存储
RabbitMQ的高可用机制
RabbitMQ 提供了多种高可用机制来确保消息队列的可靠性和稳定性。
476 0
|
消息中间件 负载均衡 调度
Docker swarm实现基于Consul和Haproxy的RabbitMQ高可用集群
基于Consul服务发现和Haproxy实现的RabbitMQ高可用的负载均衡集群
|
2月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
159 0
|
5月前
|
消息中间件 Java Spring
搭建高可用rabbitmq集群及spring boot实现集群配置
搭建高可用rabbitmq集群及spring boot实现集群配置
|
7月前
|
消息中间件 存储 缓存
一文读懂RocketMQ的高可用机制——集群管理高可用
一文读懂RocketMQ的高可用机制——集群管理高可用
1244 1
|
7月前
|
消息中间件 存储 负载均衡
一文读懂RocketMQ的高可用机制——消息消费高可用
一文读懂RocketMQ的高可用机制——消息消费高可用
485 1
|
7月前
|
存储 消息中间件 缓存
一文读懂RocketMQ的高可用机制——消息存储高可用
一文读懂RocketMQ的高可用机制——消息存储高可用
744 1
|
7月前
|
消息中间件 存储 负载均衡
工作八年?是高级开发?竟然答不出:如何保证RabbitMQ的高可用?
一个8年工作经验的小伙伴,被问到这样一个问题,说如何保证RabbitMQ的高可用。关于这个问题呢,这位小伙伴倒是有个实操经验,就是不知道如何组织语言。所以,当时面试结果不太理想。今天,我给大家分享一下我的理解。
120 0