RabbitMQ消息队列的部署

2023-05-16

RabbitMQ消息队列的用处

    对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability);如果使用socket那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如: 

1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据会不会丢失?
2)如何降低发送者和接收者的耦合度?
3)如何让Priority高的接收者先接到数据?
4)如何做到load balance?有效均衡接收者的负载?
5)如何有效的将数据发送到相关的接收者?也就是说将接收者subscribe 处理不同的数据,如何做有效的filter。
6)如何做到可扩展,甚至将这个通信模块发到cluster上?
7)如何保证接收者接收到了完整,正确的数据? AMQP协议解决了以上的问题,而RabbitMQ实现了AMQP。

单机部署RabbitMQ

1,安装erlang
[root@localhost ~]# vim /etc/yum.repos.d/erlang.repo #写一个relang的repo的源文件
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
[root@localhost ~]# yum -y install erlang #安装
2,安装RabbitMQ
[root@localhost ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.13/rabbitmq-server-3.7.13-1.el7.noarch.rpm
[root@localhost ~]# yum -y install rabbitmq-server-3.7.13-1.el7.noarch.rpm #直接下载rpm包,大家直接安装即可
3,修改配置文件
[root@localhost ~]# cp /usr/share/doc/rabbitmq-server-3.7.13/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[root@localhost ~]# vim /etc/rabbitmq/rabbitmq.config
//打开配置文件,61行 去掉注释%%和逗号
4,安装插件并启动服务
[root@localhost ~]# abbitmq-plugins enable rabbitmq_management #web管理界面工具
[root@localhost ~]# systemctl restart rabbitmq-server #启动
[root@localhost ~]# rabbitmqctl cluster_status #查看节点状态。(下图是node1节点)
Cluster status of node rabbit@rabbitmq1 …
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
{running_nodes,[rabbit@rabbitmq1]},
{cluster_name,<<“rabbit@rabbitmq1”>>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq1,[]}]}]
5,访问测试
http://127.0.0.1:15672
默认账号密码:guest/guest

RabbitMQ集群部署

简介
消息中间件RabbitMQ,一般以集群方式部署,
主要提供消息的接受和发送,实现各微服务之间的消息异步。
以下将介绍RabbitMQ+HA方式进行部署。
原理介绍
cookie原理
RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证来实现分布式,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点。

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

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

普通模式
普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式
镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

环境要求
1,准备三台虚拟机,配置相同
192.168.101.11 设置主机名 rabbitmq1
192.168.101.12 设置主机名 rabbitmq2
192.168.101.13 设置主机名 rabbitmq3
操作系统:centos7.2以上
2,集群中所有节点都需要hosts文件解析
[root@rabbitmq1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.135.184 rabbitmq1
192.168.135.185 rabbitmq2
192.168.135.192 rabbitmq3
3,所有节点安装erLang和rabbitmq
见linux系统中单机部署rabbitmq
4,导入rabbitmq 的管理界面
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
5、设置erlang运行节点
一定要保证三台机器的cookie内容一致
找到erlang cookie文件的位置,源码包部署一般会存在.erlang.cookie文件;rpm包部署一般是在/var/lib/rabbitmq/.erlang.cookie。将 node1 的该文件使用rsync或者是scp复制到 node2、node3,文件权限需要是400。
[root@localhost ~]# scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
[root@localhost ~]# scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
[root@localhost ~]# cat /var/lib/rabbitmq/.erlang.cookie #查看三台机器的cookie是否一致
[root@localhost ~]# systemctl restart rabbitmq-server #启动
6,rabbitmq2和rabbitmq3
[root@localhost ~]# rabbitmqctl stop
关闭rabbitmq2和rabbitmq3的服务(不要关rabbitmq1)
如果2,3节点没有启动服务,会提示关闭错误。
7,rabbitmq2和rabbitmq3
[root@localhost ~]# rabbitmq-server -detached
2.3 独立运行节点,warning提示不用理会
Warning: PID file not written; -detached was passed.
8,查看各个节点状态。
[root@localhost ~]# rabbitmqctl cluster_status #查看各个节点状态。(下图是node1节点)
Cluster status of node rabbit@rabbitmq1 …
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
{running_nodes,[rabbit@rabbitmq1]},
{cluster_name,<<“rabbit@rabbitmq1”>>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq1,[]}]}]
Cluster status of node rabbit@rabbitmq1
每台主机看到的只有一个的server信息。目前尚未组合成集群

9,添加用户并设置密码
由于guest这个用户,只能在本地访问,所以我们要在每个节点上,新增一个用户并赋予对/的所有权限,然后添加到管理员组中,让此用户能够远程访问,三个节点都要添加
[root@localhost ~]# rabbitmqctl add_user admin admin #设置账户和密码
[root@localhost ~]# rabbitmqctl set_permissions -p “/” admin “." ".” “.*” #给这个账户读,写,执行 的权限
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator #给这个用户管理员的权限
10,访问测试
http://ip:15672
账号:admin
密码admin
此时每个节点是单独的一台RabbitMQ,下面来将他们组成集群。

11、在任意节点上设置镜像队列策略
在web界面登陆,点击“Admin–Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);

