配置RabbitMQ默认群集模式

RabbitMQ是什么?

MQ(Msaaage Queue,消息队列)是一种应用程序对应用程序的通信方式。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无须专用链接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通讯。而不是通过直接调用彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

RabbirMQ使用场景

在项目中,将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统的吞吐量
RabbitMQ支持消息的持久化,也就是数据写在磁盘上。为了数据安全考虑,大多数企业都会选择持久化。当然如果不需要消息持久化,那么使用内存节点即可。RabbitMQ的集群节点包括内存节点、磁盘节点。最合适的方案就是既有内存节点,又有磁盘节点。

RabbitMQ实际应用

RabbitMQ是用Erlang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。
RabbitMQ模式大概分为三种

  • 单一模式
  • 普通模式(默认的集群模式)
  • 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)

要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式可以实现高可用。

RabbitMQ功能

  • 异步消息:支持多种消息传递协议,消息队列,传递确认,灵活路由到队列,多种交换类型。
  • 开发经验:与BOSH,Chef,Docker和Puppet一起部署。使用喜欢的编程语言开发跨语言消息,例如:Java,.NET,PHP,Python,JavaScript,Ruby,Go 等等。
  • 分布式部署:部署为集群以实现高可用性和吞吐量; 联合多个可用区和区域
  • 企业和云就绪:可插拔身份验证,授权,支持TLS和LDAP。轻量级,易于部署在公共云和私有云中。
  • 工具和插件:支持持续集成,运营指标和与其他企业系统集成的各种工具和插件。灵活的插件方法,用于扩展RabbitMQ功能。
  • 管理和监督:用于管理和监控 RabbitMQ的HTTP-API,命令行工具和UI

RabbitMQ集群搭建

实现步骤

设计架构模式:在一个集群里,有三台服务器,其中一台使用磁盘模式,另两台使用内存模式。两台内存模式的节点速度更快,因此通过客户端连接访问它们。但是在客户端不可能分别连接两台内存节点,肯定是通过前端反向代理去轮询分发请求。如果担心前端反向代理服务器故障,可以通过keepalived软件做一个高可用架构。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用。

环境准备

  • 关闭防火墙及selinux

    systemctl stop firewalld.service
    setenforce 0
  • 虚拟机规划如下
主机名 IP地址 操作系统 系统用途 软件包
mq01 172.16.10.28 CentOS-7-x86_64 磁盘节点 rabbitmq-server-3.3.5
mq02 172.16.10.29 CentOS-7-x86_64 内存节点 rabbitmq-server-3.3.5
mq03 172.16.10.31 CentOS-7-x86_64 内存节点 rabbitmq-server-3.3.5

修改主机名及hosts文件

vim /etc/hostname
mq01.localdomain           //三台服务器都需要修改,分别改为mq02,mq03,名称可以自定义
vim /etc/hosts
172.16.10.28 mq01
172.16.10.29 mq02
172.16.10.31 mq03         //hosts文件三台服务器都一致,与hostname修改的内容要对应
reboot                             //修改之后重启虚拟机生效

安装rabbitmq软件

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

查看节点服务

rabbitmq-plugins list

启动管理服务

rabbitmq-plugins enable rabbitmq_management

启动rabbitmq服务

systemctl start rabbitmq-server.service
netstat -ntap | grep 5672

在服务启动之后,若是有三个端口开放,则表示服务服务开启成功。其中15672和25672都是rabbitmq的管理端口,5672则是和生产者、消费者通信的端口。

查看连接状态

先查看单个连接是否能够,三台服务器都要做测试,如果连接失败,就要检查前面的hostname和hosts文件设置有没有错误。

rabbitmqctl cluster_status

修改.erlang.cookie文件

Rabbitmq的集群是依赖于Erlang的集群来工作的,所以必须先构建起Erlang的集群环境。在Erlang的集群中,各节点通过一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie(该文件为隐藏文件)中,文件是400的权限。必须使各节点cookie保持一致,否则节点之间就无法通信。注意在作修改时,应先关闭rabbitmq服务

cat .erlang.cookie                                    //查看文件中的值,修改两个内存节点,使三个值相同
systemctl stop rabbitmq-server.service   //关闭两个内存节点的rabbimq服务,并修改cookie值
systemctl start rabbitmq-server.service   //修改完成之后再启动服务

将内存节点与磁盘节点相连

将mq02、mq03作为内存节点,mq01作为磁盘节点。节点mq01和mq02上操作一致,先停止rabbitmq应用,然后(在mq02服务器上)调用cluster命令将mq02连接到mq01;(在mq03服务器上)将mq03连接到mq01,使三者成为一个集群,最后启动rabbitmq应用。

