RabbitMQ 运维备忘录(一)

1. 基础信息参考

一些官方的链接

RabbitMQ 官网地址:Messaging that just works — RabbitMQ

下载安装官方参考地址:Downloading and Installing RabbitMQ — RabbitMQ

官网使用教程(开发):RabbitMQ Tutorials — RabbitMQ

与 Erlang 版本对应关系参考地址:RabbitMQ Erlang Version Requirements — RabbitMQ

版本支持的时间参考地址:Release Series — RabbitMQ

单节点安装 RabbitMQ

首选要确认你需要安装的版本:rabbitmq 与 erlang 版本对应关系

我选择的是3.10.0,要求 erlang 版本在23.2以上

演示环境:CentOS 7.9 有外网权限 RPM 包方式安装

一些高版本好像没有 el7 的包了,我就直接用的最后一个版本支持 el7 的版本来演示,不然就只有源码编译安装了,那玩意感觉很费劲,麻烦

准备基础环境

### 基础设置
systemctl disable firewalld NetworkManager --now
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
hostnamectl set-hostname node1

### 重启
reboot

image-20230518132110148

设置国内 yum 源

mkdir /etc/yum.repos.d.bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d.bak

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum clean all && yum makecache

image-20230518132514312

设置 rabbitmq 相关源

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

### 安装服务
yum install erlang-23.3.4.11-1.el7.x86_64 rabbitmq-server-3.10.0-1.el7.noarch wget vim -y

启动服务

##启动服务并加入开机自启
systemctl enable rabbitmq-server --now

##状态查看
systemctl status rabbitmq-server

##端口监听查看5672
ss -lnt 

image-20230518133100671

开启 web 端管理界面

### 开启web端界面管理,监听15672端口
rabbitmq-plugins enable rabbitmq_management

### 创建一个访问账号
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin management

### 重启服务生效,访问验证,端口15672
systemctl restart rabbitmq-server

image-20230518133414888

image-20230518133446256

我好像账号必须给【management】权限,连【administartor】都进不去这个界面,不知道为啥

image-20230518133622548

2. 一些基本操作

应用管理

## 停止运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 服务应用
rabbitmqctl stop

## 停止 RabbitMQ 服务应用,但是 Erlang 虚拟机还是处于运行状态
rabbitmqctl stop_app

## 启动运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 服务应用
rabbitmqctl start_app

## 将 RabbitMQ 节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost 等,以及删除所有的持久化消息。执行rabbitmqctl reset 命令前必须停止 RabbitMQ 应用(比如先执行 rabbitmqctl stop_app)
rabbitmqctl reset

## 强制重置还原到最初状态:不论当前管理数据库的状态和集群配置是什么,都会无条件地重置节点
rabbitmqctl force_reset

服务端口开放信息

image-20230517142542813

用户管理

单个用户可以跨vhost进行授权,服务安装后默认用户是 guest

用户的角色分类:

  • none:无任何角色。新创建的用户的角色默认为 none
  • management:可以访问 Web 管理页面
  • policymaker:包含 management 的所有权限,并且可以管理策略(Policy)和参数(Parameter)
  • monitoring:包含 management 的所有权限,并且可以看到所有连接、信道及节点相关的信息
  • administartor:包含 monitoring 的所有权限,并且可以管理用户、虚拟主机、权限、策略、参数等,administator 代表了最高的权限
### 创建一个用户,配置密码
rabbitmqctl add_user admin admin

### 改变用户的密码
rabbitmqctl change_password admin admin@123

### 清除密码
rabbitmqctl clear_password admin

### 验证账号的密码,通过则 Success
rabbitmqctl authenticate_user admin admin@123

### 删除用户
rabbitmqctl delete_user admin

### 查看用户列表
rabbitmqctl list_users

### 设置用户的角色
rabbitmqctl set_user_tags admin administartor

虚拟主机 vhost 管理

用户一般会与 vhost 绑定

### 默认的vhost /

### 创建新的vhost
rabbitmqctl add_vhost vhost_demo1

### 查看当前的vhost
rabbitmqctl list_vhosts name
rabbitmqctl list_vhosts tracing

