找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4988

积分

0

好友

696

主题
发表于 11 小时前 | 查看: 5| 回复: 0

RabbitMQ 图标与 Logo

RabbitMQ 单机安装

如果你想在公有云上用 yum,屏蔽掉 tail.repo 文件就行。首先,把 /etc/yum.repos.d/tail.repo 这个配置文件备份一下。

mv /etc/yum.repos.d/tail.repo /etc/yum.repos.d/tail.repo.bak

接着安装必要的依赖环境。

yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel -y

RabbitMQ 是基于 Erlang 语言写的,所以得先装 Erlang。我们通过 RPM 包来安装 erlang 和 rabbitmq。

yum -y install erlang-23.3.4.11-1.el7.x86_64.rpm
yum -y install rabbitmq-server-3.8.34-1.el8.noarch.rpm

现在,把 enabled_pluginsrabbitmq.configrabbitmq-env.conf 这几个配置文件拷贝到 /etc/rabbitmq 目录下。

cp enabled_plugins rabbitmq.config rabbitmq-env.conf /etc/rabbitmq

enabled_plugins 文件是干嘛的?它主要用来控制 RabbitMQ 服务器启动时加载哪些插件。看看它的内容:

[rabbitmq_management,rabbitmq_shovel,rabbitmq_shovel_management].
  • rabbitmq_management:这个插件提供了一个基于 Web 的管理界面,让你能监控和管理 RabbitMQ 服务器。如果这里不配或者不启用,你就没法用浏览器访问管理后台了。
  • rabbitmq_shovel:这个插件能在不同的 RabbitMQ 服务器或者队列之间自动转发消息。需要跨节点传消息就得靠它。
  • rabbitmq_shovel_management:顾名思义,它是用来管理上面那个“消息铲子(Shovel)”的。在 RabbitMQ 里,Shovel 就是一个在不同节点或队列之间可靠转发消息的工具。这个插件在 Web 管理界面上(前提是启用了 rabbitmq_management)提供了配置和监控 Shovel 的图形化界面。

启用 rabbitmq_shovel_management 插件有什么好处?
首先,它能让你动态配置消息转发规则。比如你可以随时创建、修改或删除一个 Shovel,把消息从源队列转到目标队列。这种灵活性在负载均衡或者故障转移时特别有用,能让你快速调整消息流向。
其次,它提供了可视化管理。你可以在 Web 管理界面上清楚地看到每个 Shovel 的运行状态、转发了多少消息,方便你监控效率、排查问题,比如消息堵塞或者丢失。
系统可靠性角度看,这个插件能增强系统的故障转移能力。当集群里某个节点或队列挂了,你可以快速配置 Shovel 把消息转到备份队列,确保业务不中断。它还能用于数据整合与分发,在大企业里,不同部门的独立 RabbitMQ 队列需要共享消息时,用这个插件就能方便地实现跨部门消息转发。

再看看 rabbitmq-env.conf 文件的内容:

RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
  • RABBITMQ_CONFIG_FILE:指定 RabbitMQ 主配置文件的路径。RabbitMQ 允许通过外部文件进行更详细的配置,比如队列、交换器参数、用户权限等等。启动时会加载这个文件。
  • RABBITMQ_MNESIA_BASE:指定 RabbitMQ 内置的 Mnesia 数据库存储路径。队列元数据、交换器信息、用户权限这些内部数据都存在这里。
  • RABBITMQ_LOG_BASE:指定日志文件的存储目录。RabbitMQ 会把运行状态、错误信息等都记在这里的日志文件里。

按配置创建好数据目录和日志目录,并修改文件夹的属主为 rabbitmq 用户。

mkdir -p /data/rabbitmq/data
mkdir -p /data/rabbitmq/log
cd /data
chown -R rabbitmq:rabbitmq rabbitmq/

现在可以启动 RabbitMQ 服务了。

systemctl start rabbitmq-server

启动后,我们得改一下默认的用户信息,提升安全性。

rabbitmqctl list_users
rabbitmqctl list_permissions
rabbitmqctl delete_user guest
rabbitmqctl add_user admin 密码
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions admin ".*" ".*" ".*"

