【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装

这篇具有很好参考价值的文章主要介绍了【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1 Rabbitmq集群搭建

1.1 普通安装方式

1.1.1 环境准备

        要在Linux环境下安装RabbitMQ,首先我们要有一个Linux环境,此处我们使用CentOS7虚拟机进行演示。如果本地还没有装过虚拟机,可以参考我之前的文章搭建虚拟机环境:VMware Workstation 14安装教程、虚拟机环境搭建(VMware Workstation14 + centos7)、VMware+CentOS7 网络及静态IP配置。

        准备好虚拟机以后,我们就可以按照下面的步骤安装RabbitMQ了。

1.1.2 安装Erlang

        RabbitMQ依赖于Erlang,所以,在安装RabbitMQ之前,需要先安装Erlang。此处需要注意,Erlang和RabbitMQ之间有版本的依赖关系,详见:RabbitMQ Erlang Version Requirements — RabbitMQ。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        所以,如果我们已经确定了要安装哪个版本的RabbitMQ后,需要安装对应版本的Erlang。此处,我们选择RabbitMQ 3.9.14 + ErLang 23.3。

        在开始安装之前,先执行下面的命令安装一些必要的依赖:

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel glibc-devel xmlto perl wget socat

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        然后下载23.3版本的Erlang包:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        将下载好的Erlang包上传到虚拟机中,然后执行下面命令解压:

tar -xvf otp_src_23.3.tar.gz

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        解压完成后,进入解压后的目录,执行下面命令配置erlang的资源文件路径:

./configure --prefix=/usr/local/erlang

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        然后执行下面命令编译源码并安装Erlang:

make && make install

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1.1.3 配置Erlang环境变量

        执行下面命令编辑环境变量文件:

vim /etc/profile

        在文件最后加入一行:

export PATH=$PATH:/usr/local/erlang/bin

        其中,/usr/local/erlang为erlang安装目录。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        执行下面的命令编译生效配置:

source /etc/profile

1.1.4 验证Erlang是否安装成功

        执行完上面的步骤后,如果中间没有出现报错,那么就说明已经安装成功了。此时可以通过执行下面的命令验证Erlang是否安装成功:erl。

        输入erl命令后,如果出现Erlang版本信息,说明Erlang已经安装成功了:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1.1.5 安装RabbitMQ

        首先,去GitHub上找到自己需要的版本,然后下载对应版本的压缩包文件:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        将下载好的文件上传到虚拟机上,然后执行下面的命令解压:

tar -xvf rabbitmq-server-generic-unix-3.9.14.tar.xz

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1.1.6 配置RabbitMQ环境变量

        执行下面命令配置环境变量:

vim /etc/profile

        在最后加入一行:

export PATH=$PATH:/usr/local/rabbitmq_server-3.9.14/sbin

        其中/usr/local/rabbitmq_server-3.9.14为RabbitMQ安装目录。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        执行下面的命令编译生效配置:

source /etc/profile

1.1.7 启动RabbitMQ

        进入RabbitMQ安装目录下的sbin目录,通过里面的rabbit-server命令可以启动RabbitMQ,有三种方式:

# 后台方式启动
#./rabbitmq-server -detachedservice 
#rabbitmq-server start
#./rabbitmq-server start

        我们选择任意一种方式启动即可:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1.1.8 添加用户

        RabbitMQ安装成功后有一个默认用户和密码,都是guest,但这个guest用户只能在RabbitMQ本机登录使用,如果想在其他机器上访问RabbitMQ需要添加新的账户。在RabbitMQ安装目录的sbin目录下,使用下面命令添加一个admin用户,并且密码也是admin:

./rabbitmqctl add_user admin admin

        然后修改用户角色为管理员:

./rabbitmqctl set_user_tags admin administrator

        最后给admin用户添加权限:

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

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1.1.9 启用web端管理界面插件

        执行下面的命令启用管理插件:

./rabbitmq-plugins enable rabbitmq_management

        然后就可以在浏览器中访问RabbitMQ的管理界面了。在浏览器地址栏中输入:虚拟机IP:15672即可:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        用户名和密码输入我们上面创建的admin登录:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        至此,我们的RabbitMQ就已经安装完成,并且可以通过web界面进行管理RabbitMQ了。

1.2 容器安装方式

