centos7安装rabbitmq集群

news2024/11/24 18:35:36

公司号口项目让运维安装rabbitmq,结果rabbitmq页面state都显示down了,问运维居然说都正常,麻蛋欺负我无知,自己搞一遍试试。

前言

RabbitMQ是一个开源的强大的企业消息系统,支持主流的操作系统,支持多种开发语言。我们项目中使用RabbitMQ作为消息队列,解耦业务,构建高可靠的消息队列系统。RabbitMQ可以用在订单系统、日志系统、数据收集等常见场景中。

集群模式

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 高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在 consumer 消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

节点信息

RAM node

内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。

Disk node

将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
RabbitMQ 要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。
解决方案:设置两个磁盘节点,至少有一个是可用的,可以保存元数据的更改。

认证方式

通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie。我们的为保证cookie的完全一致,采用从一个节点copy的方式,实现各个节点的cookie文件一致。注意修改文件的权限:600

相关端口

4369 (epmd), 25672 (Erlang distribution):Epmd 是 Erlang Port Mapper Daemon 的缩写,在 Erlang 集群中相当于 dns 的作用,绑定在4369端口上。
5672, 5671 (AMQP 0-9-1 without and with TLS):AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。
15672 (if management plugin is enabled):通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest。(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)

安装elang

安装 RabbitMQ 之前要安装 Erlang,去rabbitmq官网查看两者之间的关系:
在这里插入图片描述
访问 Erlang 的 Github,如下:https://github.com/rabbitmq/erlang-rpm/releases

本人下载
https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.2/erlang-23.3.2-1.el7.x86_64.rpm

下载rabbitmq

访问 RabbitMQ 的官网:https://www.rabbitmq.com/install-rpm.html#downloads

本人下载
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm

开始安装

安装依赖socat,安装Erlang时需要

yum install -y socat

安装Erlang和rabbitmq

rpm -ivh erlang-23.3.2-1.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm

启动、关闭和重启rabbitmq

systemctl start rabbitmq-server        #启动
systemctl start rabbitmq-server        #关闭
systemctl restart rabbitmq-server    #重启
systemctl enable rabbitmq-server   #systemctl enable rabbitmq-server

查看rabbitmq当前状态

rabbitmqctl status                            #查看启动后的情况
systemctl status rabbitmq-server    #服务状态

rabbitmq其它操作命令

#查看所有队列
rabbitmqctl list_queues

# 清除某个队列的数据
rabbitmqctl purge_queue queueName

# 清除所有队列数据以及用户数据、配置数据:慎用,记得要先把MQ 的meta data备份出来,reset后,将meta data导入即可。
rabbitmqctl reset
但是在使用此命令前,要先关闭应用,否则不能清除。关闭应用的命令为:
rabbitmqctl stop_app
执行了这两条命令后再次启动此应用。命令为:
rabbitmqctl start_app
再次执行命令:
rabbitmqctl list_queues

#查看所有虚拟主机
rabbitmqctl list_vhosts

#添加用户:
rabbitmqctl  add_user username password
 
#列出所有用户:
rabbitmqctl list_users
 
#删除用户:
rabbitmqctl  delete_user username
 
#清除用户权限:
rabbitmqctl  clear_permissions  -p  vhostpath  username
 
#列出用户权限:
rabbitmqctl  list_user_permissions username
 
#修改密码:
rabbitmqctl  change_password  username  newpassword
 
#设置用户权限:
rabbitmqctl  set_permissions  -p  vhostpath  username  ".*"  ".*"  ".*"
 
#创建虚拟主机: 
rabbitmqctl add_vhost vhostpath
 
#列出所以虚拟主机: 
rabbitmqctl list_vhosts
 
#列出虚拟主机上的所有权限: 
rabbitmqctl list_permissions -p vhostpath
 
#删除虚拟主机: 
rabbitmqctl delete_vhost vhost vhostpath
 
#移除所有数据,要在 rabbitmqctl stop_app 之后使用: 
rabbitmqctl reset
 
#组成集群命令: 
rabbitmqctl join_cluster <clusternode> [--ram]
 
#查看集群状态: 
rabbitmqctl cluster_status
 
#修改集群节点的存储形式: 
rabbitmqctl change_cluster_node_type disc | ram
 
#摘除节点:
rabbitmqctl   forget_cluster_node  [--offline]  
 
#修改节点名称:
rabbitmqctl  rename_cluster_node   oldnode1  newnode1  [oldnode2  newnode2]  [oldnode3  newnode3...]

启动失败

在这里插入图片描述
出现上面错误则首先设置hostname

hostnamectl set-hostname 主机名
#查看
hostname
#重启服务器

设置本地host

vi /etc/hosts
#输入
192.168.236.133 rabbitmqOne
#重启网卡
service network restart

然后重启网卡,再次启动即可

配置RabbitMQ

启动网页版插件

rabbitmq-plugins enable rabbitmq_management

创建用户名和密码并赋权限,便于网页登陆

rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator

关闭防火墙,访问端口15672即可看到如下页面;
在这里插入图片描述

rabbitmq插件管理

