部署RabbitMQ集群

部署 RabbitMQ Cluster

消息中间件简介

? 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平台之间进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。优点在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以将消息进行传送和转发,是分布式系统中非常重要的组件,主要用来解决应用耦合、异步通信、流量削峰等问题。

RabbitMQ特点

可靠性

灵活的路由

扩展性

高可用信

多种协议

多语言客户端

管理界面

插件机制

rabbitmq基本命令

启动监控管理器:rabbitmq-plugins enable rabbitmq_management
关闭监控管理器:rabbitmq-plugins disable rabbitmq_management
启动rabbitmq:rabbitmq-service start
关闭rabbitmq:rabbitmq-service stop
查看所有的队列:rabbitmqctl list_queues
清除所有的队列:rabbitmqctl reset
关闭应用:rabbitmqctl stop_app
启动应用:rabbitmqctl start_app

用户和权限设置

添加用户:rabbitmqctl add_user username password
分配角色:rabbitmqctl set_user_tags username administrator
新增虚拟主机:rabbitmqctl add_vhost vhost_name
将新虚拟主机授权给新用户:rabbitmqctl set_permissions -p vhost_name username “.*” “.*” “.*”(后面三个”*”代表用户拥有配置、写、读全部权限)

角色说明

  • 超级管理员(administrator)
    可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  • 监控者(monitoring)
    可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  • 策略制定者(policymaker)
    可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
  • 普通管理者(management)
    仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
  • 其他
    无法登陆管理控制台,通常就是普通的生产者和消费者。

原理介绍

RabbitMQ是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点。

RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;

RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过RabbitMQ HA镜像队列进行消息队列实体复制

消息中间件RabbitMQ,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。

rabbitmq 有 3 种模式,但集群模式是 2 种

详细如下:

  • 单一模式:即单机情况不做集群,就单独运行一个 rabbitmq 而已。
  • 普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于 Queue 来说,消息实体只存在于其中一个节点 rabbit01(或者 rabbit02),rabbit01 和 rabbit02 两个节点仅有相同的元数据,即队列的结构。当消息进入 rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理 Queue。否则无论 consumer 连 rabbit01 或 rabbit02,出口总在 rabbit01,会产生瓶颈。当 rabbit01 节点故障后,rabbit02 节点无法取到 rabbit01 节点中还未消费的消息实体。如果做了消息持久化,那么得等 rabbit01 节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
  • 镜像模式: 把需要的队列做成镜像队列,存在与多个节点属于 RabbitMQ 的 HA 方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。

部署过程

1、环境准备

3台centos7操作系统,ip分别为:

192.168.11.131

192.168.11.134

192.168.11.133

2、修改主机名

hostnamectl --static set-hostname rabbitmq1

hostnamectl --static set-hostname rabbitmq2

hostnamectl --static set-hostname rabbitmq3

3、修改hosts文件

注:3台都做

vim /etc/hosts
192.168.11.131 rabbitmq1
192.168.11.134 rabbitmq2
192.168.11.133 rabbitmq3

4、测试3台能否ping通

ping rabbitmq1

ping rabbitmq2

ping rabbitmq3

5、安装 rabbitmq 依赖 erlang 环境

注:3台都安装

yum install erlang

6、安装 socat

注:3台都安装

yum install -y socat 

8、安装 rabbitmq

注:3台都安装

yum -y install rabbitmq-server

9、rabbitmq 常用命令

注:3台都做

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

systemctl status rabbitmq-server.service

10、账号配置

安装启动后其实还不能在其它机器访问,rabbitmq 默认的 guest 账号只能在本地机器访问, 如果想在其它机器访问必须配置其它账号

配置管理员账号:

可以创建管理员用户,负责整个 MQ 的运维
[[email protected] ~]# rabbitmqctl add_user admin admin
赋予其 administrator 角色
[[email protected] ~]# rabbitmqctl set_user_tags admin administrator
创建和赋角色完成后查看并确认
[[email protected] ~]# rabbitmqctl list_users

11、启动 rabbitmq 内置 web 插件, 管理 rabbitmq 账号等信息

rabbitmq-plugins enable rabbitmq_management

启动服务:[[email protected] ~]# systemctl restart rabbitmq-server.service

网页访问 http://ip:15672

12、rabbitmq 用户权限 VirtualHost

在 RabbitMQ 中可以虚拟消息服务器 VirtualHost,每个 VirtualHost 相当月一个相对独立的 RabbitMQ 服务器,每个 VirtualHost 之间是相互隔离的。exchange、queue、message 不能互通。 在 RabbitMQ 中无法通过 AMQP 创建 VirtualHost,可以通过以下命令来创建

rabbitmqctl add_vhost [vhostname]
例:创建虚拟主机test
[[email protected] ~]# rabbitmqctl add_vhost test

1)、新建用户

rabbitmqctl add_user superrd superrd

2)、配置权限

set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl  set_permissions -p /  admin ‘.*‘ ‘.*‘ ‘.*‘  

其中,.* 的位置分别用正则表达式来匹配特定的资源,如:

‘^(amq.gen.*|amq.default)$‘

