最近在学习SpringCloud,发现其中的消息总线是依靠消息中间件实现的,加之公司也有在使用RabbitMQ,所以就想从零开始,从官网逐步学习一下RabbitMQ。下面的安装教程是我从官网一步一步翻译、实践过来的,如有表达不到位,还请多多指教!RabbitMQ官方安装教程
1.1. 用户权限
使用rpm包安装,要求我们拥有sudo权限,如果没有sudo权限的话,请参考官网如何使用源码进行安装。
1.2. 安装依赖环境Erlang
方法一:
安装erlang-rpm包,该包经过RabbitMQ官方处理,去掉了一些无用的依赖,只保存运行RabbitMQ所需要的Erlang模块。
方法二:
使用Erlang Solutions源进行安装
# 下载rpm包
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
# 从erlang-solutions中更新该包,并将erlang_solutions.repo添加到/etc/yum.repos.d
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
# 安装
yum install erlang
----------------------------------------------------------------
该包还需依赖到epel源,请确保已有该源,若没有则可通过以下方式安装:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist # 查看安装是否成功
由于Erlang Solutions会进行不断地更新,且RabbitMQ对Erlang的版本有一定的要求(官方版本要求对应表)。所以官方建议我们禁止Erlang版本的自动更新。方法如下:参考如何禁止某个软件包的自动升级
# 安装yum-versionlock
yum install yum-plugin-versionlock
# 禁止Erlang自动更新
yum versionlock erlang
注:默认情况下,yum似乎是不会自动更新软件的,除非安装了yum-cron这个软件或者自己写了某些自动更新脚本。如果是前者的话,我们也可以 cd /etc/yum 目录下,将yum-cron.conf中的download_updates = yes 改为 no。
方法三:
使用EPEL("Extra Packages for Enterprise Linux")进行安装,但该方式安装到的包可能不是最新版的,所以在安装前请自行确认好版本号是否适合。
yum install erlang
1.3. 安装RabbitMQ Server
从官网下载rpm包并上传到服务器上。官方下载链接
# 导入签名
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
# 或
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
# 安装
yum install rabbitmq-server-3.7.7-1.el7.noarch.rpm
#创建erlang.repo库
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
#安装
yum install erlang
#创建rabbitmq-server.repo库
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
#安装
yum install rabbitmq-server
这种方式虽然会简单点,但我尝试过,发现只有才能安装成功,所以不太推荐大家使用这种方法。
# 设置开启启动
chkconfig rabbitmq-server on
# 启动服务
service rabbitmq-server start
#停止服务
service rabbitmq-server stop
4.1 找到配置文件
启动RabbitMQ后,会在 /var/log/rabbitmq 目录下生成运行日志,在日志的最上方,我们可以看到配置文件的信息:
然而,发现刚开始的时候并没有任何配置文件。只好照着官方的介绍,到 /usr/share/doc/rabbitmq-server-3.7.7/ 目录下复制一份模板到 /etc/rabbitmq 目录下进行修改
cd /usr/share/doc/rabbitmq-server-3.7.7/
cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
这里值得提一下,从3.7.0开始,rabbitmq的配置文件引入了一个新的配置文件 rabbitmq.conf(rabbitmq.conf配置模板),该文件使用 key= value的格式进行配置,使配置文件看起来更加简洁易懂。当两个配置文件都存在的时候,rabbitmq只会读取旧版的配置文件。另外,官方还提到在 /usr/share/doc/rabbitmq-server-3.7.7/ 目录下,还有一个名为 advanced.config.example 的配置文件模板,用来配置rabbitmq的一些高级属性,但是我并没有找到,后面发现他已经整合到 rabbitmq.conf.example的文件末尾了。
虽然新版配置文件很简洁,但在配置LDAP Support时需要比较复杂的数据结构,所以我们将该配置放在advanced.config配置。rabbitmq在启动的时候能同时加载这两个配置文件文件。
4.2 开启管理后台
rabbitmq自带了管理后台插件,只要开启这个插件,就可以通过浏览器查看rabbitmq的信息以及管理它。
rabbitmq-plugins enable rabbitmq_management
# 开放端口
firewall-cmd --add-port=15672/tcp --permanent
firewall-cmd --reload
浏览器访问 http://ip:15672 ,进入如下页面就证明插件启动成功了。
4.3 配置用户权限
rabbitmq 默认会帮我们创建一个guest用户,密码也是guest。因此为了安全,建议删除该用户或修改密码。该用户拥有所有的权限的,但默认不能通过远程访问,只能通过localhost访问。为了能远程访问rabbitmq,我们可以取消guest用户的本地访问限制:
# 新版配置文件 rabbitmq.conf 打开以下注释
loopback_users.guest = false
# 旧版配置文件 rabbitmq.config 打开以下注释,并记得去掉后面的逗号
{loopback_users, []},
或者添加一个新的用户:
# 添加用户
rabbitmqctl add_user 用户名 密码
# 赋予用户管理员角色
rabbitmqctl set_user_tags 用户 administrator
在使用rabbitmqctl 命令的时候,我遇到了下面一个大坑,希望你们遇到的时候能顺利点:
Error: unable to perform an operation on node 'rabbit@yky'. Please see diagnostics information and suggestions below.
Most common reasons for this are:
* Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
* CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
* Target node is not running
In addition to the diagnostics info below:
* See the CLI, clustering and networking guides on http://rabbitmq.com/documentation.html to learn more
* Consult server logs on node rabbit@yky
DIAGNOSTICS
===========
attempted to contact: [rabbit@yky]
rabbit@yky:
* connected to epmd (port 4369) on yky
* epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic
* can't establish TCP connection to the target node, reason: timeout (timed out)
* suggestion: check if host 'yky' resolves, is reachable and ports 25672, 4369 are not blocked by firewall
Current node details:
* node name: rabbitmqcli12@yky
* effective user's home directory: /var/lib/rabbitmq
* Erlang cookie hash: xy7BSDdfGOwsW5CEeaA/QA==
在网上找了很久,遇到该问题的几乎都是window上.erlang.config不一致的问题。但我通过 find / -name '*.erlang.config' 全局搜索,发现该文件只有在/var/lib/rabbitmq 目录出现过,根本不存就在不一致的问题。到后来才发现是我的主机名yky没有映射好。
因此解决方法就是将主机名加入到 /etc/hosts 文件中:
4.4 修改rabbitmq打开文件数量
使用上一步配置的用户登录进管理后台,可知rabbitmq默认的文件打开数是1024,这对消息中间件来说太低了。官方建议我们在正式环境至少配置65536,而在开发环境中配置到4096。
修改方法:
4.4.1 官方方法:
# 打开limits.conf
vim /etc/systemd/system/rabbitmq-server.service.d/limits.conf
# 在Service 下添加 LimitNOFILE = 300000
[Service]
LimitNOFILE = 300000
# 重启服务
service rabbitmq-server restart
4.4.2 个人成功方法:
# 打开rabbitmq-server.service,(没办法,找不到官方说的limits.conf)
vim /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
# 同样在Service模块下,加入LimitNOFILE = 300000
[Service]
LimitNOFILE = 300000
# 重启rabbitmq,访问管理后台,发现打开文件数并没有修改成功,依旧是1024
# 打开 sysctl.conf
vim /etc/sysctl.conf
# 添加:
fs.file-max = 65535
# 重新启动机子
reboot
#再次访问管理后台,发现打开数已改为300000
折腾了很久,总算把整个安装过程缕清了,感觉还是有收获的,毕竟这是我第一次一步一步跟着官方文档采坑过来的。也特别感谢以下两位大佬的文章:
https://blog.csdn.net/zhengzizhi/article/details/77018658
https://blog.csdn.net/yangyimincn/article/details/51766891