### 删除一个vhost
rabbitmqctl delete_vhost vhost_demo1

### 授权命令:root用户可以访问虚拟主机vhost1所有资源,对于资源是可配置、可读写的权限,正则支持
rabbitmqctl set_permissions -p vhost_demo1 root ".*" ".*" ".*"

### 清除权限
rabbitmqctl clear_permissions -p vhost_demo1 root

### 查看权限
#对vhost
rabbitmqctl list_permissions -p /
#对用户
rabbitmqctl list_user_permissions guest

web 界面管理

### 开启web端界面管理,监听15672端口
rabbitmq-plugins enable rabbitmq_management

### 查看当前插件使用情况
rabbitmq-plugins list

### 重启服务生效,访问验证
systemctl restart rabbitmq-server

### 关闭界面
rabbitmq-plugins disable rabbitmq_management

队列信息查询

rabbitmqctl list_queues [-p vhost] [队列信息选项]

关于队列信息选项

  • name:队列名称
  • durable:队列是否持久化
  • auto_delete:队列是否自动删除
  • arguments:队列的参数
  • policy:应用到队列上的策略名称
  • pid:队列关联的 Erlang 进程的 ID
  • owner_pid:处理排他队列连接的 Erlang 进程 ID。如果此队列是非排他的,此值将为空
  • exclusive:队列是否是排他的
  • exclusive_consumer_pid:订阅到此排他队列的消费者相关的信道关联的 Erlang进程 ID。如果此队列是非排他的,此值将为空
  • exclusive_consumer_tag:订阅到此排他队列的消费者的 consumerTag。如果此队列是非排他的,此值将为空
  • messages_ready:准备发送给客户端的消息个数。
  • messages_unacknowledged:发送给客户端但尚未应答的消息个数
  • messages:准备发送给客户端和未应答消息的总和
  • messages_ready_ram:驻留在内存中 messages_ready 的消息个数
  • messages_unacknowledged_ram:驻留在内存中 messages_unacknowledged的消息个数
  • messages_ram:驻留在内存中的消息总数
  • messages_persistent:队列中持久化消息的个数。对于非持久化队列来说总是 0
  • messages_bytes:队列中所有消息的大小总和。这里不包括消息属性或者任何其他第 5 章 RabbitMQ 管理 开销
  • messages_bytes_ready:准备发送给客户端的消息的大小总和
  • messages_bytes_unacknowledged:发送给客户端但尚未应答的消息的大小总和
  • messages_bytes_ram:驻留在内存中的 messages_bytes
  • messages_bytes_persistent:队列中持久化的 messages_bytes
  • disk_reads:从队列启动开始,已从磁盘中读取该队列的消息总次数
  • disk_writes:从队列启动开始,已向磁盘队列写消息的总次数
  • consumer:消费者数目
  • consumer_utilisation:队列中的消息能够立刻投递给消费者的比率,介于 0 和 1之间。这个受网络拥塞或者 Basic.Qos 的影响而小于 1
  • memory:与队列相关的 Erlang 进程所消耗的内存字节数,包括栈、堆及内部结构
  • slave_pids:如果队列是镜像的,列出所有 slave 镜像的 pid
  • synchronised_slave_pids:如果队列是镜像的,列出所有已经同步的 slave 镜像的 pid
  • state:队列状态。正常情况下是 running;如果队列正常同步数据可能会有“{syncing, MsgCount}”的状态;如果队列所在的节点掉线了,则队列显示状态为down(此时大多数的 queueinfoitems 也将不可用)

交换器信息查询

rabbitmqctl list_exchanges [-p vhost] [交换器信息选项]

关于交换器信息选项

  • name:交换器的名称
  • type:交换器的类型
  • durable:设置是否持久化。durable 设置为 true 表示持久化,反之是非持久化。持久化可以将交换器信息存盘,而在服务器重启的时候不会丢失相关信息。
  • auto_delete:设置是否自动删除
  • internal:是否是内置的
  • arguments:其他一些结构化参数,比如 alternate-exchange
  • policy:应用到交换器上的策略名称

