1、获取Erlang和RabbitMQ的源文件
wget http://erlang.org/download/otp_src_17.0.tar.gz
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.2/rabbitmq-server-generic-unix-3.4.2.tar.gz
2、编译安装Erlang
编译安装Erlang对环境有要求,为防止在编译的时候提示某些软件包未安装之类的错误,所以我将Erlang需要的软件提前安装,直接使用yum进行安装即可
yum -y install make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel
解压otp_src_17.0.tar.gz
tar -zxvf otp_src_17.0.tar.gz
编译安装Erlang
cd otp_src_17.0
./configure \
--prefix=/usr/local/erlang \
--enable-smp-support \
--enable-threads \
--enable-sctp \
--enable-kernel-poll \
--enable-hipe \
--with-ssl
上述参数说明:
--prefix 指定安装目录
--enable-smp-support启用对称多处理支持(Symmetric Multi-Processing对称多处理结构的简称)
--enable-threads启用异步线程支持
--enable-sctp启用流控制协议支持(Stream Control Transmission Protocol,流控制传输协议)
--enable-kernel-poll启用Linux内核poll
--enable-hipe启用高性能Erlang(High Performance Erlang)参考资料:
http://www.cnblogs.com/me-sa/archive/2012/10/09/erlang_hipe.html
--with-ssl使用SSL包
make && make install
设置环境变量
环境变量为追加
vi /etc/profile
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH
source /etc/profile
3、安装RabbitMQ
解压缩:
tar
-zxf rabbitmq-server-generic-unix-
3.4
.
2
.
tar
.gz
移动这个目录到/usr/local下并且重命名为rabbitmq:
mv
rabbitmq-server-generic-unix-
3.4
.
2
/usr/local/rabbitmq
打开/etc/profile文件,在文件最后添如下两行环境变量
#set rabbitmq environment export PATH=$PATH:/usr/local/rabbitmq/sbin
使环境变量生效:
source /etc/profile
安装网页管理插件:
cd /usr/local/rabbitmq/sbin/
./rabbitmq-plugins enable rabbitmq_management
启动rabbitmq:
cd /usr/local/rabbitmq/sbin
./rabbitmq-server -detached (可以实现后台运行)
查看启动是否成功:
netstat -tunlp |
grep
beam
tcp
0
0
0.0
.
0.0
:
25672
0.0
.
0.0
:* LISTEN
3308
/beam.smp tcp
0
0
0.0
.
0.0
:
15672
0.0
.
0.0
:* LISTEN
3308
/beam.smp tcp
0
0
:::
5672
:::* LISTEN
3308
/beam.smp
可以看到启动成功: 15672是rabbimq网页管理监听端口,5672是客户端使用的端口,在浏览器中输入http://localhost:15672,可以登录Web页面。
输入用户名guest和密码guest即可通过网页管理RabbitMQ。
由于guest这个用户,只能在本地访问,所以我们要新增一个用户并赋予权限:
添加用户:rabbitmqctl add_user admin admin
添加权限:rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
修改用户角色:rabbitmqctl set_user_tags admin administrator
然后就可以远程访问了,然后可直接配置用户权限等信息。
到此,就可以通过http://ip:15672 使用admin admin 进行登陆了
关闭RabbitMQ:
cd /usr/local/rabbitmq/sbin./rabbitmqctl stop
4.如果机器上已经安装了activemq,那么端口5672 就会被占用
需要变更rabbitmq的默认端口号
RabbitMQ的配置
先通过kill命令将rabbitmq进程杀死
rabbitmq的配置放在/usr/local/rabbitmq/etc/rabbitmq目录下
rabbitm的配置文件有三个
一是rabbitmq服务器的属性配置 文件名称为:rabbitmq.config
二是rabbitmq服务器环境变量配置 文件名称为:rabbitmq-env.conf
三是rabbitmq服务器插件开启配置 文件名称为:enabled_plugins
具体的配置选项可以通过rabbitmq的官网了解 网址为:http://www.rabbitmq.com/configure.html
以我的安装配置为例查看三个配置文件的内容
rabbitmq.config
[
{
rabbit, [{tcp_listeners,[5672]},
{heartbeat, 60},
{cluster_partition_handling, autoheal}]
},
{
rabbitmq_management, [{listener, [{port, 15672}]}]
},
{
kernel, [{inet_dist_listen_min, 40000},{inet_dist_listen_max, 45000}]
}
].
rabbitmq-env.conf
NODENAME=rabbitmq@rmq01
修改/etc/hosts文件 在文件末尾追加一行配置 如下 192.168.153.128是当前主机的IP地址
192.168.153.128 rmp01
enabled_plugins :启动rabbitmq的web管理插件
[rabbitmq_management].
注意 配置文件最后的 点. 确实是存在的
技术交流群【175351203】
5、
RabbitMQ的自启动配置
编写启动脚本 文件名为:rabbitmq
内容如下:
#!/bin/sh
#
# rabbitmq-server RabbitMQ broker
#
# chkconfig: - 80 05
# description: Enable AMQP service provided by RabbitMQ
#
### BEGIN INIT INFO
# Provides: rabbitmq-server
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Description: RabbitMQ broker
# Short-Description: Enable AMQP service provided by RabbitMQ broker
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
export HOME=/root
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/erlang/bin
NAME=rabbitmq-server
DAEMON=/usr/local/rabbitmq/sbin/${NAME}
CONTROL=/usr/local/rabbitmq/sbin/rabbitmqctl
DESC=rabbitmq-server
USER=root
INIT_LOG_DIR==/usr/local/rabbitmq/var/log/rabbitmq
PID_FILE=/usr/local/rabbitmq/var/log/rabbitmq/pid
START_PROG="daemon"
LOCK_FILE=/var/lock/subsys/$NAME
test -x $DAEMON || exit 0
test -x $CONTROL || exit 0
RETVAL=0
set -e
[ -f /etc/default/${NAME} ] && . /etc/default/${NAME}
ensure_pid_dir () {
PID_DIR=`dirname ${PID_FILE}`
if [ ! -d ${PID_DIR} ] ; then
mkdir -p ${PID_DIR}
chown -R ${USER}:${USER} ${PID_DIR}
chmod 755 ${PID_DIR}
fi
}
remove_pid () {
rm -f ${PID_FILE}
rmdir `dirname ${PID_FILE}` || :
}
start_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
echo RabbitMQ is currently running
else
RETVAL=0
ensure_pid_dir
set +e
RABBITMQ_PID_FILE=$PID_FILE $START_PROG $DAEMON \
> "${INIT_LOG_DIR}/startup_log" \
2> "${INIT_LOG_DIR}/startup_err" \
0<&- &
$CONTROL wait $PID_FILE >/dev/null 2>&1
RETVAL=$?
set -e
case "$RETVAL" in
0)
echo SUCCESS
if [ -n "$LOCK_FILE" ] ; then
touch $LOCK_FILE
fi
;;
*)
remove_pid
echo FAILED - check ${INIT_LOG_DIR}/startup_\{log, _err\}
RETVAL=1
;;
esac
fi
}
stop_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
set +e
$CONTROL stop ${PID_FILE} > ${INIT_LOG_DIR}/shutdown_log 2> ${INIT_LOG_DIR}/shutdown_err
RETVAL=$?
set -e
if [ $RETVAL = 0 ] ; then
remove_pid
if [ -n "$LOCK_FILE" ] ; then
rm -f $LOCK_FILE
fi
else
echo FAILED - check ${INIT_LOG_DIR}/shutdown_log, _err
fi
else
echo RabbitMQ is not running
RETVAL=0
fi
}
status_rabbitmq() {
set +e
if [ "$1" != "quiet" ] ; then
$CONTROL status 2>&1
else
$CONTROL status > /dev/null 2>&1
fi
if [ $? != 0 ] ; then
RETVAL=3
fi
set -e
}
rotate_logs_rabbitmq() {
set +e
$CONTROL rotate_logs ${ROTATE_SUFFIX}
if [ $? != 0 ] ; then
RETVAL=1
fi
set -e
}
restart_running_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
restart_rabbitmq
else
echo RabbitMQ is not runnning
RETVAL=0
fi
}
restart_rabbitmq() {
stop_rabbitmq
start_rabbitmq
}
if [ ! -d $INIT_LOG_DIR ]; then
mkdir $INIT_LOG_DIR
fi
case "$1" in
start)
echo -n "Starting $DESC: "
start_rabbitmq
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
stop_rabbitmq
echo "$NAME."
;;
status)
status_rabbitmq
;;
rotate-logs)
echo -n "Rotating log files for $DESC: "
rotate_logs_rabbitmq
;;
force-reload|reload|restart)
echo -n "Restarting $DESC: "
restart_rabbitmq
echo "$NAME."
;;
try-restart)
echo -n "Restarting $DESC: "
restart_running_rabbitmq
echo "$NAME."
;;
*)
echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2
RETVAL=1
;;
esac
exit $RETVAL
配置自启动
将rabbitmq脚本文件放到目录 /etc/rc.d/init.d目录下
cd /etc/rc.d/init.d 进入该目录
chmod 777 rabbitmq 修改脚本文件的权限
chkconfig --add rabbitmq 添加服务器
chkconfig --level 345 rabbitmq on 设置自启动
chkconfig --list rabbitmq 查看自启动项是否设置成功
启动rabbitmq服务
service rabbitmq start
查看rabbitmq的状态
service rabbitmq status
重启
service rabbitmq restart
重启机器验证是否自启动
重启后进入命令行 使用 ps aux | grep rabbitmq 或 service rabbitmq status
验证rabbitmq是否自启动成功。
6、防火墙设置
iptables端口设置
查看iptable内容
iptable -L -n 查看内容
Chain FORWARD (policy ACCEPT)target prot opt source destination REJECT all --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT)target prot opt source destination
如果只有这些内容表示 没有开启防火墙则不再需要对RabbitMQ的端口进行配置
如果包含其他内容,如下:
Chain INPUT (policy ACCEPT)target prot opt source destination ACCEPT all --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
state RELATED,ESTABLISHED ACCEPT icmp --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
ACCEPT all --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
ACCEPT tcp --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
state NEW tcp dpt:
22
ACCEPT tcp --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
state NEW tcp dpt:
8080
ACCEPT tcp --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
state NEW tcp dpt:
3306
ACCEPT tcp --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
state NEW tcp dpt:
80
REJECT all --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT)target prot opt source destination REJECT all --
0.0
.
0.0
/
0
0.0
.
0.0
/
0
reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT)target prot opt source destination
则需要添加以下内容
-I INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
5672端口是客户端通过tcp连接rabbitmq的
15672是web管理界面的http协议接口。
使用vi命令编辑iptables文件
vi /etc/sysconfig/iptables
将上面两行内容添加,添加后结果如下
# Firewall configuration written by system-config-firewall# Manual customization of this
file
is not recommended.*filter:INPUT ACCEPT [
0
:
0
]:FORWARD ACCEPT [
0
:
0
]:OUTPUT ACCEPT [
0
:
0
]-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport
22
-j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport
8080
-j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport
3306
-j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport
80
-j ACCEPT-I INPUT -p tcp -m state --state NEW -m tcp --dport
5672
-j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport
15672
-j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT
重启iptables
service iptables restart
重启成功后就可以访问web管理界面了
7、rabbitmq使用说明
安装完成后需要配置:
/usr/local/rabbitmq/sbin目录下文件说明:
rabbitmq-env // 环境配置
rabbitmq-defaults // 默认参数设置
rabbitmqctl // 管理工具
rabbitmq-plugins // 插件管理工具
rabbitmq-server // rabbitmq服务
列出所有插件
# ./rabbitmq-plugins list
rabbitmq常用命令
add_user <UserName> <Password>
delete_user <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost <VHostPath>
delete_vhost <VHostPath>
list_vhostsset_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions [-p <VHostPath>]
list_user_permissions <UserName>
list_queues [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]
技术交流群【175351203】