zoukankan      html  css  js  c++  java
  • 高可用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

  • 相关阅读:
    Python统计词频的几种方式
    GO语言系列之 基本数据类型和操作符
    GO语言系列之 初识go语言
    Python实现聚类算法AP
    最大似然估计
    Breastcancer社区评论下载
    数据可视化之pyecharts
    Requests库
    nginx内置变量
    Tomcat内部结构、工作原理、工作模式和运行模式
  • 原文地址:https://www.cnblogs.com/qiaoliming/p/10847715.html
Copyright © 2011-2022 走看看