绑定关系的信息查询

rabbitmqctl list_bindings [-p vhost] [绑定信息选项]

关于绑定关系信息可选

  • source_name:绑定中消息来源的名称

  • source_kind:绑定中消息来源的类别

  • destination_name:绑定中消息目的地的名称

  • destination_kind:绑定中消息目的地的种类

  • routing_key:绑定的路由键

  • arguments:绑定的参数

TCP/IP 连接信息查询

rabbitmqctl list_connections [-p vhost] [连接信息选项]

可用的连接信息选项

  • pid:与连接相关的 Erlang 进程 ID
  • name:连接的名称
  • port:服务器端口
  • host:返回反向 DNS 获取的服务器主机名称,或者 IP 地址,或者未启用
  • peer_port:服务器对端端口。当一个客户端与服务器连接时,这个客户端的端口就是 peer_port
  • peer_host:返回反向 DNS 获取的对端主机名称,或者 IP 地址,或者未启用
  • ssl:是否启用 SSL
  • ssl_protocol:SSL 协议,如 tlsv1
  • ssl_key_exchange:SSL 密钥交换算法,如 rsa
  • ssl_cipher:SSL 加密算法,如 aes_256_cbc
  • ssl_hash:SSL 哈希算法,如 sha
  • peer_cert_subject:对端的 SSL 安全证书的主题,基于 RFC4514 的形式
  • peer_cert_issuer:对端 SSL 安全证书的发行者,基于 RFC4514 的形式
  • peer_cert_validity:对端 SSL 安全证书的有效期
  • state:连接状态,包括 starting、tuning、opening、running、flow、blocking、blocked、closing 和 closed 这几种
  • channels:该连接中的信道个数
  • protocol:使用的 AMQP 协议的版本,当前是{0,9,1}或者{0,8,0}。注意,如果客户端请求的是 AMQP 0-9 的连接,RabbitMQ 也会将其视为 0-9-1
  • auth_mechanism:使用的 SASL 认证机制,如 PLAIN、AMQPLAIN、EXTERNAL、RABBIT-CR-DEMO 等
  • user:与连接相关的用户名
  • vhost:与连接相关的 vhost 的名称
  • timeout:连接超时/协商的心跳间隔,单位为秒
  • frame_max:最大传输帧的大小,单位为 B
  • channel_max:此连接上信道的最大数量。如果值 0,则表示无上限,但客户端一般会将 0 转变为 65535
  • client_properties:在建立连接期间由客户端发送的信息属性。
  • recv_oct:收到的字节数。
  • recv_cnt:收到的数据包个数。

信道信息查询

rabbitmqctl list_channels [可选信道连接信息选项]

可选的信道连接选项

  • pid:与连接相关的 Erlang 进程 ID

  • connection:信道所属连接的 Erlang 进程 ID

  • name:信道的名称

  • number:信道的序号

  • user:与信道相关的用户名称

  • vhost:与信道相关的 vhost

  • transactional:信道是否处于事务模式

  • confirm:信道是否处于 publisher confirm 模式

  • consumer_count:信道中的消费者的个数

  • messages_unacknowledged:已投递但是还未被 ack 的消息个数

  • messages_uncommitted:已接收但是还未提交事务的消息个数

  • acks_uncommitted:已 ack 收到但是还未提交事务的消息个数

  • messages_unconfirmed:已发送但是还未确认的消息个数。如果信道不处于publisher confirm 模式下,则此值为 0

  • perfetch_count:新消费者的 Qos 个数限制。0 表示无上限

  • global_prefetch_count:整个信道的 Qos 个数限制。0 表示无上限

消费者信息查询

rabbitmqctl list_consumers [-p vhost]

  • 显示:已订阅队列的名称、相关信道的进程标识等信息

服务状态查询

rabbitmqctl status

节点健康检查

rabbitmqctl node_health_check

节点环境变量

rabbitmqctl environment

节点服务器状态报告

rabbitmqctl report > file.txt

队列创建

可以直接在 web 端操作好像,不知道能不能直接在命令行创建

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值