1.2.1 搭建普通集群

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

1、新建三个docker容器。

docker run -d --hostname rabbit1 --name myrabbit1  -v /home/rabbitmq/data:/var/lib/rabbitmq -p 15671:15672 -p 5671:5672 rabbitmq
docker run -d --hostname rabbit2 --name myrabbit2  -v /home/rabbitmq/data:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 --link myrabbit1:rabbit1 rabbitmq
docker run -d --hostname rabbit3 --name myrabbit3  -v /home/rabbitmq/data:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 rabbitmq

2、三个都进入容器下载可视化工具。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

3、进入第一个mq容器重启。

docker exec -it ef4a1f0fade7 /bin/bash 
rabbitmqctl stop_app 
rabbitmqctl reset 
rabbitmqctl start_app 
exit

4、进入第二个 和 第三个 mq容器执行。

docker exec -it e36d94d40008 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1   //如遇到报错再执行上句、再继续执行
rabbitmqctl start_app
exit

5、进去mq可视化界面,overview面板中的Nodes可查看到节点信息。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

6、测试,在mq上新建交换机、其余两个也出现新建的交换机。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        此时普通集群以构建完成:

1、此种集群主节点down掉后,消费者也无法消费从节点的消息,不能做故障转移,只能当作备份。

2、主节点正常,从节点则可以消费消息

1.2.2 镜像集群(高可用)(推荐)

        这种集群弥补第一种的缺陷,需在普通集群的基础下搭建(确保第一种集群可用)。

        镜像队列机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升mq集群的高可用性。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

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

        所以在对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置policy,然后客户端创建队列的时候,rabbitmq集群根据“队列名称”自动设置是普通集群模式或镜像队列。具体如下:

        队列通过策略来使能镜像。策略能在任何时刻改变,rabbitmq队列也近可能的将队列随着策略变化而变化;非镜像队列和镜像队列之间是有区别的,前者缺乏额外的镜像基础设施,没有任何slave,因此会运行得更快。

        为了使队列称为镜像队列,你将会创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下面表格说明这些key的选项。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        为什么RabbitMQ不将队列复制到集群里每个节点呢?这与它的集群的设计本意相冲突,集群的设计目的就是增加更多节点时,能线性的增加性能(CPU、内存)和容量(内存、磁盘)。理由如下:

        Storage Space: If every cluster node had a full copy of every queue, adding nodes wouldn’t give you more storage capacity. For example, if one node could store 1GB of messages, adding two more nodes would simply give you two more copies of the same 1GB of messages.(存储空间:如果每个集群节点每个队列的一个完整副本,增加节点需要更多的存储容量。例如,如果一个节点可以存储1 gb的消息,添加两个节点需要两份相同的1gb的消息)

        Performance: Publishing messages would require replicating those messages to every cluster node. For durable messages that would require triggering disk activity on all nodes for every message. Your network and disk load would increase every time you added a node, keeping the performance of the cluster the same (or possibly worse).(性能:发布消息需要将这些信息复制到每个集群节点。对持久消息,要求为每条消息触发磁盘活动在所有节点上。每次添加一个节点都会带来 网络和磁盘的负载。)

        当然RabbitMQ新版本集群也支持队列复制(有个选项可以配置)。比如在有五个节点的集群里,可以指定某个队列的内容在2个节点上进行存储,从而在性能与高可用性之间取得一个平衡(应该就是指镜像模式)。

1、配置集群架构

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2、进入任意节点配置策略

docker exec -it ef4a1f0fade7 /bin/bash
rabbitmqctl set_policy ha-all "^rabbitmq" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

3、测试,新建一个rabbitmq开头的队列

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        此时某个节点down掉(包括主节点),其余节点也能消费。

        将主节点down掉,节点自动切换。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

4、清除策略

rabbitmqctl clear_policy ha-all

2 界面认识

2.1 概要页面

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2.2 连接页面

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2.3 通道页面

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2.4 交换器页面

交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2.5 队列页面

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        点击名称进去,可以看到队列的详细信息

        get Message可以看到消息的内容

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        arguments具体参数如下:

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

2.6 用户页面

        就是添加用户和设置用户权限。

2.7 开启日志

        进入容器,输入:

rabbitmq-plugins enable rabbitmq_tracing

        此时会多一个tracing标签,输入信息添加日志。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

  • Name: 自定义,建议标准点容易区分
  • Format: 表示输出的消息日志格式,有Text和JSON两种,Text格式的日志方便人类阅读,JSON的方便程序解析。

        JSON格式的payload(消息体)默认会采用Base64进行编码,如上面的“trace test payload.”会被编码成“dHJhY2Ug dGVzdCBwYXlsb2FkLg==”。

  • Max payload bytes: 表示每条消息的最大限制,单位为B。比如设置了了此值为10,那么当有超过10B的消息经过Rabbit MQ流转时,在记录到trace文件的时候会被截断。如上text日志格式中“trace test payload.”会被截断成“trace tes
  • Pattern:
    • # 追踪所有进入和离开MQ的消息
    • publish.# 追踪所有进入MQ的消息
    • publish.myExchage 追踪所有进入到myExchange的消息
    • deliver.# 跟踪所有离开MQ的消息
    • deliver.myQueue 追踪所有从myQueue离开的消息 #.myQueue实测效果等同于deliver.myQueue

        添加后,点击即可查看日志。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        如果出现错误,是因为插件默认是使用 guest 用户,是因为把 guest 用户删除了,或者在配置文件里面使用其他用户。

【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装,云原生,paas,中间件

        解决: 配置/etc/rabbitmq/rabbitmq.config,添加配置(未尝试,可以或者不行或者有其他解决方法请留言)

{rabbitmq_tracing,
    [
        {directory, "/var/vcap/sys/log/rabbitmq-server/tracing"},
        {username, <<"admin">>},
        {password, <<"password">>}
    ]
},

3 rabbitmq常见故障

  • 集群状态异常
  1. rabbitmqctl cluster_status检查集群健康状态,不正常节点重新加入集群
  2. 分析是否节点挂掉,手动启动节点。
  3. 保证网络连通正常
  • 队列阻塞、数据堆积
  1. 保证网络连通正常
  2. 保证消费者正常消费,消费速度大于生产速度
  3. 保证服务器TCP连接限制合理
  • 脑裂
  1. 按正确顺序重启集群
  2. 保证网络连通正常
  3. 保证磁盘空间、cpu、内存足够
  • 内存使用量超过阀值
=INFO REPORT==== 15-Mar-2022::03:21:13 ===
rabbit on node 'rabbit@hb-lvs-rabbitmq-mem-1' down

=INFO REPORT==== 15-Mar-2022::03:21:16 ===
vm_memory_high_watermark set. Memory used:3194473120 allowed:3188020019

=WARNING REPORT==== 15-Mar-2022::03:21:16 ===
memory resource limit alarm set on node 'rabbit@hb-lvs-rabbitmq-disk-2'.

**********************************************************
*** Publishers will be blocked until this alarm clears ***
**********************************************************

        这时会阻塞生产者,以避免服务崩溃。

        临时解决办法是调大内存阀值,默认是0.4;

rabbitmqctl set_vmmemory_high_watermark 0.6

4 常用命令

  • 启动rabbit服务:service rabbitmq-server start
  • 停止rabbit服务:service rabbitmq-server stop
  • 后台启动:rabbitmq-server -detached
  • 运行状态:rabbitmqctl status
  • 用户管理
  •         查看所有用户:rabbitmqctl list_users
  •         添加用户:rabbitmqctl add_user username password
  •         删除用户:rabbitmqctl delete_user username
  •         修改密码:rabbitmqctl change_password username newpassword
  • 开启rabbit网页控制台
  •         进入rabbit安装目录:cd /usr/lib/rabbitmq
  •         查看已经安装的插件:rabbitmq-plugins list
  •         开启网页版控制台:rabbitmq-plugins enable rabbitmq_management
  •         重启rabbitmq服务
  •         输入网页访问地址:http://localhost:15672/ 使用默认账号:guest/guest登录

参考链接

Linux安装Erlang和RabbitMQ详细步骤

RabbitMQ的工作模式及原理

RabbitMQ如何保证消息的可靠性投递与消费?

rabbitmq详解-CSDN博客

RabbitMQ(一)——常见消息中间件

深入理解:RabbitMQ的前世今生

RabbitMQ技术详解-架构

透彻rabbitmq - 知乎

