Centos7 安装最新RabbitMQ及配置

前言

最近在学习SpringCloud,发现其中的消息总线是依靠消息中间件实现的,加之公司也有在使用RabbitMQ,所以就想从零开始,从官网逐步学习一下RabbitMQ。下面的安装教程是我从官网一步一步翻译、实践过来的,如有表达不到位,还请多多指教!RabbitMQ官方安装教程

1. rpm包安装

    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

 2. 使用脚本安装

#创建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

这种方式虽然会简单点,但我尝试过,发现只有才能安装成功,所以不太推荐大家使用这种方法。

3. 启动RabbitMQ Server

# 设置开启启动
chkconfig rabbitmq-server on

# 启动服务
service rabbitmq-server start

#停止服务
service rabbitmq-server stop

4. 配置RabbitMQ

    4.1 找到配置文件

启动RabbitMQ后,会在 /var/log/rabbitmq 目录下生成运行日志,在日志的最上方,我们可以看到配置文件的信息:

Centos7 安装最新RabbitMQ及配置_第1张图片

然而,发现刚开始的时候并没有任何配置文件。只好照着官方的介绍,到 /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 ,进入如下页面就证明插件启动成功了。

Centos7 安装最新RabbitMQ及配置_第2张图片

    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没有映射好。

Centos7 安装最新RabbitMQ及配置_第3张图片

因此解决方法就是将主机名加入到 /etc/hosts 文件中:

 

    4.4 修改rabbitmq打开文件数量

使用上一步配置的用户登录进管理后台,可知rabbitmq默认的文件打开数是1024,这对消息中间件来说太低了。官方建议我们在正式环境至少配置65536,而在开发环境中配置到4096。

Centos7 安装最新RabbitMQ及配置_第4张图片

修改方法:

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

Centos7 安装最新RabbitMQ及配置_第5张图片

结语 

折腾了很久,总算把整个安装过程缕清了,感觉还是有收获的,毕竟这是我第一次一步一步跟着官方文档采坑过来的。也特别感谢以下两位大佬的文章:

https://blog.csdn.net/zhengzizhi/article/details/77018658

https://blog.csdn.net/yangyimincn/article/details/51766891

你可能感兴趣的:(RabbitMQ)