“RabbitMQ:安装部署”的版本间差异
跳到导航
跳到搜索
(→启动) |
|||
(未显示同一用户的23个中间版本) | |||
第4行: | 第4行: | ||
RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 '''Erlang''',再安装 RabbitMQ 比较麻烦,所以这里推荐使用 '''Docker''' 方式部署,一条命令搞定。 | RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 '''Erlang''',再安装 RabbitMQ 比较麻烦,所以这里推荐使用 '''Docker''' 方式部署,一条命令搞定。 | ||
== | == Docker方式部署 == | ||
可以到docker官方镜像仓库找最新版本:'''[https://hub.docker.com/_/rabbitmq https://hub.docker.com/_/rabbitmq]''' | |||
=== 安装 === | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
docker run -d --name rabbitmq -h rabbitmq -p 5672:5672 -p 15672:15672 -v /var/lib/rabbitmq:/var/lib/rabbitmq registry.docker-cn.com/library/rabbitmq:3.7 | |||
</syntaxhighlight> | |||
: 其中: | |||
:# “'''-d'''”:后台运行容器; | |||
:# “'''--name rabbitmq'''”:将容器的名字设为 rabbitmq; | |||
:# “'''-h rabbitmq'''”:将容器的主机名设为 rabbitmq; | |||
:#* 希望 RabbitMQ 消息数据持久化保存到本地磁盘是需要设置主机名,因为 RabbitMQ 保存数据的目录为主机名。 | |||
:# “'''-p 5672:5672'''”:将容器的 5672 端口映射为本地主机的 5672 端口,这样可以通过本地的 5672 端口访问 rabbitmq; | |||
:# “'''-p 15672:15672'''”:同上,容器端口映射到本地端口,15672 用于管理平台。 | |||
:# “'''-v /var/lib/rabbitmq:/var/lib/rabbitmq'''”:将容器的 /var/lib/rabbitmq 目录映射为本地主机的 /var/lib/rabbitmq 目录; | |||
:#* 这样可以将 RabbitMQ 消息数据持久化保存到本地磁盘,即使 RabbitMQ 容器被删除,数据依然还在。 | |||
=== 管理 === | |||
# 关闭 RabbitMQ 容器: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
docker stop rabbitmq | |||
</syntaxhighlight> | |||
# 启动 RabbitMQ 容器: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
docker start rabbitmq | |||
</syntaxhighlight> | |||
== CentOS 安装<ref>参考:[https://www.rabbitmq.com/install-rpm.html https://www.rabbitmq.com/install-rpm.html]</ref> == | |||
两种方法可以在 RPM 发行版上安装 RabbitMQ 的最新版本: | |||
1、'''在线安装''':使用 [https://www.rabbitmq.com/install-rpm.html#cloudsmith Cloudsmith.io] 或 [https://www.rabbitmq.com/install-rpm.html#package-cloud PackageCloud] 上的 Yum 存储库安装包。(强烈建议使用此选项) | |||
2、'''离线安装''':下载软件包并用 rpm 安装。(需要手动安装所有包依赖项) | |||
* RabbitMQ RPM 包需要 '''sudo''' 权限才能安装和管理。在 sudo 不可用的环境中,可以考虑使用通用二进制构建。 | |||
=== 在线安装:使用 Cloudsmith 上的 YUM 库 === | === 在线安装:使用 Cloudsmith 上的 YUM 库 === | ||
---- | ---- | ||
Cloudsmith 提供了带有 RabbitMQ | Cloudsmith 提供了带有 RabbitMQ 包的 Yum 存储库,还可以通过 yum 安装最新的 Erlang 版本。 | ||
==== | ==== 快速安装(脚本) ==== | ||
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】 | |||
使用 Cloudsmith 提供的'''脚本''': | |||
: <syntaxhighlight lang="bash" highlight=""> | : <syntaxhighlight lang="bash" highlight=""> | ||
## Uses a Cloudsmith-provided Yum repository setup script. | ## Uses a Cloudsmith-provided Yum repository setup script. | ||
第22行: | 第52行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== 库文件安装 ==== | |||
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】 | |||
安装步骤: | |||
# Yum | # Yum 将验证其安装的任何包的签名,因此该过程的第一步是'''导入签名密钥''': | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
## primary RabbitMQ signing key | ## primary RabbitMQ signing key | ||
第33行: | 第65行: | ||
rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key' | rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# 为 RabbitMQ 和 Modern Erlang 添加 Yum | # 为 RabbitMQ 和 Modern Erlang '''添加 Yum 存储库''': | ||
# | #*【为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”)】 | ||
# | #*【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】 | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
# In /etc/yum.repos.d/rabbitmq.repo | # In /etc/yum.repos.d/rabbitmq.repo | ||
第136行: | 第168行: | ||
type=rpm-md | type=rpm-md | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# '''用 Yum 安装“Packages”''': | |||
#*【操作根据发行版不同而略有差异,以 CentOS 7 为例】 | |||
【操作根据发行版不同而略有差异,以 CentOS 7 为例】 | ## 更新 Yum 软件包元数据: | ||
##: <syntaxhighlight lang="bash" highlight=""> | |||
# 更新 Yum 软件包元数据: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
yum update -y | yum update -y | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# 然后安装软件包: | ## 然后安装软件包: | ||
#: <syntaxhighlight lang="bash" highlight=""> | ##: <syntaxhighlight lang="bash" highlight=""> | ||
yum install socat logrotate -y | yum install socat logrotate -y | ||
yum install erlang rabbitmq-server -y | yum install erlang rabbitmq-server -y | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。 | ##* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。 | ||
=== 在线安装:使用 PackageCloud 上的 YUM 库 === | === 在线安装:使用 PackageCloud 上的 YUM 库 === | ||
---- | ---- | ||
PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。 | PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。 | ||
使用示例:[https://blog.csdn.net/weixin_40584261/article/details/106826044 CSDN:Centos7安装RabbitMQ最新版3.8.5,史上最简单实用安装步骤] | ==== 快速安装(脚本)<ref>使用示例:[https://blog.csdn.net/weixin_40584261/article/details/106826044 CSDN:Centos7安装RabbitMQ最新版3.8.5,史上最简单实用安装步骤]</ref> ==== | ||
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】 | |||
使用 PackageCloud 提供的'''脚本''': | |||
: <syntaxhighlight lang="bash" highlight=""> | : <syntaxhighlight lang="bash" highlight=""> | ||
## Uses a PackageCloud-provided Yum repository setup script. | ## Uses a PackageCloud-provided Yum repository setup script. | ||
第167行: | 第196行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== 库文件安装 ==== | |||
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】 | |||
安装步骤: | |||
# Yum | # Yum 将验证其安装的任何包的签名,因此该过程的第一步是'''导入签名密钥''': | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
## primary RabbitMQ signing key | ## primary RabbitMQ signing key | ||
第178行: | 第209行: | ||
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# 为 RabbitMQ 和 Modern Erlang 添加 Yum | # 为 RabbitMQ 和 Modern Erlang '''添加 Yum 存储库''': | ||
# | #*【为了使用Yum存储库,必须在 '''/etc/Yum.repos.d/''' 目录下添加一个 '''.repo''' 文件(例如“rabbitmq.repo”)】 | ||
# | #*【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】 | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
# In /etc/yum.repos.d/rabbitmq.repo | # In /etc/yum.repos.d/rabbitmq.repo | ||
第240行: | 第271行: | ||
metadata_expire=300 | metadata_expire=300 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# '''用 Yum 安装“Packages”''': | |||
#* 【操作根据发行版不同而略有差异,以 CentOS 7 为例】 | |||
【操作根据发行版不同而略有差异,以 CentOS 7 为例】 | ## 更新 Yum 软件包元数据: | ||
##: <syntaxhighlight lang="bash" highlight=""> | |||
# 更新 Yum 软件包元数据: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
yum update -y | yum update -y | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# 然后安装软件包: | ## 然后安装软件包: | ||
#: <syntaxhighlight lang="bash" highlight=""> | ##: <syntaxhighlight lang="bash" highlight=""> | ||
## install these dependencies from standard OS repositories | ## install these dependencies from standard OS repositories | ||
yum install socat logrotate -y | yum install socat logrotate -y | ||
第255行: | 第284行: | ||
yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y | yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。 | ##* logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。 | ||
=== 离线安装 === | === 离线安装 === | ||
---- | ---- | ||
离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。 | 离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。 | ||
注意: | 注意: | ||
* RabbitMQ 依赖于 | * RabbitMQ 依赖于 '''Erlang''',而 Erlang 内存管理依赖 '''Socat''',因此要首先安装 Erlang 与 socat; | ||
* Erlang 与 RabbitMQ 版本需要兼容,可以在“'''[https://www.rabbitmq.com/which-erlang.html https://www.rabbitmq.com/which-erlang.html]'''”查看。 | * Erlang 与 RabbitMQ 版本需要兼容,可以在“'''[https://www.rabbitmq.com/which-erlang.html https://www.rabbitmq.com/which-erlang.html]'''”查看。 | ||
* 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 '''wget''' 工具直接下载: | * 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 '''wget''' 工具直接下载: | ||
*# rabbitmq- | *# '''rabbitmq-server包'''下载地址:“'''[https://github.com/rabbitmq/rabbitmq-server/releases https://github.com/rabbitmq/rabbitmq-server/releases]'''” | ||
*# | *# '''erlang包'''下载地址:“'''[https://github.com/rabbitmq/erlang-rpm/releases https://github.com/rabbitmq/erlang-rpm/releases]'''” | ||
*# | *# '''socat包'''下载地址:“'''[https://pkgs.org/download/socat https://pkgs.org/download/socat]'''” 【socat 使用 yum 安装最新版本即可】 | ||
* 对于基于RPM的发行版,现代 Erlang 提供了三种替代来源:(Erlang 在默认的 yum 存储库中不可用) | |||
*# '''RabbitMQ团队''':只提供运行 RabbitMQ 所需的组件,官方称'''零依赖项''',容易安装。【如果Erlang只是用来提供运行RabbitMQ的,推荐使用】 | |||
*# '''Erlang官方''':通常是相当最新的,并且涉及潜在的过多依赖关系列表的安装。【如果还需要Erlang做相关开发或运行环境,可选择使用】 | |||
*# '''EPEL源''':这些版本通常已经过时,不能用于运行最新的 RabbitMQ 版本。【不推荐】 | |||
*#* P.S.:如果要使用 EPEL 存储库,需要通过 yum 安装先安装 EPEL 存储库: | |||
*#*: <syntaxhighlight lang="bash" highlight=""> | |||
# 先安装epel存储库 | |||
yum -y install epel-release | |||
# 再安装 Erlang、socat | |||
yum -y install erlang socat | |||
</syntaxhighlight> | |||
【参照 Erlang 与 RabbitMQ 版本要求,以“erlang-23.3.1-1.el7.x86_64.rpm”与“rabbitmq-server-3.8.14-1.el7.noarch.rpm”为例】 | |||
步骤如下: | |||
# 安装 Erlang: | # 安装 Erlang: | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.1/erlang-23.3.1-1.el7.x86_64.rpm | |||
rpm -ivh erlang-23.3.1-1.el7.x86_64.rpm | |||
</syntaxhighlight> | </syntaxhighlight> | ||
#: 查看 Erlang 版本: | #: 查看 Erlang 版本: | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
erl -version | erl -version | ||
</syntaxhighlight> | |||
# 安装 Socat: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm | |||
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm | |||
# 或者: | |||
yum install socat | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# 安装 RabbitMQ: | # 安装 RabbitMQ: | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
rpm - | # 首先导入密钥 | ||
rpm -import https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm.asc | |||
# 下载、安装 | |||
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm | |||
rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == 升级 == | ||
如果是 rabbitmq-server 的版本升级跨越稍微比较大,那么erlang版本就可能也需要升级。 | |||
【升级 rabbitmq-sever 服务前,先停止 rabbitmq 服务和升级 erlang 版本。】 | |||
相关命令: | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
rabbitmqctl stop | |||
# | # 升级erlang版本 | ||
rpm -Uvh erlang-23.3.1-1.el7.x86_64.rpm | |||
rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm | |||
</syntaxhighlight> | </syntaxhighlight> | ||
:* 安装服务的命令参数是 '''-i''' 即 install,而升级服务的命令参数为 '''-U''' 即 upgrade。 | |||
== 启动 == | |||
参见:<big>'''[[RabbitMQ:命令行、管理平台#启动命令]]'''</big> | |||
== 配置 == | |||
=== 查看日志 === | |||
RabbitMQ 日志文件位于'''/var/log/rabbitmq'''目录下: | |||
: [[File:RabbitMQ:查看日志.png|600px]] | |||
* RabbitMQ启动时,会在'''/etc/rabbitmq'''下寻找'''rabbitmq.config'''文件。 | |||
*: 可以自己创建这个文件,或下载 RabbitMQ 的配置文件模板然后按照需求更改; | |||
=== 启用管理平台插件 === | === 启用管理平台插件 === | ||
<syntaxhighlight lang="bash" highlight=""> | RabbitMQ 安装后默认是不启动管理模块的,所以需要配置将管理模块启动: | ||
# 查看安装的插件: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
rabbitmq-plugins list | |||
</syntaxhighlight> | |||
# 启用插件: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
rabbitmqctl start_app | |||
rabbitmq-plugins enable rabbitmq_management | rabbitmq-plugins enable rabbitmq_management | ||
rabbitmqctl stop | |||
#重启rabbitmq | |||
systemctl restart rabbitmq | |||
</syntaxhighlight> | </syntaxhighlight> | ||
* 访问 '''[http://localhost:15672 http://localhost:15672]''' 就能进入管理平台了(默认账号和密码:guest / guest)。 | |||
=== 配置防火墙端口 === | |||
防火墙允许远程访问端口: | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
firewall-cmd --zone=public --add-port=15672/tcp --permanent | |||
firewall-cmd --zone=public --add-port=5672/tcp --permanent | |||
firewall-cmd --reload | |||
</syntaxhighlight> | |||
* 访问 '''[http://xxxx.xxxx.xxxx.xxxx:15672 http://xxxx.xxxx.xxxx.xxxx:15672]''' 就能进入管理平台了(默认账号和密码:guest / guest)。 | |||
=== 开启用户远程访问 === | |||
默认情况下,RabbitMQ 的默认的guest用户只允许本机访问。 | |||
即:如果使用 guest 登录:[http://xxxx.xxxx.xxxx.xxxx:15672 http://xxxx.xxxx.xxxx.xxxx:15672] 会提示“login failed”。 | |||
开启远程访问: | |||
# | # 拷贝 rabbitmq 默认配置文件: | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbit/rabbitmq.config | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # 把 rabbitmq.config 文件里的 “{loopback_users, []}” 打开,重启服务即可: | ||
#: <syntaxhighlight lang="bash" highlight=""> | #: <syntaxhighlight lang="bash" highlight=""> | ||
vim /etc/rabbitmq/rabbitmq.config | |||
... | |||
... | |||
{loopback_users, []} | |||
... | |||
... | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # (重启服务器) | ||
: 如此,新添加的用户,直接就可以从远程访问。 | |||
如果想让指定用户只能本地访问,可以将其用户名添加到上面的列表。如只允许 admin 用户本机访问: | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
vim /etc/rabbitmq/rabbitmq.config | |||
... | |||
... | |||
{loopback_users, ["admin"]} | |||
... | |||
... | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == 用户管理 == | ||
guest 默认vhost为“/”,具有“/”上的全部权限。 | |||
用户管理相关命令: | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
# 添加用户 | |||
rabbitmqctl add_user username password | |||
# 设置用户权限:默认vhost的所有权限(/ 表示默认vhost) | |||
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" | |||
# 设置用户角色:管理员 | |||
rabbitmqctl set_user_tags username administrator | |||
# 查看用户列表 | |||
rabbitmqctl list_users | |||
# 修改用户密码 | |||
rabbitmqctl change_password username newpassword | |||
# 删除用户 | |||
rabbitmqctl delete_user username | |||
# | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | === 用户角色 === | ||
大致可分为五类: | |||
# '''超级管理员(administrator)''':可登陆管理控制台(启用 management plugin 的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。 | |||
# '''监控者(monitoring)''':可登陆管理控制台(启用 management plugin 的情况下),同时可以查看 rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。 | |||
# '''策略制定者(policymaker)''':可登陆管理控制台(启用 management plugin 的情况下),同时可以对 policy 进行管理;但无法查看节点的相关信息。 | |||
# '''普通管理者(management)''':仅可登陆管理控制台(启用 management plugin 的情况下),无法看到节点信息,也无法对策略进行管理。 | |||
# '''其他''':无法登陆管理控制台,通常就是普通的'''生产者'''和'''消费者'''。 | |||
=== 用户权限 === | |||
指的是用户对 '''exchange''','''queue''' 的操作权限。包括: | |||
# 配置权限:会影响到 exchange,queue 的声明和删除; | |||
# 读写权限:影响到从 queue 里取消息,向 exchange 发送消息,以及 queue 和 exchange 的绑定(bind)操作。 | |||
== | 相关命令: | ||
: <syntaxhighlight lang="bash" highlight=""> | |||
# 设置用户权限 | |||
rabbitmqctl set_permissions -p VHostPath username ConfP WriteP ReadP | |||
# 查看(指定hostpath)所有用户的权限信息 | |||
rabbitmqctl list_permissions [-p VHostPath] | |||
# 查看指定用户的权限信息 | |||
rabbitmqctl list_user_permissions username | |||
# 清除用户的权限信息 | |||
rabbitmqctl clear_permissions [-p VHostPath] username | |||
</syntaxhighlight> | |||
== | == 参考 == | ||
<references/> |
2022年12月22日 (四) 09:45的最新版本
关于
RabbitMQ 快速搭建开发环境,因为 RabbitMQ 使用 Erlang 开发,常规方式安装需要先安装 Erlang,再安装 RabbitMQ 比较麻烦,所以这里推荐使用 Docker 方式部署,一条命令搞定。
Docker方式部署
可以到docker官方镜像仓库找最新版本:https://hub.docker.com/_/rabbitmq
安装
docker run -d --name rabbitmq -h rabbitmq -p 5672:5672 -p 15672:15672 -v /var/lib/rabbitmq:/var/lib/rabbitmq registry.docker-cn.com/library/rabbitmq:3.7
- 其中:
- “-d”:后台运行容器;
- “--name rabbitmq”:将容器的名字设为 rabbitmq;
- “-h rabbitmq”:将容器的主机名设为 rabbitmq;
- 希望 RabbitMQ 消息数据持久化保存到本地磁盘是需要设置主机名,因为 RabbitMQ 保存数据的目录为主机名。
- “-p 5672:5672”:将容器的 5672 端口映射为本地主机的 5672 端口,这样可以通过本地的 5672 端口访问 rabbitmq;
- “-p 15672:15672”:同上,容器端口映射到本地端口,15672 用于管理平台。
- “-v /var/lib/rabbitmq:/var/lib/rabbitmq”:将容器的 /var/lib/rabbitmq 目录映射为本地主机的 /var/lib/rabbitmq 目录;
- 这样可以将 RabbitMQ 消息数据持久化保存到本地磁盘,即使 RabbitMQ 容器被删除,数据依然还在。
管理
- 关闭 RabbitMQ 容器:
docker stop rabbitmq
- 启动 RabbitMQ 容器:
docker start rabbitmq
CentOS 安装[1]
两种方法可以在 RPM 发行版上安装 RabbitMQ 的最新版本: 1、在线安装:使用 Cloudsmith.io 或 PackageCloud 上的 Yum 存储库安装包。(强烈建议使用此选项) 2、离线安装:下载软件包并用 rpm 安装。(需要手动安装所有包依赖项)
- RabbitMQ RPM 包需要 sudo 权限才能安装和管理。在 sudo 不可用的环境中,可以考虑使用通用二进制构建。
在线安装:使用 Cloudsmith 上的 YUM 库
Cloudsmith 提供了带有 RabbitMQ 包的 Yum 存储库,还可以通过 yum 安装最新的 Erlang 版本。
快速安装(脚本)
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】
使用 Cloudsmith 提供的脚本:
## Uses a Cloudsmith-provided Yum repository setup script. ## Always verify what is downloaded before piping it to a privileged shell! curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.rpm.sh' | sudo -E bash
库文件安装
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】
安装步骤:
- Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥:
## primary RabbitMQ signing key rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc ## modern Erlang repository rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key' ## RabbitMQ server repository rpm --import 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key'
- 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库:
- 【为了使用Yum存储库,必须在 /etc/Yum.repos.d/ 目录下添加一个 .repo 文件(例如“rabbitmq.repo”)】
- 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
# In /etc/yum.repos.d/rabbitmq.repo [rabbitmq_erlang] name=rabbitmq_erlang baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/$basearch repo_gpgcheck=1 enabled=1 # Cloudsmith's repository key and RabbitMQ package signing key gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc gpgcheck=1 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md [rabbitmq_erlang-noarch] name=rabbitmq_erlang-noarch baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/noarch repo_gpgcheck=1 enabled=1 # Cloudsmith's repository key and RabbitMQ package signing key gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc gpgcheck=1 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md [rabbitmq_erlang-source] name=rabbitmq_erlang-source baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/7/SRPMS repo_gpgcheck=1 enabled=1 gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key gpgcheck=0 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md ## ## RabbitMQ server ## [rabbitmq-server] name=rabbitmq_server baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/$basearch repo_gpgcheck=1 enabled=1 # Cloudsmith's repository key and RabbitMQ package signing key gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc gpgcheck=1 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md [rabbitmq_server-noarch] name=rabbitmq_server-noarch baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/noarch repo_gpgcheck=1 enabled=1 # Cloudsmith's repository key and RabbitMQ package signing key gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc gpgcheck=1 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md [rabbitmq_server-source] name=rabbitmq_server-source baseurl=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/7/SRPMS repo_gpgcheck=1 enabled=1 gpgkey=https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key gpgcheck=0 sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 pkg_gpgcheck=1 autorefresh=1 type=rpm-md
- 用 Yum 安装“Packages”:
- 【操作根据发行版不同而略有差异,以 CentOS 7 为例】
- 更新 Yum 软件包元数据:
yum update -y
- 然后安装软件包:
yum install socat logrotate -y yum install erlang rabbitmq-server -y
- logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。
在线安装:使用 PackageCloud 上的 YUM 库
PackageCloud 提供了包含 RabbitMQ 包的Yum存储库,也可以用于通过 yum 安装最新的 Erlang 版本。
快速安装(脚本)[2]
【这不是必须的,但是可以考虑使用,因为它将生成的脚本从公共互联网传输到特定的shell】
使用 PackageCloud 提供的脚本:
## Uses a PackageCloud-provided Yum repository setup script. ## Always verify what is downloaded before piping it to a privileged shell! curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
库文件安装
以下步骤展示了一种更传统的安装方式:【上述脚本可以替代以下内容】
安装步骤:
- Yum 将验证其安装的任何包的签名,因此该过程的第一步是导入签名密钥:
## primary RabbitMQ signing key rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc ## modern Erlang repository rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey ## RabbitMQ server repository rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
- 为 RabbitMQ 和 Modern Erlang 添加 Yum 存储库:
- 【为了使用Yum存储库,必须在 /etc/Yum.repos.d/ 目录下添加一个 .repo 文件(例如“rabbitmq.repo”)】
- 【.repo 文件根据发行版不同而略有差异,以 CentOS 7 为例】
# In /etc/yum.repos.d/rabbitmq.repo ## ## Zero dependency Erlang ## [rabbitmq_erlang] name=rabbitmq_erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_erlang-source] name=rabbitmq_erlang-source baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 ## ## RabbitMQ server ## [rabbitmq_server] name=rabbitmq_server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_server-source] name=rabbitmq_server-source baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
- 用 Yum 安装“Packages”:
- 【操作根据发行版不同而略有差异,以 CentOS 7 为例】
- 更新 Yum 软件包元数据:
yum update -y
- 然后安装软件包:
## install these dependencies from standard OS repositories yum install socat logrotate -y yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y
- logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。
离线安装
离线安装的最大问题就是需要自行解决依赖项,以及选择兼容的版本。
注意:
- RabbitMQ 依赖于 Erlang,而 Erlang 内存管理依赖 Socat,因此要首先安装 Erlang 与 socat;
- Erlang 与 RabbitMQ 版本需要兼容,可以在“https://www.rabbitmq.com/which-erlang.html”查看。
- 离线安装的包,可以自行下载然后上传到服务器,也可以通过服务器的 wget 工具直接下载:
- rabbitmq-server包下载地址:“https://github.com/rabbitmq/rabbitmq-server/releases”
- erlang包下载地址:“https://github.com/rabbitmq/erlang-rpm/releases”
- socat包下载地址:“https://pkgs.org/download/socat” 【socat 使用 yum 安装最新版本即可】
- 对于基于RPM的发行版,现代 Erlang 提供了三种替代来源:(Erlang 在默认的 yum 存储库中不可用)
- RabbitMQ团队:只提供运行 RabbitMQ 所需的组件,官方称零依赖项,容易安装。【如果Erlang只是用来提供运行RabbitMQ的,推荐使用】
- Erlang官方:通常是相当最新的,并且涉及潜在的过多依赖关系列表的安装。【如果还需要Erlang做相关开发或运行环境,可选择使用】
- EPEL源:这些版本通常已经过时,不能用于运行最新的 RabbitMQ 版本。【不推荐】
- P.S.:如果要使用 EPEL 存储库,需要通过 yum 安装先安装 EPEL 存储库:
# 先安装epel存储库 yum -y install epel-release # 再安装 Erlang、socat yum -y install erlang socat
- P.S.:如果要使用 EPEL 存储库,需要通过 yum 安装先安装 EPEL 存储库:
【参照 Erlang 与 RabbitMQ 版本要求,以“erlang-23.3.1-1.el7.x86_64.rpm”与“rabbitmq-server-3.8.14-1.el7.noarch.rpm”为例】
步骤如下:
- 安装 Erlang:
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.1/erlang-23.3.1-1.el7.x86_64.rpm rpm -ivh erlang-23.3.1-1.el7.x86_64.rpm
- 查看 Erlang 版本:
erl -version
- 安装 Socat:
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm # 或者: yum install socat
- 安装 RabbitMQ:
# 首先导入密钥 rpm -import https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm.asc # 下载、安装 wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el7.noarch.rpm rpm -ivh rabbitmq-server-3.8.14-1.el7.noarch.rpm
升级
如果是 rabbitmq-server 的版本升级跨越稍微比较大,那么erlang版本就可能也需要升级。 【升级 rabbitmq-sever 服务前,先停止 rabbitmq 服务和升级 erlang 版本。】
相关命令:
rabbitmqctl stop # 升级erlang版本 rpm -Uvh erlang-23.3.1-1.el7.x86_64.rpm rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
- 安装服务的命令参数是 -i 即 install,而升级服务的命令参数为 -U 即 upgrade。
启动
配置
查看日志
RabbitMQ 日志文件位于/var/log/rabbitmq目录下:
- RabbitMQ启动时,会在/etc/rabbitmq下寻找rabbitmq.config文件。
- 可以自己创建这个文件,或下载 RabbitMQ 的配置文件模板然后按照需求更改;
启用管理平台插件
RabbitMQ 安装后默认是不启动管理模块的,所以需要配置将管理模块启动:
- 查看安装的插件:
rabbitmq-plugins list
- 启用插件:
rabbitmqctl start_app rabbitmq-plugins enable rabbitmq_management rabbitmqctl stop #重启rabbitmq systemctl restart rabbitmq
- 访问 http://localhost:15672 就能进入管理平台了(默认账号和密码:guest / guest)。
配置防火墙端口
防火墙允许远程访问端口:
firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --reload
- 访问 http://xxxx.xxxx.xxxx.xxxx:15672 就能进入管理平台了(默认账号和密码:guest / guest)。
开启用户远程访问
默认情况下,RabbitMQ 的默认的guest用户只允许本机访问。 即:如果使用 guest 登录:http://xxxx.xxxx.xxxx.xxxx:15672 会提示“login failed”。
开启远程访问:
- 拷贝 rabbitmq 默认配置文件:
cp /usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example /etc/rabbit/rabbitmq.config
- 把 rabbitmq.config 文件里的 “{loopback_users, []}” 打开,重启服务即可:
vim /etc/rabbitmq/rabbitmq.config ... ... {loopback_users, []} ... ...
- (重启服务器)
- 如此,新添加的用户,直接就可以从远程访问。
如果想让指定用户只能本地访问,可以将其用户名添加到上面的列表。如只允许 admin 用户本机访问:
vim /etc/rabbitmq/rabbitmq.config ... ... {loopback_users, ["admin"]} ... ...
用户管理
guest 默认vhost为“/”,具有“/”上的全部权限。
用户管理相关命令:
# 添加用户 rabbitmqctl add_user username password # 设置用户权限:默认vhost的所有权限(/ 表示默认vhost) rabbitmqctl set_permissions -p / username ".*" ".*" ".*" # 设置用户角色:管理员 rabbitmqctl set_user_tags username administrator # 查看用户列表 rabbitmqctl list_users # 修改用户密码 rabbitmqctl change_password username newpassword # 删除用户 rabbitmqctl delete_user username
用户角色
大致可分为五类:
- 超级管理员(administrator):可登陆管理控制台(启用 management plugin 的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
- 监控者(monitoring):可登陆管理控制台(启用 management plugin 的情况下),同时可以查看 rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。
- 策略制定者(policymaker):可登陆管理控制台(启用 management plugin 的情况下),同时可以对 policy 进行管理;但无法查看节点的相关信息。
- 普通管理者(management):仅可登陆管理控制台(启用 management plugin 的情况下),无法看到节点信息,也无法对策略进行管理。
- 其他:无法登陆管理控制台,通常就是普通的生产者和消费者。
用户权限
指的是用户对 exchange,queue 的操作权限。包括:
- 配置权限:会影响到 exchange,queue 的声明和删除;
- 读写权限:影响到从 queue 里取消息,向 exchange 发送消息,以及 queue 和 exchange 的绑定(bind)操作。
相关命令:
# 设置用户权限 rabbitmqctl set_permissions -p VHostPath username ConfP WriteP ReadP # 查看(指定hostpath)所有用户的权限信息 rabbitmqctl list_permissions [-p VHostPath] # 查看指定用户的权限信息 rabbitmqctl list_user_permissions username # 清除用户的权限信息 rabbitmqctl clear_permissions [-p VHostPath] username