RabbitMQ运维篇之部署与用户管理(一)

一、认识RabbitMQ及用途
Message Queue(MQ)
相对于一些大点的公司都会使用这个MQ,比如像kafka,rabbitmq,activeMQ,rocketMQ主要用于系统与系统之间,或者程序与程序之间进行数据的传递,那么作为消息中间件,我们可以将它作为消息代理服务器,最主要的就是作用就是系统之间的信息进行”结藕“,MQ是数据可靠性的重要保障。

那么说起mq的作用之前呢,比如我们以前会遇到什么问题?

1)比如说现在我们有两个系统,一个系统A,一个系统B,那么这两个系统可以把它理解成一个订单系统,一个是后台的支付系统,那么这两个系统之间,你调用我的,我调用你的,也就是数据之间进行一个相互的传递。 那么按照之前的做法来说,来回的传递,就出现问题了,比如说,不管是a系统还是b系统中间任何一个系统出现了问题,我们的消息就发送不出去了,那么像碰到这种情况下,我们就需要额外的去编写一些程序,来保证我们的消息成功送达,比如说增加缓存,增加重试次数,这就需要额外的编码,这就需要编码的工作量也是不小的。

2)另外就是数据传递过程中,这两个系统都是java开发的还好,比如一个是java开发的一个是python开发的,那么在这两个系统之间进行数据传递的过程中,那么麻烦就很大了,在这里面平台不一样语言不一样,进行传递的接口也不一样,这在我们无形中带来了很大的问题。

3)对于系统a与系统b之间如果系统出现了问题,我们甚至都不知道是什么原因造成的,比如系统a接口变了,导致系统b接收不到哪些,系统b不知道出现哪些问题,我们没办法对问题进行切全,那么在线上调试与运维的过程中,这也是一个必然灾难性的后果。

综上所述的话,直接调用的话称为藕严重的耦合,这两个缺了哪一个都不能正常工作,那么怎么解决呢,这个时候就需要mq去解决了。

所以mq叫做消息代理服务器,可以看到上面的mq的基本架构图系统a与系统b不再直接通信,中间增加了一台MQ的消息代理服务器,所有的消息都往这个消息代理服务器上去发送,那么这个消息代理服务器本身来说它具备了一些高可用,高并发的特性,可以估且的认为它是非常稳定的,至少比我们开发的系统来说要稳定的多的多,不用担心当机,无法提供服务,那么在这个基础之上,所有的系统把这个消息放出去,再由这个消息服务器,根据数据的情况分别的转发或者分发

那么我们数据传递的目的,那么这么做有这么一个好处
首先我们系统之间不再进行之间的通信,那么它就完成这个节藕的工作,它完全面向一个中间人来做
其二的话MQ它是一个国际的标准,它在底层遵循一个叫做amqp高级消息队列协议,那么在这个底层的话因为它是一个国际标准,因此系统a与系统b,我们不管是什么样的系统开发的,只要遵循了数据传输的规范,那么就可以在这里面完成通过mq进行数据的传递,这是数据统一的协议,另外就是数据切全的过程,那么在切全的过程中,你会发现,我们估且认为mq这是一个稳定的服务。系统a与系统b进行数据传输,如果系统a把数据,送到mq里面,那么系统a的任务就完成了,至于系统b把我们的数据拿走,那是系统b的事,那么系统a的事完成了,那么如果真的出现了问题,比如运维工程师发现这个程序没有执行,那么看着系统a发送成功了,那么剩下的问题就是连带mq,到系统b这一块进行一个处理与跟踪,那么mq并提供强大的图形化管理页面,我们可以轻易的将之前发送的数据进行跟踪与管理。这也是非常的重要

那么说到mq,它有这么一个好的特性,可以总结一句话,mq解决了在这个系统之间进行数据传递的耦合性问题,使用mq几乎适用于我们所有的系统调用或者是分布式项目

二、什么是RabbitMQ?
在我们市场上有各种各样的mq,但是rabbitmq是全世界最火的开源消息代理服务器,在全世界拥有超过35000个项目部署在rabbitmq,用的人多,而且解决一些相关的问题也就很快,这个rabbit英文翻译为兔子,这个也是一个整个消息中间件的龙头老大,也就是我们使用rabbitmq很多的方案不用自己去考虑,因为全世界的工程师都为这个rabbitmq添砖加瓦,那么这个rabbitmq的最新版本的是3.8.2
而且rabbitmq支持几乎所有的操作系统与编程语言,提供了高并发,高可用的成熟方案,支持多种消息协议,易于部署与使用
官方地址:https://www.rabbitmq.com/