#插件列表: 
rabbitmq-plugins list 
#启动插件: 
rabbitmq-plugins enable XXX   (XXX为插件名)
#停用插件: 
rabbitmq-plugins disable XXX

修改rabbitmq配置

安装新版的 RabbitMQ-3.8.x 后,发现找不到它的配置文件,事实上RabbitMQ-3.8.1并没有生成配置文件,需要我们手动添加配置文件。官方建议配置文件的位置:​​/etc/rabbitmq/rabbitmq.conf​​
如要修改rabbitmq的默认端口

vim /etc/rabbitmq/rabbitmq.conf
# AMQP 0-9-1 and 1.0 port,默认5672,允许远程访问
listeners.tcp.default = 0.0.0.0:56720
# web管理,默认15672
management.tcp.port = 56721
management.tcp.ip   = 0.0.0.0

此时单机完成,开始集群配置

集群配置

配置host

首先搞三台服务器192.168.236.133、192.168.236.134、192.168.236.135
修改对应的hostname为rabbitmqOne、rabbitmqTwo、rabbitmqThree
修改hosts统一为如下所示

192.168.236.133 rabbitmqOne
192.168.236.134 rabbitmqTwo
192.168.236.135 rabbitmqThree

这里将192.168.236.133作为主节点,其它加入这个集群

同步cookie

注意rabbitmq通过.erlang.cookie进行集群验证,所以要保证一致,将192.168.236.133中替换其它服务器的.erlang.cookie

/var/lib/rabbitmq/.erlang.cookie

加入集群

保证192.168.236.133启动正常,在192.168.236.134和192.168.236.135上执行加入集群
首先关闭并清除数据

#首先关闭应用,否则不能清除
rabbitmqctl stop_app
# 清除所有队列数据以及用户数据、配置数据:慎用,记得要先把MQ 的meta data备份出来,reset后,将meta data导入即可。
rabbitmqctl reset

加入集群并启动

rabbitmqctl join_cluster rabbit@Ali398V16
#启动此应用
rabbitmqctl start_app

查看集群状态

rabbitmqctl cluster_status

显示如下则表示成功

Cluster status of node rabbit@rabbitmqthree ...
Basics

Cluster name: rabbit@rabbitmqOne

Disk Nodes

rabbit@rabbitmqOne
rabbit@rabbitmqthree
rabbit@rabbitmqtwo

Running Nodes

rabbit@rabbitmqOne
rabbit@rabbitmqthree
rabbit@rabbitmqtwo

Versions

rabbit@rabbitmqOne: RabbitMQ 3.8.14 on Erlang 23.3.2
rabbit@rabbitmqthree: RabbitMQ 3.8.14 on Erlang 23.3.2
rabbit@rabbitmqtwo: RabbitMQ 3.8.14 on Erlang 23.3.2

Maintenance status

Node: rabbit@rabbitmqOne, status: not under maintenance
Node: rabbit@rabbitmqthree, status: not under maintenance
Node: rabbit@rabbitmqtwo, status: not under maintenance

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@rabbitmqOne, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbitmqOne, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmqOne, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbitmqthree, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbitmqthree, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmqthree, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbitmqtwo, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbitmqtwo, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbitmqtwo, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony#深入浅出学习eTs#(七)判断密码是否正确

本项目Gitee仓地址&#xff1a;深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、基本界面 本项目基于#深入浅出学习eTs#&#xff08;四&#xff09;登陆界面UI&#xff0c;继续进行&#xff0c;实现一个判断的功能 二、控件介绍 TextInput 可以输入单行文本并支持…

如果我是核酸系统架构师,我会这么用MQ。。。

V-xin&#xff1a;ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、前情提示二、保证投递消息不丢失的confirm机制三、confirm机制的代码实现四、confirm机制投递消息的高延迟性五、高并发下如何投递消息才能不丢失六、消息中间件全链路100%数据不丢失能做到吗&#xff1f;…

医学图像包——DCMTK、VTK、ITK、RTK、SimpleITK

1.ITK-医学图像处理软件包 ITK&#xff08; Insight Segmentation and Registration Toolkit&#xff09;是美国国家卫生院下属的国立医学图书馆开发的一款医学图像处理软件包&#xff0c;是一个开源的、跨平台的影像分析扩展软件工具。 ITK的开发过程中采用了先进的多模态数…

VAE详解及PyTorch代码

三大有名的生成模型VAE、GAN以及Diffusion Model 其余两篇 看了网上的一些博客&#xff0c;大多都写到了重点&#xff0c;也就是后面的公式推导部分&#xff0c;可是大部分只有推导过程&#xff0c;很少有讲明白为什么要这么假设&#xff0c;我看的时候内心不断有个疑问&…

这篇文章详细介绍动态内存管理 ,让你醍醐灌顶【c语言】

文章目录动态内存函数mallocfreecallocrealloc常见的动态内存错误对NULL指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释放&#xff08;内存泄漏&#xff09;练习柔性数…

物联网终端的信息保护

针对漏洞的恶意行为分析 我们共捕获到 4 种针对 UPnP 漏洞的利用行为 1&#xff0c;如表 4.7 所示。从中可以看出&#xff0c;这些漏洞均为远程 命令执行类漏洞。另外我们也发现&#xff0c;当漏洞出现在特定端口时&#xff0c;攻击者一般不会经过 UPnP 的发现阶段&#xff0c…