可以匹配 server 生成的和默认的 exchange,’^$’不匹配任何资源

  • exchange 和 queue 的 declare 与 delete 分别需要 exchange 和 queue 上的配置权限
  • exchange 的 bind 与 unbind 需要 exchange 的读写权限
  • queue 的 bind 与 unbind 需要 queue 写权限 exchange 的读权限 发消息 (publish) 需 exchange 的写权限
  • 获取或清除 (get、consume、purge) 消息需 queue 的读权限

示例:我们赋予 superrd 在“/”下面的全部资源的配置和读写权限。

rabbitmqctl set_permissions -p / superrd ".*" ".*" ".*"

注意”/”代表 virtual host 为“/”这个“/”和 linux 里的根目录是有区别的并不是 virtual host 为“/”可以访问所以的 virtual host,把这个“/”理解成字符串就行。

需要注意的是 RabbitMQ 会缓存每个 connection 或 channel 的权限验证结果、因此权限发生变化后需要重连才能生效。

3)、查看权限

rabbitmqctl list_user_permissions admin
rabbitmqctl list_permissions -p /

4)、配置角色

rabbitmqctl set_user_tags [user] [role]

RabbitMQ 中的角色分为如下五类:none、management、policymaker、monitoring、administrator

官方解释如下:

management
User can access the management plugin
policymaker
User can access the management plugin and manage policies and parameters for the vhosts they have access to.
monitoring
User can access the management plugin and see all connections and channels as well as node-related information.
administrator
User can do everything monitoring can do, manage users, vhosts and permissions, close other user’s connections, and manage policies and parameters for all vhosts.
  • none 不能访问 management plugin
  • management 用户可以通过 AMQP 做的任何事外加: 列出自己可以通过 AMQP 登入的 virtual hosts 查看自己的 virtual hosts 中的 queues, exchanges 和 bindings 查看和关闭自己的 channels 和 connections 查看有关自己的 virtual hosts 的“全局”的统计信息,包含其他用户在这些 virtual hosts 中的活动。
  • policymaker management 可以做的任何事外加: 查看、创建和删除自己的 virtual hosts 所属的 policies 和 parameters
  • monitoring management 可以做的任何事外加: 列出所有 virtual hosts,包括他们不能登录的 virtual hosts 查看其他用户的 connections 和 channels 查看节点级别的数据如 clustering 和 memory 使用情况 查看真正的关于所有 virtual hosts 的全局的统计信息
  • administrator policymaker 和 monitoring 可以做的任何事外加: 创建和删除 virtual hosts 查看、创建和删除 users 查看创建和删除 permissions 关闭其他用户的 connections

如下示例将 superrd 设置成 administrator 角色。

rabbitmqctl set_user_tags superrd administrator

搭建 rabbitmq 的一般模式集群

在上述的 3 台机器上安装 rabbitmq 完成之后,你可以看到你的机器中有如下 1 个文件。路径在 $HOME 中或者在 /var/lib/rabbitmq 中,文件名称为.erlang.cookie, 他是一个隐藏文件。那么这文件存储的内容是什么,是做什么用的呢?

RabbitMQ 的集群是依赖 erlang 集群,而 erlang 集群是通过这个 cookie 进行通信认证的,因此我们做集群的第一步就是干 cookie。

1、必须使集群中也就是rabbitmq2,rabbitmq3这两台机器的.erlang.cookie 文件中 cookie 值一致,且权限为 owner 只读。chmod 600 /var/lib/rabbitmq/.erlang.cookie

[[email protected] ~]# cat /var/lib/rabbitmq/.erlang.cookie
CDHWOZUUIDSSLRYVTHER

[[email protected] ~]# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 21 May 25 10:47 /var/lib/rabbitmq/.erlang.cookie

[[email protected] ~]#scp /var/lib/rabbitmq/.erlang.cookie rabbitmq2://var/lib/rabbitmq/

[[email protected] ~]#scp /var/lib/rabbitmq/.erlang.cookie rabbitmq3://var/lib/rabbitmq/

[[email protected] ~]# systemctl restart rabbitmq-server.service

[[email protected] ~]# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 21 May 25 10:48 /var/lib/rabbitmq/.erlang.cookie

[[email protected] ~]# systemctl restart rabbitmq-server.service

[[email protected] ~]# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 21 May 25 10:48 /var/lib/rabbitmq/.erlang.cookie
[[email protected] ~]# rabbitmqctl stop_app

[[email protected] ~]# systemctl restart rabbitmq-server.service

2、查看集群状态

[[email protected] rabbitmq]# rabbitmqctl status


3、重启 rabbitmq1机器中 rabbitmq 的服务 在 rabbitmq2,rabbitmq3 分别执行

rabbitmqctl stop_app #关闭应用
rabbitmqctl join_cluster --ram [email protected] #将rabbitmq2/3节点加入到rabbitmq1集群
rabbitmqctl start_app #起应用
rabbitmq-plugins enable rabbitmq_management #导入rabbitmq的管理界面
systemctl restart rabbitmq-server.service #重启rabbitmq服务

[[email protected] ~]# systemctl restart rabbitmq-server.service