Rabbitmq与其他MQ的对比
像activemq和kafka都是apache的子成员,而rocketmq是阿里巴巴推行的消息中间件,也是作为一个apache的子项目
从这张表看出这个rabbitmq是用的最多的这个毋庸置疑,一般使用中遇到的问题,在它们的论坛以及百度中都可以找到相关的解决方案,另外就是kafka由于大数据的应用也比较多,应用比较多,逐渐的也已经替代了activemq,像rocketmq一般应用的都在国内一般比较多,另外都支持这些数据保存到磁盘上,并发吞吐量就是每秒可以处理多少数据,在不同的设计与不同的背景当中,它的结果也是完全不同的,这里最高的是kafka,因为是大数据的领域,也是因为高性能引起了很多大数据工程师的注意,并发量在rocketmq中也是极高的,因为像双十一这么大的并发量rocket扛住了,它在底层的优化也是做的很好的,在并发吞吐量rabbitmq就稍微逊色一些,rabbitmq在数据可靠性的问题上做了很大的努力,它保证在这里数据是非常可靠的,也是极高的,另外就是生态完整度,在周边做了一些相关的,比如UI或者路由分发等,用户总量也是rabbitmq最多,其次就是kafka,应用场景,由于极高的数据可靠性,rabbitmq主要用于高可靠的交易系统当中,activemq用于一些比较传统的消息传递当中,kafka一般使用最多也是使用日志处理大数据应用这一块,而rocketmq一般主要用于阿里巴巴内部比较多一点,像双十一就是使用的rocketmq,主要适用于互联网高并发,高可用这一块,但是这一块,在阿里也开源了很多的比如dubbo,当时也停止更新了,然后恢复的,像这一块我们社区的完整性和开源是极其不利的,像阿里有款分布式数据库叫OceanBase,由淘宝核心系统研发部、运维、DBA、广告、应用研发等部门共同完成。也是对mysql数据库底层进行了二次开发,但是用着用着就闭源了,所以担心阿里会闭源rabbitmq,在国内的开源软件来说,现在能做的很好的不是特别多,对于rocketmq未来是闭源商用还是继续开源,那么现在还是属于一个观望的态度,现在目前看到rocketmq在apache的star是5000多星,只能说是中规中矩。

RabbitMQ的应用场景
异构系统的数据传递:什么叫异构系统,就是现在有两个系统彼此要传递数据,一个用java一个用c开发的,一¥个在天津一个在北京,像这种不在一个地区又是不同语言开发的系统叫做异构系统,像这种异构系统利用mq进行数据的传递是不错的选择,但是遇到海量的数据,但是不建议使用mq进行去传递,一般mq擅长传递小规模的数据。

高并发程序的流量控制:比如像阿里的双十一进行秒杀的时候或者进行系统最忙碌的时候,进行流量控制的时候,削峰,平谷,像这种应用用mq做肯定没问题,mq是采用对列的机制,那么只允许同一时间有多少人进去,那么在这里是使用mq进行控制的。

基于p2p,p2ppp的程序:mq本身支持定阅和发布的模式或者是进行点对点消费的模式,比如使用mq进行点对点的开发,比如像自己写的qq,像微信,点对点通信,我们可以使用mq进行分发,另外就是p2ppp的程序的话,也非常适合就像我们程序底层的时候,大家看过爱奇艺什么的,那么比如喜欢一个人的频道,直接点一下关注,那么到这个人节目有更新的时候,马上订阅的人都能收到它的最新的消息,这就是通过mq的订阅与发布,这些都是mq的天生所在。

分布式系统的事务一致性TCC:分布式事务是我们开发过程中最挠头的问题,比如说什么是分布式事务,现在有5个系统,这5个系统的话要完成大的业务,那么这个大的业务,这5个系统每一个系统都完成了一小块数据,现在有需求来了,这5个系统要么全部都处理成功,要么中间有任何一个出现问题,我要把之前的系统信息全部都回滚什么都没做过,那么这就是我们的说到的分布式事务,那么分布式事务底层的话我们的设计叫tcc,那么在这里面最核心的就是基于mq进行消息的分发,来通知我们的应用,它进行提交回滚。

高可靠的交易系统:在高可靠的交易系统中,rabbitmq最值得骄傲的是高可靠性,对于应用来说mq本身就是高可靠性,同时对数据也进行了高可靠的支持,几乎不会出现数据mq的层面上丢失的情况,那么在这种高可靠的交易系统来说,rabbitmq最适合不过了,任何一个多数据进行交互的两个以上三个以上项目,进行数据传递用mq作为系统节藕的服务器是再合适不过的。

