CentOS6和CentOS7环境下RabbitMQ安装配置和非ROOT权限启动及集群搭建最完整教程

本文原发布于CSDN,同步发布到掘金node

前言

最近负责的一个项目须要使用 WebSocket 作先后端通讯,我使用了Spring提供支持的STOMP协议,它能够解决 WebSocket 消息的语义化和集群状态下各集群节点之间消息共享的问题,例如用户链接了机器 A,可是机器 B须要知道该用户的在线状态和向这个用户推送消息。这是WebSocket集群状态下必然要面对的问题。git

传统的作法是使用分布式session、redis或者经过消息队列来本身实现这些功能的支持。其实,Spring已经为咱们提供了相关的功能。github

开启这个功能,咱们须要一个中继(relay),理论上任何实现STOMP协议的消息队列均可以作为中继,经常使用的是RabbitMQ和ActiveMQ。我选了 RabbitMQ。web

在搭建 RabbitMQ 的时候,咱们会遇到如下几个问题:redis

  1. erlang 运行时环境。RabbitMQ 是 erlang 写的,并且对版本有所要求,网上找的不少教程会出现erlang总是安装不上或者版本不对的问题。
  2. 非root用户启动。RabbitMQ安装完以后直接执行命令启动,会自动以rabbitmq用户启动进程,而使用该用户须要root权限
  3. 集群搭建。服务须要高可用,所以咱们须要一个rabbitmq集群来支持。

下面是我摸索、使用并总结的安装和配置的完整教程,转载请注明出处shell

安装包下载

erlang

从CentOS7/6无依赖的erlang GitHub release 页面中下载安装包: CentOs6下载 erlang-21.2.2-1.el6.x86_64.rpm CentOs7下载 erlang-21.2.2-1.el7.centos.x86_64.rpmvim

签名key文件

GitHub release 页面中下载 rabbitmq-release-signing-key.ascsegmentfault

rabbitmq rpm安装包

在 rabbitmq-server 的 GitHub release 页面中选择合适的版本并选择适合的安装包,当前最新的release版本是3.7.9 (2019年1月),则: CentOs6下载 rabbitmq-server-3.7.9-1.el6.noarch.rpm CentOs7下载 rabbitmq-server-3.7.9-1.el7.noarch.rpm后端

安装

安装包准备好以后,咱们来安装(yum命令须要root权限centos

# 安装 erlang
rpm -ivh erlang-21.1.4-1.el6.x86_64.rpm
# 导入签名
rpm --import rabbitmq-release-signing-key.asc
# 安装 rabbitmq
yum install -y rabbitmq-server-3.7.9-1.el6.noarch.rpm
复制代码

若是在 install 的时候报下面的异常

  • groupadd: cannot open /etc/group
  • useradd: cannot open /etc/passwd
  • useradd: cannot open /etc/shadow

则对应地执行这三条命令而后再 install 便可

chattr -i /etc/group
chattr -i /etc/passwd
chattr -i /etc/shadow
复制代码

配置

管理插件

rabbitmq-plugins enable rabbitmq_management

开始管理插件后能够登陆 http://localhost:15672管理rabbitmq, 默认帐号密码都为 guest,只支持本地登陆

STOMP 插件

rabbitmq-plugins enable rabbitmq_stomp

添加用户

格式: rabbitmqctl add_user <user> <password> 示例: rabbitmqctl add_user test Passw0rd

添加vhost

格式: rabbitmqctl add_vhost <hostname> 示例: rabbitmqctl add_vhost /wxkf

用户受权

角色

格式: rabbitmqctl set_user_tags <user> <role> 示例: rabbitmqctl set_user_tags test administrator

vhost受权

格式: rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read> 示例: rabbitmqctl set_permissions -p /wxkf test ".*" ".*" ".*"

非 root 权限启动 rabbitmq

安装完成以后 rabbitmq 会在 /usr/sbin/ 目录下加入所须要的命令,如 rabbitmq-server,默认会以rabbitmq用户启动,而使用该用户须要root权限。可是咱们在生产机器上不可能一直使用 root,所以使用普通用户启动 rabbitmq 很是有必要。

只须要两步就能够实现

  1. 删除 /usr/sbin/rabbitmq*
rm -f /usr/sbin/rabbitmq*
复制代码
  1. 添加软链
# 注意:rabbitmq_server-3.7.9 换成你安装的对应版本
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmqctl /usr/sbin/rabbitmqctl
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-env /usr/sbin/rabbitmq-env
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-server /usr/sbin/rabbitmq-server
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-defaults /usr/sbin/rabbitmq-defaults
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-diagnostics /usr/sbin/rabbitmq-diagnostics
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.9/sbin/rabbitmq-plugins /usr/sbin/rabbitmq-plugins
复制代码

而后执行 rabbitmq 相关的命令就会以当前用户执行了

集群搭建

.erlang.cookie 文件

将第一台RabbitMQ的 ~/.erlang.cookie 文件复制替换掉其余的机器相同路径下的文件,以确保各个节点的cookie文件使用的是同一个值,节点之间经过cookie肯定相互是否可通讯。

注意:若是是直接修改cookie文件的内容,须要受权。 .erlang.cookie 文件默认权限是 400,即只有owner才有只读权限,执行 chmod +w .erlang.cookie 添加写权限,改完以后执行 chmod -w .erlang.cookie 改回原来的权限便可。

配置各节点的hosts文件

sudo vim /etc/hosts

# 格式:ip 节点名
xxx.xxx.xxx.xxx rmq-broker-test-1
xxx.xxx.xxx.xxx rmq-broker-test-2
xxx.xxx.xxx.xxx rmq-broker-test-3
复制代码

注意:节点名称为机器的 hostname,能够经过执行 hostname 命令查看(若是全称包含 . 会被截断,只取 . 前面的部分,如hostname 为 bhj-185-73.os.org 则节点名称为bhj-185-73)。

组成集群

  1. 先启动任意一个节点,以 node1 为例,在 node1 机器上执行
rabbit-server -detached
复制代码
  1. 再启动其余机器并加入集群,以 node2 为例,在 node2 机器上执行
# 启动 rabbit-server
rabbit-server -detached
# 中止rabbitmq服务(这命令只是中止对外服务,进程还在)
rabbitmqctl stop_app
# 加入集群,集群格式为 rabbit@节点名
rabbitmqctl join_cluster rabbit@node1
# 开启rabbitmq服务
rabbitmqctl start_app
复制代码

集群搭建完成以后能够经过web管理界面查看集群集群信息,地址为任意节点的ip,端口号为 15672,如 http://locahost:15672

管理界面
集群部分参考: CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
相关文章
相关标签/搜索