概述

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

运行模式大概有3种:

单一模式:非集群模式,单台。

普通模式:RabbitMQ默认的集群模式。

对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。

所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。

该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。

如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化会丢失消息。

镜像模式:Queue同时存在多个节点,可通过改模式实现HA高可用
该模式解决了上述问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。

该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。

下面来通过配置RabbitMQ镜像模式来熟悉这3种运行模式

1. 环境说明

RabbitMQ集群安装在3个节点上:10.0.0.1、10.0.0.2、10.0.0.3

HAProxy安装在10.0.0.4上,用于对外提供RabbitMQ均衡

3个节点在/etc/hosts文件中分别添加如下内容:

  1. 10.0.0.1 rabbit1
  2. 10.0.0.2 rabbit2
  3. 10.0.0.3 rabbit3

2. 安装erlang、rabbitmq

  1. cd oneinstack/src
  2. wget http://erlang.org/download/otp_src_18.3.tar.gz
  3. tar xzf otp_src_18.3.tar.gz
  4. cd otp_src_18.3
  5. ./configure --prefix=/usr/local/erlang --enable-shared-zlib --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
  6. make && make install
  7. cd ..
  8. wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.7/rabbitmq-server-generic-unix-3.5.7.tar.gz
  9. tar xzf rabbitmq-server-generic-unix-3.5.4.tar.gz
  10. mv rabbitmq_server-3.5.4 rabbitmq
  11. sed -i 's@^ERL_DIR=.*@ERL_DIR=/usr/local/erlang/bin/@' /usr/local/rabbitmq/sbin/rabbitmq-defaults
  12. sed -i 's@^LOG_BASE=.*@LOG_BASE=/usr/local/rabbitmq/var/log/rabbitmq@' /usr/local/rabbitmq/sbin/rabbitmq-defaults  #日志目录
  13. mkdir -p /usr/local/rabbitmq/var/{lib,log}/rabbitmq

3. 一般用户(rabbitmq)运行RabbitMQ

  1. useradd rabbitmq
  2. wget http://pkgs.fedoraproject.org/cgit/rpms/rabbitmq-server.git/plain/rabbitmq-script-wrapper
  3. sed -i 's@cd /var/lib/rabbitmq@cd /usr/local/rabbitmq/var/lib/rabbitmq@g' rabbitmq-script-wrapper  #更改rabbitmq数据存储目录
  4. sed -i 's@/usr/lib/rabbitmq/bin/@/usr/local/rabbitmq/sbin/@g' rabbitmq-script-wrapper
  5. chmod +x rabbitmq-script-wrapper
  6. cp rabbitmq-script-wrapper /usr/sbin/rabbitmqctl
  7. cp rabbitmq-script-wrapper /usr/sbin/rabbitmq-server
  8. cp rabbitmq-script-wrapper /usr/sbin/rabbitmq-plugins
  9. chown -R rabbitmq.rabbitmq /usr/local/rabbitmq/var