三、Linux平台安装最新RabbitMQ
RabbitMQ使用Erlang开发
Erlang([‘?:l??])是一种通用的面向并发的编程语言, Erlang是一个结构化,动态类型编程语言,内建并行计算支持。
使用Erlang来编写分布式应用要简单的多,Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。
下载地址:https://www.rabbitmq.com/download.html
直接下载最新的rabbitmq到本地

rabbitmq还需要依赖erlang的运行环境
https://www.erlang-solutions.com/resources/download.html
选择centos,找到22.2.5最新的版本下载到本地

[[email protected] ~]# mkdir rabbitmq
[[email protected] rabbitmq]# ls
esl-erlang_22.2.5-2~centos~7_amd64.rpm rabbitmq-server-3.8.2-1.el7.noarch.rpm
--nodeps不检查依赖,去除依赖关系
[[email protected] rabbitmq]# rpm -ivh --nodeps esl-erlang_22.2.5-2~centos~7_amd64.rpm
[[email protected] rabbitmq]# rpm -ivh --nodeps rabbitmq-server-3.8.2-1.el7.noarch.rpm
[[email protected] rabbitmq]# rabbitmq-plugins enable rabbitmq_management
启动控制台
[[email protected] rabbitmq]# rabbitmq-server
访问http://ip:15672

登录的时候3.3以上的版本都会出现User can only log in via localhost,是因为禁止使用guest/guest权限通过除localhost外的访问
找到这个文件rabbit.app
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin/rabbit.app

将:{loopback_users, [<<”guest”>>]},
改为:{loopback_users, []},

重启服务
[[email protected] ~]# rabbitmqctl stop
[[email protected] ~]# rabbitmq-server
登录:guest
密码:guest

RabbitMQ常用命令
启动与关闭
rabbitmq-server 前台启动
rabbitmq-server -detached 后台启动
rabbitmqctl stop 停止服务/kill -9 rbbitmq的pid

终止与启动应用
rabbitmqctl start_app 启动应用
rabbitmqctl stop_app 终止应用
就是将我们的应用进行启动或者终止,这个不会对我们的进程产生影响,只是对我们的队列服务进行了暂停,比如像一个电厂将这个电厂看作一个进程,比如电厂进行升级改造,需要拉闸,那么相当于使用这个rabbitmqctl stop_app,恢复的话,使用start_app

用户管理
创建一个用户,比如叫kubernetes
格式:rabbitmqctl add_user {username} {password}
[[email protected] ~]# rabbitmqctl add_user kubernetes 123456
Adding user "kubernetes" ...

删除用户
rabbitmqctl delete_user {username}

重置密码,一般的话在部署rabbitmq的时候进行对guest用户进行修改密码,因为这个权限是非常大的
[[email protected] ~]# rabbitmqctl change_password guest 123456789
Changing password for user "guest" ...
格式:rabbitmqctl change_password {username} {newpassword}

授予用户角色(Tag),在rabbitmq中有四种基本的角色,对mq有不同的操作权限,这4种角色统一叫tag,可以针对我们创建的用户给它一定的权限,这个tag也就是包含了一定相关的策略信息。
格式:rabbitmqctl set_user_tags {username} {tag}
[[email protected] ~]# rabbitmqctl set_user_tags kubernetes administrator
Setting tags for user "kubernetes" to [administrator] ...
查看对我们的kubernetes用户设置了权限为超级管理员

设置用户允许访问的vhost:访问的虚拟主机,相当于对应mysql中对应的数据库,mysql可以把数据放在不同对应的数据中,对数据进行分类,那么vhost也是一样,可以对不同的系统进行设置不同的虚拟主机,通过set_permissions规定哪个用户,可以访问哪些虚拟主机,后面的星是能够执行所有的权限,第一个是配置权限,读权限,写权限,-p是虚拟主机的路径
格式:rabbitmqctl set_permissions -p / user_admin ‘.‘ ‘.‘ ‘.
给kubernetes用户一个默认的虚拟主机的操作权限,一般生产环境中会创建多个虚拟主机,进行一些相关的权限
[[email protected] ~]# rabbitmqctl set_permissions -p / kubernetes ‘.
‘ ‘.‘ ‘.
Setting permissions for user "kubernetes" in vhost "/" ...
可以使用页面上直接添加用户


rabbitmq用户四种tag
超级管理员(administrator):也就是进行对所有的用户进行管理
可登陆管理控制台(启用management plugin的情况下),可查看所有 的信息,并且可以对用户,策略(policy)进行操作。

监控者(monitoring):可以查看rabbitmq节点的相关信息,是管理我们运行节点的运行状态的
登陆管理控制台(启用management plugin的情况下),同时可以查看
rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

