全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

部署RabbitMQ

更新时间:2017-11-19 21:50:58

RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

部署方式

在阿里云服务器下部署 RabbitMQ 提供两种部署方式:

一般推荐镜像部署适合新手使用更加快捷方便,安装包部署以及手动部署适合对 Linux 命令有基本了解的用户,可以满足用户个性化部署的要求。本教程主要介绍镜像和手工部署的方式。

镜像部署

  1. 单击 RabbitMQ 环境 ( CentOS7.3 Erlang19.3 ) 进入镜像详情页。

  2. 单击 立即购买,按提示步骤购买 ECS 实例。

  3. 登录 ECS 管理控制台

  4. 在左边导航栏里,单击 实例,进入 ECS 实例列表页。

  5. 选择所购 ECS 实例所在的地域,并找到所购 ECS 实例,在 IP 地址 列获取该实例的公网 IP 地址。

  6. 在浏览器地址栏中输入公网 IP 地址,下载操作文档。

    下载操作文档

  7. 使用 putty 登录 Linux 服务器,请参考连接Linux实例;忘记 root 密码,请参考重置实例密码

  8. 初始化 rabbitmq。

    1. cd /root/oneinstack
    2. ./init_rabbitmq.sh

    初始化 rabbitmq

  9. 进入管理页面,浏览器访问 http://公网IP:15672

    在浏览器中访问实例

手工部署

  • 系统平台:CentOS 7.3
  • rabbitmq版本:rabbitmq-server -3.6.9
  • erlang版本:erlang19.3
  • JDK版本:JDK1.8.0_121

前提准备

创建一般用户 rabbitmq,运行 rabbitmq。

  1. useradd rabbitmq

设置 Linux 主机名。

CentOS 7 修改 /etc/hostname,CentOS 6 修改 /etc/sysconfig/network,下面以 CentOS 7 为例:

  1. echo rabbit1 > /etc/hostname
  2. hostname rabbit1
  3. exit #退出重新登录

修改 hostname

安装依赖包

  1. yum -y install make gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC-devel

安装依赖包

源代码下载

  • 下载 Erlang:wget http://erlang.org/download/otp_src_19.3.tar.gz
  • 下载 rabbitmq:wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz

安装 Erlang

  1. tar xzf otp_src_19.3.tar.gz #解压
  2. cd otp_src_19.3
  3. ./configure --prefix=/usr/local/erlang --enable-shared-zlib --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
  4. make && make install