获取集群状态信息:
[[email protected] ~]# rabbitmqctl cluster_status

4、打开网页管理页面查看 nodes

http://192.168.11.131:15672

搭建rabbitmq的镜像高可用模式集群

这一节要参考的文档是:<http://www.rabbitmq.com/ha.html&gt;

首先镜像模式要依赖policy模块,这个模块是做什么用的呢?

policy中文来说是政策,策略的意思,那么他就是要设置,那些Exchanges或者queue的数据需要复制,同步,如何复制同步?对就是做这些的。

这里有点内容的,我先上例子慢慢说:

[[email protected] ~]# rabbitmqctl set_policy ha-all "^" ‘{"ha-mode":"all"}‘


参数意思为:

ha-all:为策略名称。

^:为匹配符,只有一个^代表匹配所有,^zlh为匹配名称为zlh的exchanges或者queue。

ha-mode:为匹配类型,他分为3种模式:

  • all-所有(所有的 queue),
  • exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器),
  • nodes-指定(需配置ha-params参数,此参数为数组类型比如["[email protected]","[email protected]"]这样指定为F与G这2台机器。)。

例:

原文地址:https://blog.51cto.com/14237756/2400055

时间: 2024-10-12 19:56:20

部署RabbitMQ集群的相关文章

使用Docker部署RabbitMQ集群

概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘. Windows10上Docker的安装 因为本人用的是Windows系统,所有推荐一个不错的安装文章,详见:https://blog.csdn.net/xiaoping0915/article/details/75094857 注意:设置阿里云Docker Hub加速,配置Registry mirrors地址"https://j0andt2p.mirror.

CentOS7.X环境下基于docker安装部署RabbitMQ集群

1.IP地址规划(将信息配置到/etc/hosts中)主机名 IP地址RabbitMQ01 192.168.8.131RabbitMQ02 192.168.8.132RabbitMQ03 192.168.8.133RabbitMQ04 192.168.8.1342.RabbitMQ集群安装(1)四个节点同时运行,下载RabbitMQ镜像[[email protected]~]# docker pull rabbitmq:3-management(2)四个节点分别运行,启动RabbitMQ容器 [

在CentOS7上部署Rabbitmq集群配置

概述 RabbitMQ是目前流行的开源消息队列系统.MQ(消息队列)是一种应用程序对应用程序的通信方法. RabbitMQ的结构图如图所示: 实现步骤 在一个集群里,有三台服务器,其中一台使用磁盘模式,另两台使用内存模式.两台内存模式的节点无疑速度更快,因此通过客户端连接访问它们.但是客户端不可能分别连接两个内存节点,肯定是通过前端反向代理去轮询分发请求如果担心前端反向代理服务器故障,可以通过Keepalived软件做一个高可用架构.而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用.

双节点部署rabbitmq集群

rabbitmq消息队列简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件) 可伸缩性:集群服务 消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存 安装rabbitmq [[email protected] ~]# yum install -y rabbitmq-server [[email protected] ~]# yum install -y rabbitmq-server 配置监听地址 [[email protected] ~]#

你不知道的RabbitMQ集群架构全解

RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍与实践 RabbitMQ事务和Confirm发送方消息确认--深入解读 使用Docker部署RabbitMQ集群 你不知道的RabbitMQ集群架构全解 前言 本文将系统的介绍一下RabbitMQ集群架构的特点.异常处理.搭建和使用中要注意的一些细节. 知识点 一.为什么使用集群? 二.集群的特点 三.集群异常处理 四.集群节点类型 五.集群

Centos7搭建RabbitMQ集群

本片博客简单介绍rabbitmq单节点以及集群的配置安装,使用和rabbitmq的命令,和图形界面简单的介绍使用 话不多说直接进入正题,首先介绍下rabbitmq: rabbitmq的历史:RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实

Rabbitmq集群部署手册

一.Rabbitmq集群部署手册 1.环境介绍 系统环境:Red HatEnterprise Linux Server release 6.2 (Santiago) 内核版本:Linux zxt-02.com2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64GNU/Linux 软件版本:otp_src_17.3:rabbitmq-server-3.2.4:Python 2.6.6:simple

Rabbitmq集群部署Haproxy

安装前的说明: 1.为了配合做rabbitmq的负载均衡,本次的安装包是安装的低版本1.5.8版本,下载包的地址:https://src.fedoraproject.org/repo/pkgs/haproxy/2.按照上两篇博客,先把rabbitmq集群装好:单机版Rabbitmq部署:http://blog.51cto.com/10950710/2135676Rabbitmq集群部署:http://blog.51cto.com/10950710/2135717 安装步骤: 1.将haproxy

分布式rabbitmq集群部署

分布式rabbitmq集群部署本次部署使用的三台centos服务器安装的erlang 版本为 21.0.4安装的rabbitmq版本为3.7.8-rc.2在三台服务器中分别安装rabbitmq-serverrabbitmq通信是建立在erlang环境中 所以需要先安装erlang环境 因为国外的erlang官方地址中中国不能直接访问,所以我们使用第三方包https://github.com/rabbitmq/erlang-rpm 安装说明地址 修改系统repo包文件修改repo# In /etc