策略制定者(policymaker):这个就无法查看我们节点的相关信息,但是可以进行一些策略的定制,比如在管理集群的时候,哪些队列可以进行复制,或者运行的规则,规定了我们的节点是怎么运行的
可登陆管理控制台(启用management plugin的情况下), 同时可以对
policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到 节点信息,也无法对策略进行管理。

还有一个就是什么都没写的时候,没有角色,连控制台都无法登录

原文地址:https://blog.51cto.com/14143894/2470117

时间: 2024-07-30 00:11:16

RabbitMQ运维篇之部署与用户管理(一)的相关文章

Linux运维 第二阶段 (四)用户管理

Linux运维第二阶段(四)用户管理 一.相关文件 >/etc/passwd                  用户信息文件 root:x:0:0:root:/root:bin/bash(以下依次为第1到第7字段) 1.用户名 2.密码标记 3.uid:超级用户root的uid为0,普通用户要升级为管理员,uid改为0即可(不建议建立多个管理员账号:1-499系统用户uid(伪用户),不能登录系统,用来运行系统或服务的,其中1-99是系统保留的账号,自动创建,100-499是预留给用户创建系统账

linux云自动化运维基础知识5.6(用户管理及文件权限)

用户理解用户就是系统使用者的身份在系统中用户存储为若干窜字符+若干个系统配置文件用户信息涉及到的系统配置文件:/etc/passwd        ###用户信息用户:密码:uid:gid:说明:家目录:用户使用的shell/etc/shadow        ###用户认证信息用户:密码:最后一次密码修改该时间:最短有效期:最长有效期:警告期:非活跃期:帐号到期日/etc/group        ###组信息 组名称:组密码:组id:附加组成员 /etc/gshadow        ###

自动化运维之Cobbler部署系统

一 .Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP.DNS.yum仓库.构造系统ISO镜像. Cobbler支持命令行管理,web界面管理,还提供了API接口,方便二次开发 Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷. Cobbler提供的功能 使用C

【高效运维篇】本地工具访问:安全、高效、合规的IT资源远程访问

在日常进行IT资源远程运维时,出于安全及满足审计要求的考虑,运维人员通常只能使用堡垒机及堡垒机内置的工具进行远程访问.这种运维方式给运维人员造成了极大的束缚,导致运维效率不高,用户体验不好. 很显然,从运维效率和用户体验上来讲,运维人员更喜欢使用诸如PuTTY.SecureCRT.mstsc等本地工具访问IT资源,可是这种方式却不能满足安全及审计要求. 那么如何在满足安全及审计要求的前提下,让运维人员能够按照自己喜欢的方式开展运维工作呢?小编为大家挖掘了一款实用性运维工具--行云管家. 考虑到运

《系统运维全面解析:技术、管理与实践》章节目录&#8203;

第1章 系统运维体系架构规划11.1 团队人员规划21.1.1 岗位职责划分21.1.2 岗位交接示例51.1.3 职业发展规划61.1.4 技能培训71.1.5 绩效考核示例71.2 体系架构相关事宜规划91.2.1 运维系统架构101.2.2 运维工作层次分类示例131.3 基础设施相关物资规划141.3.1 机房基础设施环境示例141.3.2 服务器产品示例171.3.3  存储设备示例181.3.4  操作系统示例181.3.5  常用软件示例191.4 运维流程标准规划201.4.1

Linux运维 第二阶段 (五)权限管理

Linux运维第二阶段(五)权限管理 一.权限管理(解决用户和身份不足的问题) >#dumpe2fs  -h /dev/sda2             (查询指定分区详细文件系统信息的命令,-h仅显示超级块中的详细信息) #mount  -o remount,acl  /             (重新挂载根分区,加入acl权限) >acl基本命令: #getfacl  文件名                      (查询文件的acl权限) #setfacl  -m  u:用户名:权限

JSP_运维_JSP项目部署到server(适合0经验新手)

实战:真正server端部署jsp项目经验总结与记录(完整过程从0到10适合对server端部署0经验新手) jsp+tomcat+mysql项目部署到真正server; servermysql安装; serverjdk安装; servertomcat安装; serversql文件管理; serverjsp项目与servermysql连接; 将项目与域名进行绑定的相关教程已经更新.网址 第一步是安装jdk,jdk应该是全部须要安装的软件中最先安装的. jdk详细怎样安装能够參考这篇 我截取了能够

linux自动化运维平台ansible部署

前言 运维的发展方向,集中化,自动化,标准化,虚拟化,分布式.本文展示的就是自动化运维的发展方向的工具:ansible.ansible有很多优点,仅需要ssh和python即可使用,不需要客户端,功能强大,模块丰富,上手容易门槛低,基于python开发,更容易做二次开发. 操作使用环境: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 结构拓扑图 安装软件和其他准备工作 可以源

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运