高可用RabbitMQ集群搭建

1、版本:

Linux:Centos6.5

erlang:21.1

rabbitmq:3.7.8

2、环境

rabbitmq01 xxx.xx.xxx.144

rabbitmq02 xxx.xx.xxx.145

rabbitmq03 xxx.xx.xxx.146

分别在3台机器上配置/etc/hosts,如下

xxx.xx.xxx.144 mq144

xxx.xx.xxx.145 mq145

xxx.xx.xxx.146 mq146

3、部署过程

  1. 安装依赖环境:

    1)安装GCC GCC-C++ Openssl等模块,安装过就不需要安装了

    yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel  
  2. 下载erlang:

    官网下载:http://erlang.org/download/

    或者直接下载(采用)

    [root@mq144 ~]# cd /opt/rabbitmq/erlang
    [root@mq144 erlang]# wget http://erlang.org/download/otp_src_21.1.tar.gz 
  3. 安装erlang:

    解压:

    [root@mq144 erlang]# tar -zxvf otp_src_21.1.tar.gz
  4.  

    安装:

    [root@mq144 erlang]# cd otp_src_21.1
    [root@mq144 otp_src_21.1]# ./configure --prefix /opt/rabbitmq/erlangist
    [root@mq144 otp_src_21.1]# make
    [root@mq144 otp_src_21.1]# make install

    执行(./configure --prefix /opt/rabbitmq/erlangist)报错时,解决第一个odbc问题,运行如下命令:yum install unixODBC unixODBC-devel

    查看安装位置:

    [root@mq144 ~]# whereis erlang

    配置环境变量:

    在/etc/profile文件最后加上

    export PATH=$PATH:/opt/rabbitmq/erlangist/lib/erlang/bin

    执行

    source /etc/profile

    查看是否安装成功:

    erl

     

  5. 安装rabbitmq

    1、下载安装包

    [root@mq144 ~]# cd /opt/rabbitmq/rabbitmq
    [root@mq144 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz

    2、解压安装

    yum install -y xz
    xz -d rabbitmq-server-generic-unix-3.7.8.tar.xz
    tar -xvf rabbitmq-server-generic-unix-3.7.8.tar 

    配置环境变量:

    在/etc/profile文件最后加上

    export PATH=$PATH:/opt/rabbitmq/rabbitmq/rabbitmq_server-3.7.8/sbin

    执行

    source /etc/profile

    导入rabbitmq的管理界面

    cd /opt/rabbitmq/rabbitmq/rabbitmq_server-3.7.8/sbin
    rabbitmq-plugins enable rabbitmq_management
  6. 将.erlang.cookie拷贝到其他节点

    cat /home/keyten/.erlang.cookie
    scp keyten@xxx.xx.xxx.144:/home/keyten/.erlang.cookie  /home/keyten/

    scp root@xxx.xx.xxx.144:/root/.erlang.cookie /root
  7. 查看.erlang.cookie是否一致

    cat /root/.erlang.cookie
  8. 添加节点互通

    xxx.xx.xxx.144 rabbit@mq144
    xxx.xx.xxx.145 rabbit@mq145
    xxx.xx.xxx.146 rabbit@mq146

    ping 通另外两节点

    ping rabbit@mq145
    ping rabbit@mq146
  9. 选择一个节点stop,然后连接到另外节点

    rabbitmqctl stop_app
    ​
    rabbitmqctl join_cluster rabbit@mq144
    ​
    Clustering node rabbit@mq145 with rabbit@mq144
    ​
    rabbitmqctl start_app
  10. 将144设置为内存节点

    rabbitmqctl stop_app
    ​
    rabbitmqctl change_cluster_node_type  ram
    ​
    rabbitmqctl start_app
  11. 查看集群状态

    rabbitmqctl cluster_status
  12. 设置镜像队列策略

    在任意一个节点上执行如下操作(这里在node1上执行)

    首先,在web界面,登陆后,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);然后,在linux中执行如下命令

    rabbitmqctl set_policy -p rmqserver  ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    注意:
    -p Vhost: 可选参数,针对指定vhost下的queue进行设置
    Name: policy的名称
    Pattern: queue的匹配模式(正则表达式)
    Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
        ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
            all:表示在集群中所有的节点上进行镜像
            exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
            nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
        ha-params:ha-mode模式需要用到的参数
        ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual

    "rmqserver" vhost名称, "^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。

    则此时镜像队列设置成功。(这里的虚拟主机rmqserver是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息的隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)

    将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。完成这 6 个步骤后,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。

  13. 添加防火墙开放端口

    vi /etc/sysconfig/iptables 

    添加:三台机子根据IP对应端口开放

    例如:xxx.xx.xxx.144

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT

    重启防火墙:

    service iptables restart 

记得创建管理员用于登陆管理系统:

rabbitmqctl add_user admin admin

rabbitmqctl set_permissions -p "/" admin "." "." ".*"

rabbitmqctl set_user_tags admin administrator

posted @ 2019-05-11 09:16  谦谦君子-小乔  阅读(310)  评论(0编辑  收藏  举报