Moran指数分析

Moran指数分析 Moran指数&#xff08;莫兰指数&#xff09;是研究空间关系的一种相关系数值&#xff0c;比如研究中国31省市GDP之间是否具有空间相关关系。Moran指数通常分为两种&#xff0c;分别是全局Moran指数和local局部Moran指数。全局Moran指数用于分析整体上是否存在空…

概率分布到底有什么用?

1.1 要概率分布有什么用&#xff1f; 个人理解&#xff1a;每种概率分布对应描述了某种特定事件发生的规律&#xff0c;像是一个模板&#xff0c;只要某种事件符合该分布的要求&#xff0c;那么就可以用对应的概率分布计算此事件的概率 1.2 为什么非要确定一个分布&#xff1f;…

计算机组成原理复习题

一、选择题 一个节拍信号的宽度是指______。 A. 指令周期 B. 存储周期 C. 机器周期 D. 时钟周期 我的答案: D正确答案: D 3.3分 2. (单选题) 中断向量地址是______。 A. 子程序入口地址 B. 中断服务子程序出口地址 C. 中断返回地址 D. 中断服务子程序入口地址 我的答案: D正…

SpringCloudAlibaba、SpringCloud版本和SpringBoot版本适配

本文继SpringCloud版本和SpringBoot版本适配后&#xff0c;加入SpringCloudAlibaba组件版本适配&#xff01; 官网链接&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/

MySQL基本用法

一、数据库的基本操作&#xff1a; 1、启动数据库&#xff1a;net start mysql; 2、进入数据库&#xff1a;mysql -h localhost -u root -p; 3、关闭数据库服务&#xff1a;net stop mysql; 4、查看数据库&#xff1a;show databases; 5、新建数据库&#xff1a;create databa…

[vue element-ui]JAVA POST请求

01.前端 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript" src"js/jquery-3.4.1.min.js"></script><script type"text/javascript&qu…

Raft论文翻译(5.4.2)——安全性-提交之前term的日志entry

5.4.2 Committing entries from previous terms 提交之前term的日志entry As described in Section 5.3, a leader knows that an entry from its current term is committed once that entry is stored on a majority of the servers. If a leader crashes before committin…

linux 分析启动时服务时间消耗

工具systemd-analyze systemd-analyze是一个分析启动性能的工具&#xff0c;用于分析启动时服务时间消耗。 1 systemd-analyze使用 1.1 查看启动耗时 rootloongson-pc:/# systemd-analyze 1.2 查看每个服务的启动耗时 rootloongson-pc:/# systemd-analyze blame 1.3 显…

Docker安装配置运行Redis

本文前提是基于已安装Docker容器引擎。Ubuntu安装docker容器引擎_流沙QS的博客-CSDN博客 1.拉取redis镜像 sudo docker pull redis 2.创建文件挂载目录并进入到创建目录&#xff0c;下载官方的redis.conf配置文件 mkdir -p /home/geng/soft/redis wget http://download.re…

如何在每次辩论中都取得胜利,捍卫自己的权力-----苏格拉底产婆术

文章目录苏格拉底的产婆术四步法是&#xff1a;产婆术&#xff08;art of midwifery&#xff09;苏格拉底&#xff1a;认识你自己&#x1f338;I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢&#xff1a;木芯工作室 、Ivan from Rus…

2022年度《中国数字安全能力图谱(精选版)》发布,中睿天下实力入选

近日&#xff0c;国内数字安全领域中立的第三方调研机构数世咨询正式发布《2022年度中国数字安全能力图谱&#xff08;精选版&#xff09;》&#xff08;以下简称能力图谱&#xff09;&#xff0c;中睿天下凭借领先的技术创新实力&#xff0c;成功入选上榜高级威胁防御能力者及…

照片如何加滤镜?一步一步教会你给图片加上滤镜

我们在外出游玩的时候&#xff0c;常常会拍摄一些好看的风景照或者是美食照&#xff0c;有时我们还会将这些不错的照片分享在社交平台上&#xff0c;相信这个时候你们在分享照片之前&#xff0c;都会先给照片添加滤镜&#xff0c;因为一个好的滤镜&#xff0c;不仅能够美化照片…

7的2022年终总结

7&的2022年终总结 文章目录7&的2022年终总结1、前言2、技术3、生活4、展望未来1、前言 2022年&#xff0c;终究是不平凡的一年。 2022年2月4日&#xff0c;中国农历大年初四&#xff0c;这一天&#xff0c;北京冬奥会将拉开大幕。 2022年3月份&#xff0c;疫情还未结束…

Linux小白入门经验

雄关漫道真如铁&#xff0c;而今迈步从头越。我们在单位工作的人都有一个梦想&#xff0c;那就是搞定所有的计算机难题&#xff0c;帮助公司完成更多的电脑维修、软件开发以及系统监测。随着互联网的深入发展&#xff0c;我们都在很努力的学习各种程序和系统&#xff0c;希望能…