简单解释一下这些命令:

  • rabbitmqctl list_users:列出所有用户。
  • rabbitmqctl list_permissions:查看各用户的权限。
  • rabbitmqctl delete_user guest:删除默认的 guest 用户,生产环境强烈建议这么做。
  • rabbitmqctl add_user admin passwd:创建一个新用户,比如叫 admin,并设置密码。
  • rabbitmqctl set_user_tags admin administrator:给 admin 用户打上 administrator 标签,赋予管理员权限。
  • rabbitmqctl set_permissions admin ".*" ".*" ".*":给 admin 用户配置所有资源的全部权限(配置、写入、读取)。这里的 ".*" 是通配符。

修改完用户配置后,重启一下服务。

systemctl restart rabbitmq-server

设置开机自启,并启用我们需要的插件。

systemctl enable rabbitmq-server
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management

最后检查一下服务是否正常。打开浏览器,访问 http://你的服务器IP:15672,用上面设置的 admin 用户和密码登录即可。

RabbitMQ 集群安装

搭建集群前,至少准备两台或更多的 Linux 服务器,确保它们网络互通、时间同步。

首先,在每台服务器上编辑 /etc/hosts 文件,把集群所有节点的 IP 和主机名加进去,这样节点之间才能通过主机名相互识别。

192.168.1.100 rabbitmq-node1
192.168.1.101 rabbitmq-node2

然后在每台服务器上安装 erlang 和 rabbitmq,步骤和单机一样。

yum -y install erlang-23.3.4.11-1.el7.x86_64.rpm
yum -y install rabbitmq-server-3.8.34-1.el8.noarch.rpm

配置 Erlang Cookie

集群节点间通信需要一个相同的“密钥”,就是 Erlang Cookie。

  1. 获取 Cookie:在其中一台服务器(比如 rabbitmq-node1)上,查看隐藏文件 /var/lib/rabbitmq/.erlang.cookie 的内容(用 ls -alh 命令),并把它复制到 /root/.erlang.cookie
  2. 同步 Cookie:把 rabbitmq-node1 上的这个 Cookie 文件内容,复制到其他所有节点的相同路径下。可以用 scp 命令,但复制前记得先停止其他节点的 RabbitMQ 服务。
scp /root/.erlang.cookie root@rabbitmq-node2:/root/.erlang.cookie

组建集群

  1. 先启动第一个节点(rabbitmq-node1)的服务。
    systemctl start rabbitmq-server
  2. 将其他节点(如 rabbitmq-node2)加入集群。在要加入的节点(rabbitmq-node2)上执行以下命令:
    sudo rabbitmqctl stop_app
    sudo rabbitmqctl reset
    sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1 # 注意这里的主机名是第一个节点
    sudo rabbitmqctl start_app

验证集群状态
在任意节点上执行下面命令,查看集群状态,确认所有节点都已成功加入。一个稳定可靠的消息中间件集群是分布式系统的基础。

sudo rabbitmqctl cluster_status

配置镜像队列(可选但推荐)
为了提高集群的可用性,防止单个节点故障导致队列消息丢失,可以配置镜像队列,让队列中的消息在多个节点上都有副本。执行以下命令可以设置一个策略,让所有队列都镜像到集群中的所有节点。

sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

接下来的步骤和单机类似:修改用户信息、重启服务、设置开机自启、启用插件。

# 修改用户信息 (在任意一个节点操作即可,集群内会同步)
rabbitmqctl delete_user guest
rabbitmqctl add_user admin 密码
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions admin ".*" ".*" ".*"

# 重启并设置自启
systemctl restart rabbitmq-server
systemctl enable rabbitmq-server

# 启用插件 (需要在每个节点都执行,或者通过策略同步)
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management

最后,通过浏览器访问任意集群节点的 IP:15672 端口,用设置好的账号密码登录管理界面,检查集群状态是否正常。

希望这份详细的安装指南能帮助你顺利搭建 RabbitMQ 环境。如果你在安装过程中遇到其他问题,或者想了解更多关于消息队列和分布式系统的实战经验,欢迎来 云栈社区 和我们一起交流探讨。




上一篇:普通人副业指南:从线上自媒体到线下摆摊的7个靠谱方向
下一篇:Linux修改密码的3种命令行方法与安全实践指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 17:25 , Processed in 0.578163 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表