zoukankan      html  css  js  c++  java
  • rabbimq3.7系列安装教程

    引言:

        RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。

    rabbitmq的安装:

    1.介绍:

    Rabbit模式大概分为以下三种:单一模式、普通模式、镜像模式 单一模式:最简单的情况,非集群模式,即单实例服务。

    普通模式:默认的集群模式。 queue创建之后,如果没有其它policy,则queue就会按照普通模式集群。对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构,但队列的元数据仅保存有一份,即创建该队列的rabbitmq节点(A节点),当A节点宕机,你可以去其B节点查看,./rabbitmqctl list_queues 发现该队列已经丢失,但声明的exchange还存在。 当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。 所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。 该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。 如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,队列数据就丢失了。

    镜像模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。 该模式解决了上述问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 所以在对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置policy,然后客户端创建队列的时候,rabbitmq集群根据“队列名称”自动设置是普通集群模式或镜像队列。具体如下: 队列通过策略来使能镜像。策略能在任何时刻改变,rabbitmq队列也近可能的将队列随着策略变化而变化;非镜像队列和镜像队列之间是有区别的,前者缺乏额外的镜像基础设施,没有任何slave,因此会运行得更快。 为了使队列称为镜像队列,你将会创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。

    2.单机安装:

    准备工作: 安装时请注意: 因为rabbtmq是基于erlang语言开发,所以安装之前需要安装erlang环境,本节采用rabbimq3.7.x为演示版本(后面会有专门一节介绍3.8系列版本,为了稳定,我采用3.7来搭建环境,因为还要搭建集群环境)。

    rabbitmq官网:https://www.rabbitmq.com/

    erlang下载:

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

    github 下载: https://github.com/rabbitmq/erlang-rpm/releases

    rabbitmq系列版本下载:https://github.com/rabbitmq/rabbitmq-server/releases

    rabbitmq3.6.15版本之前下载:https://www.rabbitmq.com/releases/rabbitmq-server/

    # 注意:
    rabbitmq的安装和erlang的版本有一定的匹配对应关系,如果安装的版本不对会安装不了,这点请大家注意:

    关于rabbitmq和erlang对应关系可以参考:https://www.rabbitmq.com/which-erlang.html

    2.1 下载:

        

     

     

    我准备的版本如下: 

    2.2 安装步骤:

    2.2.1:准备一台机器,设置好ip,关闭防火墙,使用我们的远程工具xshell或者secureCRT连接上去image-20200323180116936

     

    2.2.2: 把上面下载的安装包上传到指定目录,或者家目录下。我是以root用户登录,在root家目录创建了mq文件夹(注意:我的虚拟机系统都是centos7的,所以我选择的安装包都是el7的)image-20200323180130110

     

    2.2.3 安装erlang和socat

    rpm -ivh erlang-22.3-1.el7.x86_64.rpm   
    rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm

     

    2.2.4 安装rabbitmq:

     rpm -ivh rabbitmq-server-3.7.23-1.el7.noarch.rpm 
    ** 安装rabbitmq, 配置文件模板的位置需要修改
    默认配置文件模板会在/usr/share/doc/rabbitmq-server-3.7.23/rabbitmq.config.example 。需要把配置文件copy到/etc/rabbimq/下

    2.2.5 修改配置文件到/etc/rabbimq/下

    cp /usr/share/doc/rabbitmq-server-3.7.23/rabbitmq.config.example /etc/rabbitmq/
    mv rabbitmq.config.example rabbitmq.config --修改配置文件名字   rabbitmq.config才是系统识别的名字

    2.2.6修改配置文件,打开来宾账户。默认是关闭的。

    vim rabbitmq.config
    修改前: %% {loopback_users, []},    
    修改后: {loopback_users, []}
    注意,%% 和 , 都要去除

    2.2.7 安装rabbitmq的桌面插件:

    rabbitmq-plugins enable rabbitmq_management

     

     

    2.2.8 启动rabbitmq

    ## 安装rabbitmq的后,这个服务会自动生成,rabbitmq-server可以直接使用
    systemctl start rabbitmq-server   --启动
    systemctl stop rabbimq-server     --停止服务
    systemctl status rabbitmq-server --查看启动状态

    2.2.9 可视化链接测试:

    到步骤2.2.8 我们已经完成了rabbitmq单机版的安装,它可以满足一般业务请求。

    访问:http://192.168.236.139:15672/#/ 注意:我自己搭建的主机是192.168.236.139,可视化端口是15672

    默认账户密码是 guest / guest -- 这步是因为我打开来宾账户才允许登录,不打开是不允许登录的。进去主页面如下:

    ​到这我们单机版的rabbitmq就安装完成了,关于可视化页面上的功能介绍后续再补充,本节主要讨论安装

    3.集群安装:

    ## 集群搭建和单机搭建步骤都差不多。大家在搭建的时候注意一些小细节就可以了
    安装步骤:
    1.准备三台主机,ip对应关系如下
      192.168.236.138  mq1-master
       192.168.236.136  mq2-slave1
       192.168.236.137 mq3-slave2
       2.修改/etc/hosts文件  主机之间识别
      2.1.先修改mq1-master节点
               192.168.236.138 mq1-master
               192.168.236.136 mq2-slave1
               192.168.236.137 mq3-slave2
    保存退出:
               scp /etc/hosts root@mq2-slave1:/etc/
               scp /etc/hosts root@mq3-slave3:/etc/
    ## 使用scp命令吧hosts文件同步到其他两台主机,不需要重启。
           2.2 关闭三台机器的防火墙:
          systemctl stop firewalld --关闭
       3.上传安装包
      mkdir mq   -- 在这我创建了一个mq来保存安装包
    erlang-22.3-1.el7.x86_64.rpm
    rabbitmq-server-3.7.23-1.el7.noarch.rpm
    socat-1.7.3.2-2.el7.x86_64.rpm
        ## 使用scp命令同步到另外两台主机
        cd  -- 先回到家目录
       scp -r mq/ root@mq2-slave1:/root/
       scp -r mq/ root@mq3-slave2:/root/
    4.安装。同单机安装顺序
      rpm -ivh erlang-22.3-1.el7.x86_64.rpm
       rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
       rpm -ivh rabbitmq-server-3.7.23-1.el7.noarch.rpm
    ## 在mq2-slave1和mq3-slave2机器上也执行上述操作
        5.复制配置文件到/etc/rabbitmq/
    cp /usr/share/doc/rabbitmq-server-3.7.23/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
    6.修改配置文件,允许来宾用户登录
        vim rabbitmq.config
    修改前: %% {loopback_users, []},    
    修改后: {loopback_users, []}
    ## 在mq2-slave1和mq3-slave2机器上也执行上述操作 也可以使用scp操作
         7.可视化插件安装:
        rabbitmq-plugins enable rabbitmq_management
         ## 在mq2-slave1和mq3-slave2机器上也执行上述操作
         8.启动rabbimq-server服务
    systemctl start rabbitmq-server
     ## 在mq2-slave1和mq3-slave2机器上也执行上述操作
    systemctl status rabbitmq-server  -- 查询一下状态
         ## 可以访问一下 ip:15672/ 试一下是否成功
        ###到这集群前面的配置搭建工作已完成,下面继续完成主从集群
         9.同步erlang.cooker
    9.1 先关闭三台rabbitmq服务
          systemctl stop rabbitmq-server
            9.2 同步cooker
            scp /var/lib/rabbitmq/.erlang.cookie root@mq2-slave1:/var/lib/rabbitmq/
               scp /var/lib/rabbitmq/.erlang.cookie root@mq3-slave2:/var/lib/rabbitmq/
         10.集群配置:[摘自官网]
        10.1
          # on mq1-master
               rabbitmq-server -detached
               # on mq2-slave1
               rabbitmq-server -detached
               # on mq3-slave2
      rabbitmq-server -detached
    10.2
               # on mq1-master
               rabbitmqctl cluster_status
               # => Cluster status of node rabbit@rabbit1 ...
               # on mq2-slave1
               rabbitmqctl cluster_status
               # => Cluster status of node rabbit@rabbit2 ...
               # on mq3-slave2
               rabbitmqctl cluster_status
            10.3  在mq2-slave1主机上执行   【mq3-slave2主机也执行此操作】
      # on rabbit2
               rabbitmqctl stop_app
               # => Stopping node rabbit@rabbit2 ...done.

               rabbitmqctl reset
               # => Resetting node rabbit@rabbit2 ...

               rabbitmqctl join_cluster rabbit@rabbit1
               # => Clustering node rabbit@rabbit2 with [rabbit@rabbit1] ...done.

               rabbitmqctl start_app
               # => Starting node rabbit@rabbit2 ...done.

    注意:

    1.上述集群只有在主节点存在的情况下,集群才稳健。

    2.上述集群的exchange和队列都是实时同步的

    3.如果主节点宕机,其他节点无法对外提供服务

    4.镜像安装:

    镜像安装是基于普通集群安装的,下面在集群安装的环境下进行简单配置即可实现,在
    ## 在任意一台机器上执行,我在mq1-master主节点上配置
    1.查看当前策略
      rabbitmqctl list_policies
       2.添加策略
      rabbitmqctl set_policy 策略名 “正则匹配队列或者exchange” Definition
           ## ^ 代表匹配所有
        eg:  rabbitmqctl set_policy huhy  '^' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    设置成功访问可视化桌面如下:

        4.删除策略
      rabbitmqctl clear_plolicies "策略名"

     

  • 相关阅读:
    python面向对象中的一些特殊__方法__
    mysql数据库的优化和查询效率的优化
    详解python的垃圾回收机制
    基于django的自定义简单session功能
    使用python制作验证码
    Netty 系列之 Netty 高性能之道
    Java提高篇(二七)-----TreeMap
    Oracle、MySql、SQLServer 数据分页查询
    深入理解数据库原理系列(1)---日志系统原理
    34个数据库常见面试题讲解
  • 原文地址:https://www.cnblogs.com/huhongy/p/12558305.html
Copyright © 2011-2022 走看看