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 "策略名"

 

posted @ 2020-03-24 12:51  陽66  阅读(512)  评论(0编辑  收藏  举报