简介

RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡。
Rabbit模式大概分为以下三种:单一模式、普通模式、镜像模式

RabbitMQ工作模式

  • 单一模式 (最简单的情况,非集群模式)

  • 普通模式 (默认的集群模式)
    • 流程

      • 对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。
      • 当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
    • 问题
      • 该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。
      • 如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,然后就没有然后了
  • 镜像模式
    • 流程

      • 把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。
      • 消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。
    • 问题
      • 降低系统性能
      • 集群带宽大大消耗(如果镜像队列数量过多,加之大量的消息进入)
    • 优点
      • 对可靠性要求较高的场合中适用
  • 集群说明
    • 一个rabbitmq集 群中可以共享 user,vhost,queue,exchange等,所有的数据和状态都是必须在所有节点上复制的

集群搭建

  • 操作步骤(node1为主,node2,node3为从,node4为proxy)

    • 在 192.168.0.1(node1)、192.168.0.2(node2)、192.168.0.3(node3) 三个节点上安装,然后开启 RabbitMQ 监控插件
    • node1
      • .erlang.cookie文件拷贝到 node2、node3
    • node1,node2,node3
      • rabbitmqctl stop // 停止Rabbit
      • rabbitmq-server -detached //
    • node2,node3
      • rabbitmqctl stop
      • rabbitmqctl join_cluster rabbit@node1
      • rabbitmqctl start_app
    • node4
      • 作为proxy指向node1,node2,node3(用于透明调用使用)
      • 当然,你也可以通过var connection = factory.CreateConnection(["ip1","ip2"].ToList());
    • cli
      • rabbitmqctl cluster_status // 检查集群状态
      • rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' // 添加策略

说明

  • proxy 层可用nginx haproxy nlb lvs

  • 集群搭建完,任意一台Rabbit服务器(节点)挂了,都能正常取到数据。保证了高可用。

[Open Source] RabbitMQ 高可用集群方案的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. Linux源码安装RabbitMQ高可用集群

    1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...

  3. RabbitMQ学习系列(六): RabbitMQ 高可用集群

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  4. activemq+Zookeper高可用集群方案配置

    在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式 ...

  5. Mycat节点扩缩容及高可用集群方案

    数据迁移与扩容实践: 工具目前从 mycat1.6,准备工作:1.mycat 所在环境安装 mysql 客户端程序. 2.mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包. 3.对 ...

  6. LVS+Heartbeat 高可用集群方案操作记录

    之前分别介绍了LVS基础知识和Heartbeat基础知识, 今天这里简单说下LVS+Heartbeat实现高可用web集群方案的操作说明. Heartbeat 项目是 Linux-HA 工程的一个组成 ...

  7. MySQL高可用集群方案

    一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...

  8. Redis高可用集群方案——哨兵

    本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...

  9. Haproxy+Heartbeat 高可用集群方案操作记录

    之前详细介绍了haproxy的基础知识点, 下面记录下Haproxy+Heartbeat高可用web集群方案实现过程, 以加深理解. 架构草图如下: 1) 基本环境准备 (centos6.9系统) 1 ...

随机推荐

  1. Linux常用命令整理

    1.常用命令:cd 进入 ls(list)查看当前目录下的文件 pwd 查看目录的路径 who an i 查看当前用户 clear 清除屏幕   2.绝对路径:从根目录开始\ 相对路径:上一层.下一层 ...

  2. SpringMVC 自定义全局日期转换器

    第一步: 编写自定义转换器的类 /* * 自定义日期转换器 */ public class CustomDateConverter implements Converter<String, Da ...

  3. laravel安装插件laravel-ide-helper

    1.插件位置laravel-ide-helper https://github.com/barryvdh/laravel-ide-helper 2.首先改变镜像源为国内的镜像源 P { margin- ...

  4. MCDownloader(iOS下载器)说明书

    示例 前言 很多iOS应用中都需要下载数据,并对这些下载的过程和结果进行管理,因此我才有了写这个MCDownloader的想法.在IOS 文件下载器-MCDownloadManager这篇文章中,我使 ...

  5. 在 redhat 6.4上安装Python 2.7.5

    在工作环境中使用的是python 2.7.*,但是CentOS 6.4中默认使用的python版本是2.6.6,故需要升级版本. 安装步骤如下: 1,先安装GCC,用如下命令yum install g ...

  6. PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例

    页面底部有PHP代码样例供测试使用. 1.PHP开发,你需要什么? 1)开发代码的工具,可以用IDE名字叫做phpDesigner.当然也可以临时用记事本代替,记得文件扩展名为.php 2)服务器(本 ...

  7. 基本数据结构——堆(Heap)的基本概念及其操作

    基本数据结构――堆的基本概念及其操作 小广告:福建安溪一中在线评测系统 Online Judge 在我刚听到堆这个名词的时候,我认为它是一堆东西的集合... 但其实吧它是利用完全二叉树的结构来维护一组 ...

  8. Yii2发送邮件

    1.在配置文件main-local.php components=>[]里面配置 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', ...

  9. nginx负载均衡(一)

    背景: 最近公司分配一个项目,做一个直播APP的后台,像这种随时都有用户在线的情况,后台一定不能down掉,而且只做一台服务器的话压力肯定很大,所以考虑用nginx做负载均衡 环境: 三台linux服 ...

  10. tmux简要介绍

    什么是tmux tmux全称terminal multiplexer,是一个终端复用软件.它可以帮助我们方便地管理多个终端会话. 下面介绍tmux中涉及到的一些名词 window 窗口 pane 窗格 ...