在CentOS系统上部署与配置RabbitMQ消息代理
一、系统环境准备与依赖安装
在CentOS系统上部署RabbitMQ消息队列服务之前,确保系统具备必要的开发工具和库至关重要。您可以通过yum包管理器在线安装以下依赖项:
yum install -y build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
二、Erlang运行时环境安装
RabbitMQ是基于Erlang语言开发的,因此在安装RabbitMQ之前,必须首先安装Erlang运行时环境。请将预先下载的Erlang RPM包(例如erlang-18.3-1.el7.centos.x86_64.rpm)上传到您的服务器(例如存放在/root目录下)。
# 执行Erlang RPM包的安装
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
在安装Erlang时,您可能会遇到因glibc版本不兼容导致的依赖错误。例如,系统提示需要glibc版本2.15或更高,而当前系统可能只提供了2.12。具体的错误信息可能类似下图所示:
要检查当前系统已安装的glibc版本,可以使用以下命令:
strings /lib64/libc.so.6 | grep GLIBC
命令输出通常会列出系统支持的最高GLIBC版本,例如:
如果glibc版本确实过旧,需要进行升级。请注意,手动升级glibc是一个涉及系统底层组件的敏感操作,具有潜在风险,操作前务必做好备份。以下提供了一种针对旧系统版本的升级方案示例(请务必根据您的CentOS版本选择兼容的glibc包,以下示例包名包含el6,可能不完全适用于所有CentOS 7版本,请谨慎操作):
首先,安装用于编译和构建的辅助工具及库:
sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
接下来,下载所需版本的glibc相关RPM包:
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm &
下载完成后,强制安装这些RPM包:
sudo rpm -Uvh *-2.17-55.el6.x86_64.rpm --force --nodeps
安装完毕后,再次执行strings /lib64/libc.so.6 | grep GLIBC命令,确认glibc版本已成功升级:
三、RabbitMQ服务器安装
在Erlang环境准备就绪后,即可安装RabbitMQ服务器。请将预下载的socat和rabbitmq-server RPM包上传到服务器。socat是一个网络工具,RabbitMQ的某些功能可能依赖于它。
# 安装socat工具
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
# 安装RabbitMQ服务器
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
四、启用管理插件与基础配置调整
RabbitMQ提供了一个功能丰富的Web管理界面,方便用户监控和管理。要启用这个界面,需要激活rabbitmq_management插件:
# 启用RabbitMQ管理控制台插件
rabbitmq-plugins enable rabbitmq_management
RabbitMQ的默认配置存储在rabbit.app文件中。您可能需要对其进行修改,例如调整默认用户的访问权限。默认情况下,guest用户只能从localhost进行访问。
# 编辑RabbitMQ的核心配置文件
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
在此文件中,找到loopback_users配置项。如果需要允许guest用户从远程主机访问管理界面(通常不建议在生产环境中使用),您可以将<<"guest">>从列表中移除或注释掉。更推荐的做法是创建新的用户并赋予相应权限。
为了更系统地管理RabbitMQ配置,建议将示例配置文件复制到标准配置路径下进行修改:
cd /usr/share/doc/rabbitmq-server-3.6.5/
cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
五、RabbitMQ服务管理
使用service命令可以轻松管理RabbitMQ服务的生命周期:
# 启动RabbitMQ服务
service rabbitmq-server start
# 停止RabbitMQ服务
service rabbitmq-server stop
# 重启RabbitMQ服务
service rabbitmq-server restart
六、访问Web管理界面
当RabbitMQ服务启动并且管理插件启用后,您可以通过Web浏览器访问管理控制台。默认的访问地址是http://您的服务器IP地址:15672。
登录界面会要求您输入用户名和密码。默认凭据是guest/guest。
成功登录后,您将进入RabbitMQ的管理仪表盘,这表明整个安装和管理控制台的配置都已顺利完成。
七、虚拟主机与用户权限配置
为了实现消息的隔离与权限精细化管理,RabbitMQ引入了虚拟主机(Virtual Host)的概念,并支持对用户角色和权限进行配置。
1. 用户角色介绍与管理
RabbitMQ定义了几种用户角色,每种角色具有不同的管理权限:
- 超级管理员 (administrator):拥有最高权限,可登录管理控制台,查看所有系统信息,并对用户、策略等进行全面管理。
- 监控者 (monitoring):可登录管理控制台,查看RabbitMQ节点的运行状态信息,例如进程数量、内存和磁盘使用情况。
- 策略制定者 (policymaker):可登录管理控制台,负责管理消息策略(policy),但无法查看节点相关的硬件资源信息。
- 普通管理者 (management):仅可登录管理控制台,无法查看节点信息,也无权管理策略。
- 其他 (None):无法登录管理控制台,通常用于应用程序中的消息生产者和消费者。
在管理界面的"Admin"标签页下,您可以管理现有用户或创建新用户。点击"Add a user"可以添加新用户并分配相应的角色。
2. 虚拟主机(Virtual Hosts)配置
虚拟主机在RabbitMQ中扮演着逻辑隔离容器的角色,每个虚拟主机相当于一个独立的RabbitMQ服务器实例。不同的虚拟主机之间,其交换器(exchange)、队列(queue)和消息是完全隔离的,类似于关系数据库中的不同数据库实例。
在"Admin"标签页中,切换到"Virtual Hosts"部分,可以查看和创建新的虚拟主机。通常,虚拟主机的名称会以斜杠/开头。
点击"Add a new virtual host"并输入名称即可完成创建:
3. 设置虚拟主机权限
创建虚拟主机后,需要为特定的用户分配在该虚拟主机上的操作权限。这是实现消息隔离和安全性的关键步骤。
在"Virtual Hosts"列表中,选中您要配置的虚拟主机,然后点击其旁边的"Set permissions"链接。
在权限设置界面,您可以选择一个用户,并为其配置在读(read)、写(write)和配置(configure)操作上的正则表达式权限。例如,配置权限正则表达式.*表示对所有资源拥有权限。