RabbitMQ安装
部署安装RabbitMQ前,先了解下基本概念:(RabbitMQ+Python入门经典] 兔子和兔子窝)
RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。说的笼统点是queue+socket实现
安装Erlang
在安装RabbitMQ之前,我们需要安装Erlang,官方建议使用打包版本,有三个建议的来源:
1、使用官方生成的一个软件包(https://github.com/rabbitmq/erlang-rpm),它只提供运行RabbitMQ所需要的组件,它可能会也可能不适合运行其他基于Erlang的软件或第三方RabbitMQ插件
2、使用Erlang官方下载一个rpm包(https://www.erlang-solutions.com/resources/download.html),这个包通常是最新的
3、使用EPEL源来安装,这种方式安装的包并不总是最新的
这里我选择第1种方式:
vim /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 gpgcheck=1 gpgkey=https://www.rabbitmq.com/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1 yum install erlang
安装RabbitMQ服务器
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.0/rabbitmq-server-3.7.0-1.el7.noarch.rpm rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc yum install rabbitmq-server-3.7.0-1.el7.noarch.rpm
启动服务器
systemctl enable rabbitmq-server systemctl start rabbitmq-server
配置RabbitMQ
在大多数系统上,一个节点应该能够启动并运行所有的默认值
生产环境配置后面再详解
注意:服务器设置为以系统用户rabbitmq运行 。如果更改节点数据库或日志的位置,则必须确保文件由该用户所有(并且还要更新环境变量)
端口访问
SELinux和类似的机制可能会阻止RabbitMQ绑定到一个端口。发生这种情况时,RabbitMQ将无法启动 防火墙可以防止节点和CLI工具相互通信。确保可以打开以下端口: 4369:epmd, RabbitMQ节点和CLI工具使用的对等发现服务 5672,5671: 由AMQP 0-9-1和1.0客户端使用 25672: 由Erlang分配用于节点间和CLI工具通信,并且从动态范围分配(AMQP端口+20000) 15672: HTTP API客户端和rabbitmqadmin(仅当管理插件启用时) 61613,61614:STOMP客户端没有和使用TLS(只有STOMP插件已启用) 1883年,8883:(MQTT客户端没有和TLS,如果MQTT插件已启用) 15674:STOMP-over-WebSockets客户端(仅在启用了Web STOMP插件的情况下) 15675:MQTT-over-WebSockets客户端(仅在启用了Web MQTT插件的情况下)
默认的用户访问
默认将创建一个用户guest,密码guest。默认情况下,只有在以localhost身份连接到代理时才能使用这些凭证
调整系统限制
运行生产工作负载的RabbitMQ安装可能需要系统限制和内核参数调整,以便处理体面的并发连接和队列。需要调整的主要设置是打开文件的最大数量,也称为ulimit -n
许多操作系统上的默认值对于消息传递代理来说太低(例如,在几个Linux发行版上为1024)。我们建议在生产环境中为用户rabbitmq至少允许65536个文件描述符。4096对于大多数开发工作量来说应该是足够的
有两个限制操作系统内核允许的最大打开文件数(fs.file-max)和每用户限制(ulimit -n)。前者必须高于后者
fs.file-max设置
# vim /etc/sysctl.conf,添加: fs.file-max = 65535 # sysctl -p
每用户限制(ulimit -n)
# vim /etc/security/limits.conf 在最后一行添加如下命令 root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 # vim /etc/rc.local ulimit -SHn 65535
修改rabbitmq配置
修改rabbitmq配置 修改/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service 在[Service]中,增加LimitNOFILE=30000(具体数值根据需要) 执行systemctl daemon-reload 重启rabbitmq服务 rabbitmqctl status
修改日志和数据存放路径
原来的默认位置是/var下, 以下数据在log里面可以查到,一般log 在/var/log.rabbitmq/rabbitmq@usrename.log 中
home dir : /var/lib/rabbitmq
config file(s) : (none) #默认没有 rabbitmq.conf,可以在/etc/rabbitmq.conf
cookie hash : QuwI6ycYrkUgnpRXQvBoAg==
log(s) : /var/log/rabbitmq/rabbit@c1.log
: /var/log/rabbitmq/rabbit@c1_upgrade.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@c1
创建数据文件和日志文件存放位置的目录
mkdir /data/rabbitmq/mnesia -p mkdir /data/rabbitmq/log -p chown -R rabbitmq.rabbitmq /data/rabbitmq
创建或新增参数配置文件
[root@c1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia RABBITMQ_LOG_BASE=/data/rabbitmq/log
重启rabbitmq服务
配置文件
Rabbitmq的配置文件有三个,位于/etc/rabbitmq/
- enabled_plugins (设置允许的插件列表)
- rabbitmq.conf (设置rabbitmq的运行参数)
- rabbitmq-env.conf (rabbitmq的环境参数配置)
该配置文档的格式为erlang的列表格式如
[rabbitmq_management,rabbitmq_visualiser].
tcp_listerners :设置rabbimq的监听端口,默认为[5672]。 disk_free_limit :磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为 {mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte. vm_memory_high_watermark:设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。 hipe_compile :将部分rabbimq代码用HighPerformance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。 force_fine_statistics, 该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
RABBITMQ_NODE_PORT 端口设置,默认为5672 RABBITMQ_NODENAME 节点名称,默认为rabbit MNESIA_BASE 后端存储目录,默认为/var/lib/rabbitmq/mnesia LOG_BASE 日志目录,默认为/var/log/rabbitmq/
rabbitmq自带管理后台,安装后需要配置开启
查看插件
rabbitmq-plugins list
开启网页监控插件, 开启15672端口
rabbitmq-plugins enable rabbitmq_management
网页管理后台默认只允许本地访问(guest/guest),因此目前我们访问http://ip:15672是无法登录的,现在需要添加远程登录用户
# rabbitmqctl add_user <username> <password>
rabbitmqctl add_user heboan heboanpwd
设置远程登录(配置权限、写权限、读权限)
rabbitmqctl set_permissions -p "/" heboan ".*" ".*" ".*"
设置用户为管理员
rabbitmqctl set_user_tags heboan administrator
登录http://<your server ip>:15672 用户 heboan 密码 heboanpwd, 然后把guest用户删除