解压 RabbitMQ

  1. 解压 rabbitmq-server-generic-unix-3.6.9.tar.xz 。

    1. tar xvJf rabbitmq-server-generic-unix-3.6.9.tar.xz
    2. mv rabbitmq_server-3.6.9 /usr/local/rabbitmq
  2. rabbitmq 环境变量配置。

    1. sed -i 's@^ERL_DIR=.*@ERL_DIR=/usr/local/erlang/bin/@' /usr/local/rabbitmq/sbin/rabbitmq-defaults
    2. sed -i 's@^LOG_BASE=.*@LOG_BASE=/usr/local/rabbitmq/var/log/rabbitmq@' /usr/local/rabbitmq/sbin/rabbitmq-defaults
    3. mkdir -p /usr/local/rabbitmq/var/{lib,log}/rabbitmq
  3. 一般用户(rabbitmq)运行 RabbitMQ。

    1. wget http://pkgs.fedoraproject.org/cgit/rpms/rabbitmq-server.git/plain/rabbitmq-script-wrapper
    2. sed -i 's@cd /var/lib/rabbitmq@cd /usr/local/rabbitmq/var/lib/rabbitmq@g' rabbitmq-script-wrapper #更改rabbitmq数据存储目录
    3. sed -i 's@/usr/lib/rabbitmq/bin/@/usr/local/rabbitmq/sbin/@g' rabbitmq-script-wrapper
    4. chmod +x rabbitmq-script-wrapper
    5. cp rabbitmq-script-wrapper /usr/sbin/rabbitmqctl
    6. cp rabbitmq-script-wrapper /usr/sbin/rabbitmq-server
    7. cp rabbitmq-script-wrapper /usr/sbin/rabbitmq-plugins
    8. chown -R rabbitmq.rabbitmq /usr/local/rabbitmq/var
  4. rabbitmq 日志割接。

    1. cat >> /etc/logrotate.d/rabbitmq-server << EOF
    2. /usr/local/rabbitmq/var/log/rabbitmq/*.log {
    3. weekly
    4. missingok
    5. rotate 20
    6. compress
    7. delaycompress
    8. notifempty
    9. sharedscripts
    10. postrotate
    11. /sbin/service rabbitmq-server rotate-logs > /dev/null
    12. endscript
    13. }
    14. EOF
  5. rabbitmq 启动脚本。

    1. vi /etc/init.d/rabbitmq-server
    2. #!/bin/sh
    3. #
    4. # rabbitmq-server RabbitMQ broker
    5. #
    6. # chkconfig: - 80 05
    7. # description: Enable AMQP service provided by RabbitMQ
    8. #
    9. ### BEGIN INIT INFO
    10. # Provides: rabbitmq-server
    11. # Required-Start: $remote_fs $network
    12. # Required-Stop: $remote_fs $network
    13. # Description: RabbitMQ broker
    14. # Short-Description: Enable AMQP service provided by RabbitMQ broker
    15. ### END INIT INFO
    16. # Source function library.
    17. . /etc/init.d/functions
    18. PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/erlang/bin
    19. NAME=rabbitmq-server
    20. DAEMON=/usr/sbin/${NAME}
    21. CONTROL=/usr/sbin/rabbitmqctl
    22. DESC=rabbitmq-server
    23. USER=rabbitmq
    24. ROTATE_SUFFIX=
    25. INIT_LOG_DIR=/usr/local/rabbitmq/var/log/rabbitmq
    26. PID_FILE=/var/run/rabbitmq/pid
    27. START_PROG="daemon"
    28. LOCK_FILE=/var/lock/subsys/$NAME
    29. test -x $DAEMON || exit 0
    30. test -x $CONTROL || exit 0
    31. RETVAL=0
    32. set -e
    33. [ -f /etc/default/${NAME} ] && . /etc/default/${NAME}
    34. [ -f /etc/sysconfig/${NAME} ] && . /etc/sysconfig/${NAME}
    35. ensure_pid_dir () {
    36. PID_DIR=`dirname ${PID_FILE}`
    37. if [ ! -d ${PID_DIR} ] ; then
    38. mkdir -p ${PID_DIR}
    39. chown -R ${USER}:${USER} ${PID_DIR}
    40. chmod 755 ${PID_DIR}
    41. fi
    42. }
    43. remove_pid () {
    44. rm -f ${PID_FILE}
    45. rmdir `dirname ${PID_FILE}` || :
    46. }
    47. start_rabbitmq () {
    48. status_rabbitmq quiet
    49. if [ $RETVAL = 0 ] ; then
    50. echo RabbitMQ is currently running
    51. else
    52. RETVAL=0
    53. # RABBIT_NOFILES_LIMIT from /etc/sysconfig/rabbitmq-server is not handled
    54. # automatically
    55. if [ "$RABBITMQ_NOFILES_LIMIT" ]; then
    56. ulimit -n $RABBITMQ_NOFILES_LIMIT
    57. fi
    58. ensure_pid_dir
    59. set +e
    60. RABBITMQ_PID_FILE=$PID_FILE $START_PROG $DAEMON \
    61. > "${INIT_LOG_DIR}/startup_log" \
    62. 2> "${INIT_LOG_DIR}/startup_err" \
    63. 0<&- &
    64. $CONTROL wait $PID_FILE >/dev/null 2>&1
    65. RETVAL=$?
    66. set -e
    67. case "$RETVAL" in
    68. 0)
    69. echo SUCCESS
    70. if [ -n "$LOCK_FILE" ] ; then
    71. touch $LOCK_FILE
    72. fi
    73. ;;
    74. *)
    75. remove_pid
    76. echo FAILED - check ${INIT_LOG_DIR}/startup_\{log, _err\}
    77. RETVAL=1
    78. ;;
    79. esac
    80. fi
    81. }
    82. stop_rabbitmq () {
    83. status_rabbitmq quiet
    84. if [ $RETVAL = 0 ] ; then
    85. set +e
    86. $CONTROL stop ${PID_FILE} > ${INIT_LOG_DIR}/shutdown_log 2> ${INIT_LOG_DIR}/shutdown_err
    87. RETVAL=$?
    88. set -e
    89. if [ $RETVAL = 0 ] ; then
    90. remove_pid
    91. if [ -n "$LOCK_FILE" ] ; then
    92. rm -f $LOCK_FILE
    93. fi
    94. else
    95. echo FAILED - check ${INIT_LOG_DIR}/shutdown_log, _err
    96. fi
    97. else
    98. echo RabbitMQ is not running
    99. RETVAL=0
    100. fi
    101. }
    102. status_rabbitmq() {
    103. set +e
    104. if [ "$1" != "quiet" ] ; then
    105. $CONTROL status 2>&1
    106. else
    107. $CONTROL status > /dev/null 2>&1
    108. fi
    109. if [ $? != 0 ] ; then
    110. RETVAL=3
    111. fi
    112. set -e
    113. }
    114. rotate_logs_rabbitmq() {
    115. set +e
    116. $CONTROL rotate_logs ${ROTATE_SUFFIX}
    117. if [ $? != 0 ] ; then
    118. RETVAL=1
    119. fi
    120. set -e
    121. }
    122. restart_running_rabbitmq () {
    123. status_rabbitmq quiet
    124. if [ $RETVAL = 0 ] ; then
    125. restart_rabbitmq
    126. else
    127. echo RabbitMQ is not runnning
    128. RETVAL=0
    129. fi
    130. }
    131. restart_rabbitmq() {
    132. stop_rabbitmq
    133. start_rabbitmq
    134. }
    135. case "$1" in
    136. start)
    137. echo -n "Starting $DESC: "
    138. start_rabbitmq
    139. echo "$NAME."
    140. ;;
    141. stop)
    142. echo -n "Stopping $DESC: "
    143. stop_rabbitmq
    144. echo "$NAME."
    145. ;;
    146. status)
    147. status_rabbitmq
    148. ;;
    149. rotate-logs)
    150. echo -n "Rotating log files for $DESC: "
    151. rotate_logs_rabbitmq
    152. ;;
    153. force-reload|reload|restart)
    154. echo -n "Restarting $DESC: "
    155. restart_rabbitmq
    156. echo "$NAME."
    157. ;;
    158. try-restart)
    159. echo -n "Restarting $DESC: "
    160. restart_running_rabbitmq
    161. echo "$NAME."
    162. ;;
    163. *)
    164. echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2
    165. RETVAL=1
    166. ;;
    167. esac
    168. exit $RETVAL

    保存后,添加执行权限,并设置自启动。

    1. chmod +x /etc/init.d/rabbitmq-server
    2. chkconfig --add rabbitmq-server
    3. chkconfig rabbitmq-server on
  6. 修改 rabbitmq.config 。

    特别注意默认用户名密码,请自行修改 default_user,default_pass,loopback_users。

    1. cat > /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config << EOF
    2. [
    3. {rabbit, [
    4. {tcp_listeners,[{"0.0.0.0",5672}]},
    5. {tcp_listen_options, [binary, {packet,raw},
    6. {reuseaddr,true},
    7. {backlog,128},
    8. {nodelay,true},
    9. {exit_on_close,false},
    10. {keepalive,true}]},
    11. {default_vhost, <<"/">>},
    12. {default_user, <<"guest">>},
    13. {default_pass, <<"guest">>},
    14. {loopback_users, ["guest"]},
    15. {default_permissions, [<<".*">>, <<".*">>, <<".*">>]}
    16. ]}
    17. ].
    18. EOF
  7. 开启 rabbitmq manager。

    1. cat > /usr/local/rabbitmq/etc/rabbitmq/enabled_plugins << EOF
    2. [rabbitmq_management].
    3. EOF
  8. 启动 rabbitmq 。

    1. service rabbitmq-server start

    启动 rabbitmq

  9. 进入管理页面。

    浏览器访问 http://公网IP:15672。

    在浏览器中访问 rabbitmq

    更多开源软件尽在云市场:https://market.aliyun.com/software

本文导读目录