zoukankan      html  css  js  c++  java
  • Linux RabbitMQ单机与集群部署

    1、下载rabbitMQ软件【这里以通用二进制包为准】

    wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.8.6/rabbitmq-server-generic-unix-3.8.6.tar.xz

     2、RabbitMQ 对Erlang版本要求

    到这里查看
    https://www.rabbitmq.com/which-erlang.html

    因为这里演示的版本是3.8.6,所以Erlang版本:21.3~23.X

    3、下载Erlang

    https://github.com/erlang/otp/archive/OTP-23.0.tar.gz

     4、Erlang安装

    # 安装Erlang
    ~]# yum install mesa-libGL-devel mesa-libGLU-devel freeglut-devel gcc glibc-devel make ncurses-devel openssl-devel autoconf xmlto libtool automake -y
    ~]# tar xvf otp-OTP-23.0.tar.gz
    ~]# cd otp-OTP-23.0
    otp-OTP-23.0]# ./otp_build autoconf
    ~]# ./otp_build autoconf && ./configure --prefix=/usr/local/erlang_23.0 && make && make install
    
    # 配置Erlang环境变量
    ~]# vi /etc/profile
    PATH=$PATH:/usr/local/erlang_23.0/bin/
    ~]# . /etc/profile

     5、安装RabbitMQ

    # 解压rabbitMQ
    ~]# tar xvf rabbitmq-server-generic-unix-3.8.6.tar.xz -C /usr/local/
    
    # 配置环境变量
    ~]# vi /etc/profile
    PATH=$PATH:/usr/local/erlang_23.0/bin/:/usr/local/rabbitmq_server-3.8.6/sbin/
    ~]# . /etc/profile
    
    # 命令启动rabbitMQ服务
    ~]# rabbitmq-server start    
    Configuring logger redirection
    
      ##  ##      RabbitMQ 3.8.6
      ##  ##
      ##########  Copyright (c) 2007-2020 VMware, Inc. or its affiliates.
      ######  ##
      ##########  Licensed under the MPL 2.0. Website: https://rabbitmq.com
    
      Doc guides: https://rabbitmq.com/documentation.html
      Support:    https://rabbitmq.com/contact.html
      Tutorials:  https://rabbitmq.com/getstarted.html
      Monitoring: https://rabbitmq.com/monitoring.html
    
      Logs: /usr/local/rabbitmq_server-3.8.6/var/log/rabbitmq/rabbit@localhost.log
            /usr/local/rabbitmq_server-3.8.6/var/log/rabbitmq/rabbit@localhost_upgrade.log
    
      Config file(s): (none)
    
      Starting broker... completed with 0 plugins.
      
    # 检查端口是否开启成功  
    ~]# netstat -tunlp | grep beam
    tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      70943/beam.smp      
    tcp6       0      0 :::5672                 :::*                    LISTEN      70943/beam.smp 

    6、启用RabbitMQ Web管理的插件

     ~]# rabbitmq-plugins enable rabbitmq_management
    Enabling plugins on node rabbit@localhost:
    rabbitmq_management
    The following plugins have been configured:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    Applying plugin configuration to rabbit@localhost...
    The following plugins have been enabled:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    
    set 3 plugins.
    Offline change; changes will take effect at broker restart.

     7、编写rabbitMQ启动脚本

    ~]# mkdir /usr/local/rabbitmq_server-3.8.6/var/run
    ~]# mkdir /usr/local/rabbitmq_server-3.8.6/script
    ~]# vi /usr/local/rabbitmq_server-3.8.6/script/rabbitmq
    ~]# chmod 755 /usr/local/rabbitmq_server-3.8.6/script/rabbitmq
    #!/bin/sh
    # chkconfig: 2345 64 36
    #
    # rabbitmq-server RabbitMQ broker
    #
    # 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/init.d/functions
    
    MQ_HOME=/usr/local/rabbitmq_server-3.8.6
    PATH=$PATH:/usr/local/erlang_23.0/bin/:$MQ_HOME/sbin/
    
    NAME=rabbitmq-server
    
    DAEMON=$MQ_HOME/sbin/rabbitmq-server
    CONTROL=$MQ_HOME/sbin/rabbitmqctl
    
    DESC=rabbitmq-server
    USER=rabbitmq
    ROTATE_SUFFIX=
    INIT_LOG_DIR=/usr/local/rabbitmq_server-3.8.6/var/log/
    PID_FILE=/usr/local/rabbitmq_server-3.8.6/var/run/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
    }
    
    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

     8、利用脚本启动服务

    ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq start
    ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq stop

     9、配置Web管理用户

    # 创建用户并且给用户设置管理员权限
    ~]# rabbitmqctl add_user admin admin
    ~]# rabbitmqctl set_user_tags admin administrator
    ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"  
    
    ~]# mkdir /etc/rabbitmq
    ~]# vi /usr/local/rabbitmq_server-3.8.6/etc/rabbitmq/rabbitmq.config 
    [
    {rabbit, [{tcp_listeners, [{"192.168.2.129",5672},{"127.0.0.1",5672}]}, {loopback_users, ["admin"]}]}
    ].
    ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq stop
    ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq start

    10、登陆Web界面

     11、上面配置演示的是单机版,下面进行集群配置

     12、主机列表配置如下:

    192.168.2.129 mq1 
    192.168.2.229 mq2 
    
    [root@mq1 ~]# cat /etc/hosts
    192.168.2.129 mq1 
    192.168.2.229 mq2 
    
    [root@mq2 ~]# cat /etc/hosts
    192.168.2.129 mq1 
    192.168.2.229 mq2

     13、集群配置

    # 选择mq1主机同步~/.erlang.cookie
    
    
    #复制.erlang.cookie先停止服务
    mq2 ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq stop
    
    #找一台MQ主机作做集群参照节点,把参照节点.erlang.cookie同步其他节点上,保持.erlang.cookie数据一致就好
    mq1 ~]# scp ~/.erlang.cookie root@mq2:~/.erlang.cookie
    
    mq1 ~]# cat .erlang.cookie
    PXYCFDSEHXSKBOKPGHAV
    
    mq2 ~]# cat .erlang.cookie
    PXYCFDSEHXSKBOKPGHAV
    
    #检查集群状态
    mq1 ~]# rabbitmqctl cluster_status
    Cluster status of node rabbit@mq1 ...
    Basics
    ...
    
    mq2 ~]# rabbitmqctl cluster_status             
    Cluster status of node rabbit@mq2 ...
    Basics
    ...
    
    #停止应用服务
    mq1 ~]# rabbitmqctl stop_app
    
    #将mq2增加到mq1集群中
    mq1 ~]# rabbitmqctl join_cluster --ram rabbit@mq2
    Clustering node rabbit@mq1 with rabbit@mq2
    
    #再开启应用
    mq1 ~]# rabbitmqctl start_app
    Starting node rabbit@mq1 ...

     14、访问Web界面查看

     15、集群的移除

    #先停止要删除的节点的服务
    mq2 ~]# /usr/local/rabbitmq_server-3.8.6/script/rabbitmq stop
    Stopping rabbitmq-server: 
    
    #mq1节点删除集群中mq2
    mq1 ~]# rabbitmqctl -n rabbit@mq1  forget_cluster_node rabbit@mq2
    Removing node rabbit@mq2 from the cluster
    
    
    #mq2节点恢复单机模式
    mq2 ~]# rm -f .erlang.cookie
    ~]# rabbitmqctl -n rabbit@mq2  forget_cluster_node rabbit@mq1 
    Removing node rabbit@mq1 from the cluster
    ~]# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@mq2 ...
    ~]# rabbitmqctl reset
    Resetting node rabbit@mq2 ...
    ~]# rabbitmqctl start_app
    Starting node rabbit@mq2 ...

    #恢复单机后,用户需要重新创建

     16、负载均衡

    略,可以选择Haproxy,Nginx,LVS
  • 相关阅读:
    canvas,画个纸飞机
    时钟
    去除滚动条,内容仍然可以滚动
    鼠标指针移入移出改变图片透明度
    Mysql数据库优化总结
    一次利用nginx漏洞的木马事件
    一个批量删除大表数据的shell小脚本
    MegaCli监控raid卡磁盘信息以及相关的shell脚本
    MYSQL delete语句不支持别名?
    一次Mysql数据库服务器磁盘空间满引发的写入和同步问题
  • 原文地址:https://www.cnblogs.com/ygbh/p/13461525.html
Copyright © 2011-2022 走看看