12,然后在linux中设置镜像队列策略:
语法介绍
[root@localhost ~]# rabbitmqctl set_policy -p vhost1 ha-all “^” ‘{“ha-mode”:“all”}’
案例中的命令
[root@localhost ~]# rabbitmqctl set_policy -p qianfeng ha-all “^” ‘{“ha-mode”:“all”}’
注释
“coresystem” #vhost名称,此处应该填写“qianfeng”
ha-all #策略名称
“^” #queue的匹配模式为匹配所有的队列
{ } #为镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
ha-mode #指明镜像队列的模式,有效值为 all/exactly/nodes
all #表示在集群中所有的节点上进行镜像,包含新增节点
exactly #’可选‘表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes #‘可选’表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-sync-mode #’可选‘进行队列中消息的同步方式,有效值为automatic和manual
提示
此时镜像队列设置成功。队列会被复制到各个节点,各个节点状态保持一致(这里的虚拟主机vhost1 。是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息队列进行隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ消息队列的部署 的相关文章

随机推荐

  • linux查看并安装字体

    1 查看系统字体 查看所有已安装的字体 xff1a fc list 查看已安装的中文字体 xff1a fc list lang 61 zh 2 寻找字体方法 1 把windows里面的字体上传到服务器里面 windows字体存放的路径是 x
  • 简单搭建Apache服务器

    1 安装Apache服务 yum y install httpd 2 启动自启Apache服务 systemctl enable now httpd 3 访问 xff08 默认是80端口 xff0c 需要开放防火墙 xff09 4 Apac
  • docker容器设置中文编码

    使用的Dockerfile指定变量的方法 ENV LANG en US utf8
  • mysql开通binlog权限

    GRANT SELECT REPLICATION SLAVE REPLICATION CLIENT ON TO 39 v5 binlog 39 64 39 39 IDENTIFIED BY 39 v5 binlog 39
  • MySQL查看所有用户

    MySQL查看所有用户
  • 【nginx】反向代理是,url包含特殊字符导致400错误

    现象 xff1a 在一个url参数中包含了特殊字符 xff0c 通过nginx请求 xff0c 报400错误 问题分析 xff1a 这个url请求 xff0c 绕开nginx xff0c 可以返回数据 xff0c 判定是nginx出现问题
  • KVM

    KVM安装 查看cpu是否支持虚拟化 cat proc cpuinfo grep E vmx svm 关闭防火墙和selinux 注 xff1a 如果虚拟机ping不通就把防火墙开起来 1 需求内核 rhel6以上 root 64 kvm
  • nginx 防盗链详细步骤

    tailf n0 access log 实时查看网页访问详情 curl e www baidu com 127 0 0 1 e 添加访问头 本机的配置文件内容 本机的网站发布目录 别人的链接网站发布目录
  • nginx 404错误页面配置详解

    nginx 错误页面配置 再主配置文件server中加入一个location模块即可 vim etc nginx conf d default conf server listen 80 server name localhost loca
  • nginx 版本升级和添加模块详解

    版本升级 把1 16 0版本升级为1 18 0 查看本机现在版本为1 16 0 root 64 localhost usr local nginx sbin nginx v nginx version nginx 1 16 0 1 xff0
  • lvs架构

    lvs 4种模式 1 nat 网络地址转换模式 2 dr 直接路由模式 3 tun 隧道模式 4 full nat 双向转换模式 1 xff0c nat xff08 网络地址转换模式架构 xff09 1 nat模式优势是 xff0c 后端可
  • nginx 代理 负载均衡 网站转接的用法

    反向代理 1 xff0c 准备两台nginx真实服务器 a nginx 1 启动网站 内容 xff08 作为网站服务器 xff09 b nginx 2 启动代理程序 一 编辑nginx 2的配置文件 root 64 nginx server
  • LVS_Director + KeepAlived 部署

    1 xff0c 准备四台net机器 其中两台做主 备调度 别外两台做web机器 主 备调度器安装软件 root 64 lvs keepalived master yum y install ipvsadm keepalived 主 root
  • tomcat 详情介绍与部署

    1 xff0c 部署tomcat 安装JDK JDK下载面页 xff1a http www oracle com technetwork java javase downloads index html 下载jdk1 8到服务器 安装jdk
  • Redis 部署及介绍

    1 安装单机版redis root 64 redis master mkdir p data application 创建工作目录 root 64 redis master wget http download redis io relea
  • shenyu中logback替换成log4j2

    一 背景 shenyu框架默认使用的是logback处理日志 xff0c 压测发现写入日志存在瓶颈 基于log4j2优秀的性能 xff0c 使用log4j2替换logback 二 如何替换logback 1 删除logback的依赖项 sp
  • 图片项目部署

    1 xff0c 准备 mysql 主从 43 读写分离 3台 nginx 43 uwsgi 43 python3 6 1台 redis 哨兵 3台 A nginx uwsgi python3 上传代码包 xff0c 调试 B mysql r
  • Git 构建分布式版本控制系统详解

    安装git要4G以上内存 安装和配置必要的依赖关系 root 64 localhost yum install curl policycoreutils openssh server openssh clients 安装邮件程序 root
  • jenkins 详细部署

    部署jenkins需要以下的步骤 环境需要4G内存 1 xff0c 部署git 安装依赖环境 root 64 localhos yum install curl devel expat devel gettext devel openssl
  • RabbitMQ消息队列的部署

    RabbitMQ消息队列的用处 对于一个大型的软件系统来说 xff0c 它会有很多的组件或者说模块或者说子系统 xff08 subsystem or Component or submodule xff09 那么这些模块的如何通信 xff1