4. 日志割接

  1. cat >> /etc/logrotate.d/rabbitmq-server << EOF
  2. /usr/local/rabbitmq/var/log/rabbitmq/*.log {
  3. weekly
  4. missingok
  5. rotate 20
  6. compress
  7. delaycompress
  8. notifempty
  9. sharedscripts
  10. postrotate
  11. /sbin/service rabbitmq-server rotate-logs > /dev/null
  12. endscript
  13. }
  14. EOF

5. 启动脚本

参考: 《RabbitMQ启动脚本

6. 设置Erlang Cookie

Erlang Cookie文件:/home/rabbitmq/.erlang.cookie。这里将rabbit1的该文件复制到rabbit2、rabbit3,并设置400权限

  1. chmod 400 /home/rabbitmq/.erlang.cookie
  2. chown rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie

7. 修改配置文件

密码和集群配置:

  1. cat > /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config << EOF
  2. [
  3. {rabbit, [
  4. {cluster_nodes, {['rabbit@rabbit1','rabbit@rabbit2', 'rabbit@rabbit3'], disc}},
  5. {tcp_listeners,[{"0.0.0.0",5672}]},
  6. {default_vhost,       <<"/">>},
  7. {default_user,        <<"linuxeye">>},
  8. {default_pass,        <<"linuxeye@123">>},
  9. {loopback_users, ["linuxeye"]},
  10. {default_permissions, [<<".*">>, <<".*">>, <<".*">>]}
  11. ]}
  12. ].
  13. EOF

启用rabbitmq_management

  1. cat > /usr/local/rabbitmq/etc/rabbitmq/enabled_plugins << EOF
  2. [rabbitmq_management].
  3. EOF

8. 分别启动3个节点rabbitmq

使用rabbitmqctl cluster_status命令表示集群搭建成功

  1. [root@rabbit2 ~]# rabbitmqctl cluster_status
  2. Cluster status of node rabbit@rabbit2 ...
  3. [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]},
  4. {running_nodes,[rabbit@rabbit3,rabbit@rabbit1,rabbit@rabbit2]},
  5. {cluster_name,<<"rabbit@rabbit2">>},
  6. {partitions,[]}]

9. 设置镜像队列策略

在任意一个节点上执行:

  1. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

10. 配置HAProxy

配置好HAProxy后,浏览器访问http://10.0.0.4:15672, 看到如下证明rabbitmq镜像模式搭建成功

RabbitMQ集群和高可用配置的更多相关文章

  1. RabbitMQ 集群与高可用配置

    集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送 ...

  2. (转)RabbitMQ 集群与高可用配置

    集群概述 环境 配置步骤 集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务 ...

  3. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  4. centos7 rabbitmq集群搭建+高可用

    环境 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -r -.el ...

  5. 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  6. 消息中间件-RabbitMQ集群和高可用

    多机多节点集群部署 一. 环境准备 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤 10.10.1.41 10.10.1.42 10.10.1.43 提示:如果使用虚拟机,可以在一台VM ...

  7. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  8. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  9. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

随机推荐

  1. [CERC2017]Intrinsic Interval[scc+线段树优化建图]

    题意 给定一个长度为 \(n\) 的排列,有 \(q\) 次询问,每次询问一个区间 \([l,r]\) ,找到最小的包含 \([l,r]\) 的区间,满足这个区间包含了一段连续的数字. \(n\leq ...

  2. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  3. Egret(白鹭引擎)——“TypeError: Cannot read property 'asCom' of null”

    前言 相信我,这个错误新手都不陌生:TypeError: Cannot read property 'asCom' of null 还有,一定要看我上一篇,哦不(人家应该是报了这个错,才找到看到这篇文 ...

  4. resource fork, Finder information, or similar detritus not allowed

    1.关闭当前项目和Xcode 2.打开终端或者iterm cd ~/Library/Developer/Xcode/DerivedData/ 3. xattr -rc . 4.重新打开项目 5.如果不 ...

  5. centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

    写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用. 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用. ...

  6. 虚拟机virtualBox安装linux系统 xshell远程连接linux

    虚拟机virtualBox安装linux系统 xshell远程连接linux 虚拟机概念: 通过软件, 使用虚拟化技术虚拟出电脑的硬件环境, 充当真实的电脑使用. 常见的虚拟软件: virtualBo ...

  7. Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较

    说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid Ap ...

  8. Alpha阶段结束分数(百分制)

  9. Ns3 构建哑铃型拓扑,并实现两个点的TCP连接(详细请戳全文)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaUAAADlCAIAAAB8n38hAAAV8UlEQVR4nO3dMWjjyBoH8CkNj1uc5v

  10. ehlib使用内存表的方法

    ehlib提供了一个TMemTableEh控件,这个控件不需要连接数据库就可以在ehlib中显示数据,在做一些虚的表格时比较有用. 简单的使用主要有这几个步骤: 1.添加量过控件Tdatasource ...