rabbitmqctl stop_app                                       //关闭应用
rabbitmqctl join_cluster --ram [email protected]   //将内存节点连接到磁盘节点  --ram表示作为内存节点
rabbitmqctl start_app                                       //开启应用,mq02与mq03操作相同

查看端口,确保服务都正常

netstat -ntap | grep 5672

mq01

mq02

mq03

访问管理网页

打开浏览器访问http://172.16.10.28:15672,默认账号和密码均为“guest”

原文地址:http://blog.51cto.com/13643643/2152900

时间: 2024-08-29 19:21:02

配置RabbitMQ默认群集模式的相关文章

Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)

[Github]:https://github.com/iccb1013/Sheng.RabbitMQ.CommandExecuter Sheng.RabbitMQ.CommandExecuter 是使用 .Net 对 RabbitMQ 的一个简单封装. 它通过XML配置文件定义Exchange及队列等信息,根据此配置文件自动声明及初始化相关队列信息,方便 .Net 开发人员使用 RabbitMQ. 并实现了一个基于 MQ 的命令执行器,将 MQ 消息抽象化为命令,发布端和订阅端通过命令进行交互

centos 安装和配置 rabbitmq

centos 安装 rabbitmq 1.rabbitmq是erlang语言开发的,安装前首先需要安装erlang# yum install erlang -y // 直接安装可能报错,# yum install ncurses-devel // 安装依赖官方下载erlang包# wget http://erlang.org/download/otp_src_19.0.tar.gz解压安装erlang# tar xzvf otp_src_19.0.tar.gz# cd otp_src_19.0#

【MangoDB分片】配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统. 要构建一个 MongoDB Sharding Cluster,需要三种角色: Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障 Config Server: m

windows下安装配置RabbitMQ

安装部署 1.当前环境以及参考资料出处 部署环境:windows server 2008 r2 enterprise 官方安装部署文档:http://www.rabbitmq.com/install-windows.html官方文档说明 2.安装Erlang 首先,下载并运行Erlang Windows二进制文件.安装成功后,在所有程序中应该可以找到Erlang程序. 3.安装RabbitMQ 在官方页面,下载对应的安装包,注意,RabbitMQ安装的时候会占用几个端口,防火墙和其他安全工具可能

VMware下网络配置的三种模式

目录 一 网络配置中出现的错误及解决方案二 VMware下网络配置的三种模式简介1.桥接模式(Bridged)2.网络地址转化模式(NAT)3.仅主机模式(host-only) 网络配置中出现的错误及解决方案 错误1: 安装好虚拟机之后一切正常,等过了一天再使用时发现获取不到IP地址. 错误分析:考虑虚拟机配置了NAT模式.Bridged模式和host-only模式. 首先考虑NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,

Eclipse中开发环境也想把Tomcat 的默认BIO模式改为NIO模式

1.1 问题 有时候,开发环境我们也想把Tomcat 的默认BIO模式改为NIO模式,该如何改呢? 1.2 方案 通过eclipse里面的server.xml进行修改. 1.3 步骤 首先我们来一起看看eclipse默认的server.xml文件 名词解释: bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包).Tomcat在默认情况下,就是以bio模式运行的.遗憾的是,就一般而言,bio模式性能比较地

RabbitMQ之消息模式(下)

目的: RabbitMQ之消息模式(上):https://www.cnblogs.com/huangting/p/11994539.html 消费端限流 消息的ACK与重回队列 TTL消息 死信队列 消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据 消费端限流RabbitMQ提供的解决方案 RabbitMQ提供了一种qos(服务

CentOS修改系统的默认启动模式为命令号界面

CentOS在安装桌面之后,将图形界面设置为默认模式,给PC内存带来较大压力,所以希望修改系统的默认启动模式为命令号界面,而不启动图形界面.方法如下: 1.以 root用户登录系统:或者 用su切换到超级用户模式: 2.修改/etc/inittab 文件: vi /etc/inittab 将最后一句: id:5:initdefault: 修改为: id:3:initdefault: 保存退出,重启系统即可. 3.原因及解释: Linux有7种运行级别:如下所示 # Default runleve

maven 配置: 修改默认的 .m2仓库 默认存储路径.

maven 配置: 修改默认的 .m2仓库 默认存储路径. 一 .在系统maven里修改 1.在maven_HOME/conf/下找到配置文档 settings.xml 在文档中添加如下的配置说明 <localRepository>/home/morpheus/.m2/repository</localRepository> 1 例如 settings.xml : .... <settings xmlns="http://maven.apache.org/SETTI