企业私有云之rabbitmq高可用

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

高可用的方法为:

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

环境为:

系统centos 7.1

rabbitmq版本是3.6.2

主机信息

node1 10.10.33.163
node2 10.10.33.166
node3 10.10.33.167

/etc/hosts配置为

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

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

启动服务

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

二、配置

在node1里配置

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

修改权限(所有节点)

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

在node2里配置

[[email protected] my.cnf.d]# rabbitmqctl stop_app
Stopping node ‘[email protected]‘ ...
[[email protected] my.cnf.d]# rabbitmqctl join_cluster [email protected]
Clustering node ‘[email protected]‘ with ‘[email protected]‘ ...
You have new mail in /var/spool/mail/root
[[email protected] my.cnf.d]# rabbitmqctl start_app
Starting node ‘[email protected]‘ ...

在node3里配置

[[email protected] my.cnf.d]# rabbitmqctl stop_app
Stopping node ‘[email protected]‘ ...
[[email protected] my.cnf.d]# rabbitmqctl join_cluster [email protected]
Clustering node ‘[email protected]‘ with ‘[email protected]‘ ...
[[email protected] my.cnf.d]# rabbitmqctl start_app
Starting node ‘[email protected]‘ ...

查看集群状态

[[email protected] my.cnf.d]# rabbitmqctl cluster_status
Cluster status of node ‘[email protected]‘ ...
[{nodes,[{disc,[‘[email protected]‘,‘[email protected]‘,
                ‘[email protected]‘]}]},
 {running_nodes,[‘[email protected]‘,‘[email protected]‘,
                 ‘[email protected]‘]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{‘[email protected]‘,[]},
          {‘[email protected]‘,[]},
          {‘[email protected]‘,[]}]}]

三、集群高可用配置

设计镜像队列策略

在任何一个节点执行

[[email protected] ~]# rabbitmqctl set_policy ha-all ‘^(?!amq\.).*‘ ‘{"ha-mode": "all"}‘
Setting policy "ha-all" for pattern "^(?!amq\\.).*" to "{\"ha-mode\": \"all\"}" with priority "0" ...
时间: 2024-10-07 04:52:13

企业私有云之rabbitmq高可用的相关文章

企业私有云之mariadb集群高可用

上篇文章介绍了openstack组件rabbitmq高可用,现在介绍其另一个重要组件mysql高可用. 我是本次选择mysql的版本是mariadb,集群方法是galera cluster多主集群. 其实也有很多其他方案,如pxc.mha等等,选择galera的原因是安装方便,使用与维护也方便,多主模式任何一个节点挂了都可以在另外节点查看数据,同时openstack各组件也支持配置集群方式的配置. 简介 MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实

RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本文使用VMware虚拟机的克隆功能克隆了两台服务器进行操作,仅作为一个demo,开发中可根据实际情况进行调整. 首先看下RabbitMQ高可用负载均衡集群长什么样子: 使用Docker构建RabbitMQ高可用负载均衡集群大概分为三个步骤: 启动多个(3个为例)RabbitMQ,构建RabbitMQ

RabbitMQ 高可用集群搭建及电商平台使用经验总结

面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ plugin 大型应用插件(Sharding.Rederation) Queue镜像失败手动同步 各集群配置同步方式(RabbitMQ export\import) 客户端连接方式(尽量采用AMQP组来动态链接) RabbitMQ 产线二次产品化封装(消息补偿.发送消息持久化.异常处理.监控页面.重复

RabbitMQ高可用方案总结

RabbitMQ的集群方案有以下几种: 1.普通的集群 exchange,buindling再所有的节点上都会保存一份,但是queue只会存储在其中的一个节点上,但是所有的节点都会存储一份queue的meta信息.因为这样有两个好处: 1)存储空间.如果每一个节点上都有全部的消息,有多少个节点就会有多少个消息总量的copy.加入一个队列的消息占用的空间是1G,那么三个节点就是3G 2) 性能.消息需要在节点之间传输会有很大的网络开销.如果消息设置了durable即持久化,还会增加很大的磁盘负载 

LVS+KeepAlived,RabbitMQ高可用负载均衡

最近团队准备对项目进行重构,其中用到了RabbitMQ,也考虑了几个方案,下边着重介绍在项目中即将采用的方案.关于RabbitMQ就不在这里详细说明,具体查看 RabbitMQ中文手册.直接看架构图: 如图所示: 前端采用keepalived+lvs实现高可用负载均衡, RabbitMQ HA 队列(镜像队列)进行消息队列结构复制.本方案中搭建两个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务.任务处理进程同时监控

RabbitMQ 高可用集群搭建

面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ plugin 大型应用插件(Sharding.Rederation) Queue镜像失败手动同步 各集群配置同步方式(RabbitMQ export\import) 客户端连接方式(尽量采用AMQP组来动态链接) RabbitMQ 产线二次产品化封装(消息补偿.发送消息持久化.异常处理.监控页面.重复

rabbitmq高可用实现

需求背景 1.业务按需求将一些功能拆分成异步任务,将消息放入队列进行处理.2.rabbitmq消息队列的使用,要求保证服务随时可用,并保证消息队列内的消息不丢失.rabibtmq在整个业务中的地位不比mysql低,高可用不可或缺. rabbitmq集群 rabbitmq简单介绍:   基于erlang语言开发,而erlang是一门分布式语言开发,适用于集群开发:rabbitmq自身也提供了多种集群方案:http://www.rabbitmq.com/ha.html    1.集群管理:没有明显的

使用glusterfs 作为 kubernetes PersistentVolume PersistentVolumeClaim 持久化仓库,高可用Rabbitmq,高可用mysql,高可用redis

glusterfs 怎么集群,网上一搜铺天盖地的 可利用这个特点做单节点高可用,因为K8S 哪怕节点宕机了 master 会在随意一台节点把挂掉的复活 当然我是在自己的环境下跑,经过网络的glusterfs,数据传输,等都有一定的性能损耗,对网络要求也特别高 小文件存储性能也不高等问题. 这里记录一下rabbitmq 单机高可用情景,mysql,mongodb, redis 等,万变不离其宗 事先创建好了 volume,卷名为 env-dev 随便找个客户机挂载 mount -t gluster

RabbitMQ 高可用之镜像队列

如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候).可以将所有message都设置为持久化,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存在一个虽然短暂但是会产生问题的时间窗.通过publisher的confirm机制能够确保客户端知道哪些message已经存入磁盘,尽