消息队列的使用场景是怎样的? - 知乎

RabbitMQ原理 - 知乎

RabbitMQ 原理解析

RabbitMQ原理详解_rabbitmq工作原理-CSDN博客文章来源地址https://www.toymoban.com/news/detail-829028.html

到了这里,关于【云原生进阶之PaaS中间件】第四章RabbitMQ-3-RabbitMQ安装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生进阶之PaaS中间件】第一章Redis-1.4过期策略

            除了string独有设置过期时间的方法,其他类型都需依靠expire方法设置时间,若: 未设置时间,则缓存永不过期 设置过期时间,但之后又想让缓存永不过期,使用persist         设置key的过期时间。超时后,将会自动删除该key。在Redis的术语中一个key的相关超时

    2024年02月09日
    浏览(36)
  • 【云原生进阶之PaaS中间件】第一章Redis-2.4缓存更新机制

            无论先操作db还是cache,都会有各自的问题,根本原因是cache和db的更新不是一个原子操作,因此总会有不一致的问题。想要彻底解决这种问题必须将cache和db的更新操作归在一个事务之下(例如使用一些分布式事务,或者强一致性的分布式协议)。或者采用串行化,

    2024年02月10日
    浏览(50)
  • 【云原生进阶之PaaS中间件】第一章Redis-1.5.1安装配置

            在本节中,您将了解和学习Redis的环境安装设置。         要在Ubuntu上安装Redis,打开终端并键入以下命令 -         这将在Ubuntu机器上安装Redis。 1.2.1 安装步骤 1、首先使用 sudo brew install redis 命令一键安装Redis, 默认会安装在 /usr/local/bin 路径中。 2、cd 进

    2024年02月09日
    浏览(43)
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

    » 领导者(leader),负责进行投票的发起和决议,更新系统状态 » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票 » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票

    2024年02月08日
    浏览(37)
  • 【云原生进阶之PaaS中间件】第一章Redis-1.3Redis配置

            Redis支持采用其内置默认配置的方式来进行启动,而不需要提前配置任何文件,但是这种启动方式只推荐在测试和开发环境中使用,但更好的方式是通过提供一个Redis的配置文件来对Redis进行配置, 这个配置文件一般命名为’redis.conf’。         Redis的配置文件

    2024年02月09日
    浏览(34)
  • 【云原生进阶之PaaS中间件】第一章Redis-2.3.2哨兵模式

            由于无法进行主动恢复,因此主从模式衍生出了哨兵模式。哨兵模式基于主从复制模式,只是引入了哨兵来监控与自动处理故障。Redis Sentinel是社区版本推出的原生高可用解决方案,Redis Sentinel部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群,其中Redis

    2024年02月06日
    浏览(29)
  • 【云原生进阶之PaaS中间件】第一章Redis-2.3.3集群模式

            Redis集群是一个提供在多个Redis节点之间共享数据的程序集。它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分片的方式被自动分割到不同的master节点上

    2024年02月10日
    浏览(34)
  • 【云原生进阶之PaaS中间件】第一章Redis-1.6.1Java项目使用Redis

            redis的java客户端很多,官方推荐的有三种: Jedis Lettuce Redisson Spring 对Redis 客户端进行了整合,提供了Spring Date Redis ,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。         使用Jedis操作Redis的步骤: 1.获取链接; 2.执行操作; 3.关闭连接

    2024年02月09日
    浏览(43)
  • 【云原生进阶之PaaS中间件】第三章Kafka-4.4-消费者工作流程

    1.1.1 消费者群组         Kafka 里消费者从属于消费者群组,一个群组里的消费者订阅的都是同一个主题,每个消费者接收主题一部分分区的消息。         如上图,主题 T 有 4 个分区,群组中只有一个消费者,则该消费者将收到主题 T1 全部 4 个分区的消息。      

    2024年02月22日
    浏览(39)
  • 云原生中间件开源现状分析与华为中间件案例解读

    开源中间件在企业分布式架构搭建和服务治理中扮演着重要的角色,尤其是在解决我国网络高并发和业务复杂性问题方面。然而,尽管中间件市场由商业闭源厂商主导,提供了一系列基础中间件和数据类中间件以支持稳定的应用程序运行环境,开源中间件生态却相对分散和薄

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包