目录
系统版本
centos 6.10(iso版本:CentOS-6.10-x86_64-bin-DVD1)
RabbitMQ包下载和解压
官方地址:https://www.rabbitmq.com/install-generic-unix.html
我安装的版本:3.8.7
包文件名:rabbitmq-server-generic-unix-3.8.7.tar.xz
上传到服务器后,解压
xz -d rabbitmq-server-generic-unix-3.8.7.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.7.tar
解压后的文件树
# 忽略插件目录(插件文件以ez后缀)和LICENSE
[root@openstack-base rabbitmq_server-3.8.7]# tree |grep -v LICENSE |grep -v ez
.
├── escript
│ ├── rabbitmqctl
│ ├── rabbitmq-diagnostics
│ ├── rabbitmq-plugins
│ ├── rabbitmq-queues
│ └── rabbitmq-upgrade
├── etc
│ └── rabbitmq
├── INSTALL
├── plugins
│ ├── README
├── sbin
│ ├── rabbitmqctl
│ ├── rabbitmq-defaults
│ ├── rabbitmq-diagnostics
│ ├── rabbitmq-env
│ ├── rabbitmq-plugins
│ ├── rabbitmq-queues
│ ├── rabbitmq-server
│ └── rabbitmq-upgrade
└── share
└── man
├── man5
│ └── rabbitmq-env.conf.5.gz
└── man8
├── rabbitmqctl.8.gz
├── rabbitmq-diagnostics.8.gz
├── rabbitmq-echopid.8.gz
├── rabbitmq-plugins.8.gz
├── rabbitmq-queues.8.gz
├── rabbitmq-server.8.gz
├── rabbitmq-service.8.gz
└── rabbitmq-upgrade.8.gz
9 directories, 110 files
系统环境变量、服务环境变量、服务配置
系统环境变量
将sbin目录加入到环境变量中
编辑/etc/bashrc 文件,并在末尾加入以下代码
export RABBITMQ_HOME="/root/rabbitmq-server_3.8.7"
export PATH="$RABBITMQ_HOME/sbin:$PATH"
# RABBITMQ_HOME 要根据个人情况修改
修改完后 source /etc/bashrc 使环境变量生效
服务环境变量、服务配置
rmq会有默认的环境变量(以RABBITMQ_ 前缀) 和默认启动配置,具体后续补充
也可自主指定环境变量文件和配置文件
请先阅读sbin/rabbitmq-defaults 文件,查看相关内容
默认的环境变量文件路径及文件名: etc/rabbitmq/rabbitmq-env.conf
默认的配置文件路径及文件名: etc/rabbitmq/rabbitmq (这个可以在rabbitmq-env.conf中配置的)
RabbitMQ启动
安装依赖服务
erlang
要先安装erlang,可根据官方引导完成安装,具体参考:https://www.erlang-solutions.com/resources/download.html
(但我印象里没有经历那么多步骤,只以下步骤就可以)
在/etc/yum.repo.d/ 目录下新建erlang.repo文件,内容如下
[erlang-solutions]
name=CentOS $releasever - $basearch - Erlang Solutions
baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1
执行yum -y install erlang 进行安装
锁定erlang版本
1、安装versionlock
yum -y install yum-versionlock
2、使用versionlock锁定erlang版本
yum versionlock erlang
加入系统service,使用service命令启停rmq
探路
绕弯的原因
主要是不喜欢通过yum安装,bin、conf、log等等都特别分散,不好找,不如放在一处来的爽快
读者可直接跳过探路的步骤,下载使用后面的github文件
为了获得相对官方的init.d脚本,我按照官方引导使用yum安装的rmq,具体参考:https://www.rabbitmq.com/install-rpm.html#bintray
大致如下:
在/etc/yum.repo.d/ 目录下新建rabbitmq-server.repo文件,内容如下
这里我参考上面erlang的格式,修改了一下
1)gpgcheck改为了1
2)加入了gpgkey,其为参考文档中的asc地址
3)repo_gpgcheck去掉了
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/6/
gpgcheck=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
enabled=1
执行yum -y install rabbitmq-server进行安装
安装完成后很多文件就都准备好了,譬如/etc/init.d/rabbitmq-server /etc/rabbitmq /usr/sbin中rabbitmq开头的二进制文件 等
这里我取/etc/init.d/rabbitmq-server 文件,保留到本地
修改其中内容
# 添加RABBITMQ_HOME=/root/rabbitmq_server-3.8.7 这个主要用于后面替换文件路径用的,具体路径要根据个人情况修改
RABBITMQ_HOME=/root/rabbitmq_server-3.8.7
# 添加export HOME=/root 这个不加的话,使用service rabbitmq-server start | status 命令会报crash,这里踩坑了好几个小时
export HOME=/root
# 替换DAEMON、CONTROL、PID_FILE、RABBITMQ_LOG_BASE
DAEMON=${RABBITMQ_HOME}/sbin/${NAME}
CONTROL=${RABBITMQ_HOME}/sbin/rabbitmqctl
: ${RABBITMQ_SERVER_CONSOLE_OUTPUT_DIR:=${RABBITMQ_LOG_BASE:-${RABBITMQ_HOME}/var/log/rabbitmq}}
# 其他的不需要改动
为了方便,直接附一个地址,以供学习下载使用
https://github.com/chkinglee/asgard-treasury/blob/master/rabbitmq/rabbitmq-server
注意将rabbitmq-server 上传到 /etc/init.d 路径下,并赋予可执行权限
上传: rz -be
授权:chmod +x rabbitmq-server
起航
服务启停
service rabbitmq-server start
service rabbitmq-server status
service rabbitmq-server stop
service rabbitmq-server restart
加入开机启动
chkconfig --add rabbitmq-server
chkconfig rabbitmq-server on
服务启动后
会在RABBITMQ_HOME目录中 (根据上面的rabbitmq-server脚本中指定的各个路径配置)
1、创建 var/lib/rabbitmq/mnesia 目录存放数据文件
2、创建 var/run/rabbitmq/pid 文件存放pid
3、在 var/log/rabbitmq 目录中创建日志文件
进程查找
主要根据 erl 或者 rabbitmq 关键词查找进程
附部署完成后的目录树(已经删掉了没用LICENSE文件)
[root@openstack-base rabbitmq_server-3.8.7]# tree |grep -v ez
.
├── escript
│ ├── rabbitmqctl
│ ├── rabbitmq-diagnostics
│ ├── rabbitmq-plugins
│ ├── rabbitmq-queues
│ └── rabbitmq-upgrade
├── etc
│ └── rabbitmq
│ └── rabbitmq-env.conf
├── plugins
│ ├── README
├── sbin
│ ├── rabbitmqctl
│ ├── rabbitmq-defaults
│ ├── rabbitmq-diagnostics
│ ├── rabbitmq-env
│ ├── rabbitmq-plugins
│ ├── rabbitmq-queues
│ ├── rabbitmq-server
│ └── rabbitmq-upgrade
├── share
│ └── man
│ ├── man5
│ │ └── rabbitmq-env.conf.5.gz
│ └── man8
│ ├── rabbitmqctl.8.gz
│ ├── rabbitmq-diagnostics.8.gz
│ ├── rabbitmq-echopid.8.gz
│ ├── rabbitmq-plugins.8.gz
│ ├── rabbitmq-queues.8.gz
│ ├── rabbitmq-server.8.gz
│ ├── rabbitmq-service.8.gz
│ └── rabbitmq-upgrade.8.gz
└── var
├── lib
│ └── rabbitmq
│ └── mnesia
│ ├── rabbit@openstack-base
│ │ ├── cluster_nodes.config
│ │ ├── DECISION_TAB.LOG
│ │ ├── LATEST.LOG
│ │ ├── msg_stores
│ │ │ └── vhosts
│ │ │ └── 628WB79CIFDYO9LJI6DKMI09L
│ │ │ ├── msg_store_persistent
│ │ │ │ └── 0.rdq
│ │ │ ├── msg_store_transient
│ │ │ │ └── 0.rdq
│ │ │ └── recovery.dets
│ │ ├── nodes_running_at_shutdown
│ │ ├── quorum
│ │ │ └── rabbit@openstack-base
│ │ │ ├── 00000002.wal
│ │ │ ├── meta.dets
│ │ │ └── names.dets
│ │ ├── rabbit_durable_exchange.DCD
│ │ ├── rabbit_durable_queue.DCD
│ │ ├── rabbit_durable_route.DCD
│ │ ├── rabbit_runtime_parameters.DCD
│ │ ├── rabbit_serial
│ │ ├── rabbit_topic_permission.DCD
│ │ ├── rabbit_user.DCD
│ │ ├── rabbit_user_permission.DCD
│ │ ├── rabbit_vhost.DCD
│ │ ├── schema.DAT
│ │ └── schema_version
│ ├── rabbit@openstack-base-feature_flags
│ └── rabbit@openstack-base-plugins-expand
├── log
│ └── rabbitmq
│ ├── log
│ │ └── crash.log
│ ├── rabbit@openstack-base.log
│ ├── rabbit@openstack-base_upgrade.log
│ ├── shutdown_err
│ ├── shutdown_log
│ ├── startup_err
│ └── startup_log
└── run
└── rabbitmq
└── pid
27 directories, 118 files
坑
1、启动服务前建议预先创建var/log/rabbitmq 目录,否则start时可能会夯住
2、在init.d脚本中,注意添加export HOME= ,否则使用service rabbitmq-server start时,会crash,提示No home for cookie file
这个坑踩了很久,当时尝试sh /etc/init.d/rabbitmq-server start 就是成功的,但使用service rabbitmq-server start 就会crash,找了很久解决方案,最后得以解决。。
大概就是在HOME目录中会创建一个.erlang.cookie 文件存放 cookie hash
3、尽量不要采取那些删mnesia目录的解决方案,那是存放数据的,没数据的话还好说,有数据的话你删了还玩啥