RabbitMQ部署

RabbitMQ单机部署

windows部署RabbitMQ
  • 工具包

    • 需要先下载:

      • 校内FTP ftp://10.0.112.195

    • otp_win64_17.3.exe

    • rabbitmq-server-3.4.1

  • 安装Erlan

  • 安装RabbitMQ

    • RabbitMQ安装完成,如果需要启动停止或者是重新安装,请使用下面方法

    • 启用管理工具

      • 1、打开RabbitMQ的命令窗口
      • 2、输入命令安装RabbitMQ的插件
        • rabbitmq-plugins enable rabbitmq_management

      • 3、访问测试是否安装成功。http://127.0.0.1:15672
      • 4、访问成功
        • 默认账号密码:guest/guest

Linux部署RabbitMQ

环境

  • 关闭防火墙,关闭selinux

  • 配置yum源头 ,配置elel扩展源

  • 192.168.88.120 设置主机名和域名解析  hostnamectl set-hostname rabbitmq1

  • 192.168.88.121 设置主机名和域名解析 ....rabbitmq2

  • 192.168.88.122 设置主机名和域名解析 ....rabbitmq3

  • vim /etc/hosts

192.168.88.120 rabbitmq1
192.168.88.121 rabbitmq2
192.168.88.122 rabbitmq3

安装Erlang

  • [root@localhost ~]# yum -y install erlang -y

安装RabbitMQ

  • [root@localhost ~]# yum install -y rabbitmq-server

修改配置文件

cp /usr/share/doc/rabbitmq-server-3.3.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config 

  • vim /etc/rabbitmq/rabbitmq.config
  • //打开配置文件,53行 去掉注释%%和逗号

{loopback_users, []}

  • loopback_users:这是一个配置选项,用于定义哪些用户只允许通过本地环回接口(loopback interface)连接,即只能从本地机器进行连接,通常是通过 IP 地址 127.0.0.1

  • []:表示一个空列表。从用户名到用户组的所有用户都不在这个列表中,因此表示不限制任何用户必须从本地连接。这意味着任何用户可以从远程位置连接到 RabbitMQ 实例,而不仅仅是从本地。

安装插件并启动服务

  • rabbitmq-plugins enable rabbitmq_management

    • web管理界面工具

  • 为了使这些更改生效,需要重新启动 RabbitMQ 服务

    • systemctl restart rabbitmq-server

  • rabbitmqctl cluster_status

    • 查看节点状态。(下图是node1节点)

[root@rabbitmq1 ~]# rabbitmqctl cluster_status

访问测试

客户端介绍

  • 1、界面介绍

  • 2、设置虚拟主机与添加用户
    • 添加用户

  • 3、命令行添加用户,设置tags
    • (开发者)查看所有的队列:rabbitmqctl list_queues

    • (开发者)清除所有的队列:rabbitmqctl reset

    • 添加用户:rabbitmqctl add_user username password

      • username 换掉 passwd 换掉 谢谢

    • 分配角色:rabbitmqctl set_user_tags username administrato

[root@rabbitmq1 ~]# rabbitmqctl add_user mxl1 1234
[root@rabbitmq1 ~]# rabbitmqctl set_user_tags chenfuguo administrator

  • 删除用户命令

    • rabbitmqctl delete_user testuser
      
  • 新增虚拟主机:rabbitmqctl add_vhost vhost_name

    [root@rabbitmq1 ~]# rabbitmqctl add_vhost iphone
    
  • 将新虚拟主机授权给新用户:rabbitmqctl set_permissions -p vhost_name username ".*" ".*" ".*"(后面三个”*”代表用户拥有配置、写、读全部权限)

    [root@rabbitmq1 ~]# rabbitmqctl set_permissions -p  iphone chenfuguo  ".*" ".*" ".*"
    

注释

  • 用户角色

    • 虚拟主机

      • 关于虚拟主机(Virtual Host)其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host

    • 用户角色有下面几种:

    • \1. 超级管理员administrator:可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。

    • \2. 监控者monitoring:可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

    • \3. 策略制定者policymaker:可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

    • \4. 普通管理者management:仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。无法登陆管理控制台,通常就是普通的生产者和消费者。

    • \5. 其他

RabbitMQ集群部署

消息中间件RabbitMQ,一般以集群方式部署, 主要提供消息的接受和发送,实现各微服务之间的消息异步。 以下将介绍RabbitMQ+HA方式进行部署。

原理介绍
  • cookie

    • ​ RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证来实现分布式,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点。

  • 内存节点和磁盘节点

    • ​ RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般都建立为磁盘节点,为了防止机器重启后的消息消失;

  • 普通模式和镜像模式

    • ​ RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过RabbitMQ HA镜像队列进行消息队列实体复制。

    • 普通模式

      • ​ 普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

    • 镜像模式

      • ​ 镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

环境要求
  • 1、所有节点需要再同一个局域网内;

  • 2、所有节点需要有相同的 erlang cookie,否则不能正常通信,为了实现cookie内容一致,采用scp的方式进行。

  • 3、准备三台虚拟机,配置相同

    • 192.168.88.120 设置主机名和域名解析  hostnamectl set-hostname rabbitmq1

    • 192.168.88.121 设置主机名和域名解析 ....rabbitmq2

    • 192.168.88.122 设置主机名和域名解析 ....rabbitmq3

    • 操作系统:centos7.2以上

  • 4、集群中所有节点都需要hosts文件解析

部署过程(每个节点都配置)
  • 1、所有节点配置 vim /etc/hosts

    192.168.88.120 rabbitmq1
    192.168.88.121 rabbitmq2
    192.168.88.122 rabbitmq3

  • 2、所有节点安装erLang和rabbitmq

    • 见linux系统中单机部署rabbitmq

yum -y install erlang -y

yum install -y rabbitmq-server

cp /usr/share/doc/rabbitmq-server-3.3.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config 

vim /etc/rabbitmq/rabbitmq.config 


53行解注释
{loopback_users, []}

vim显示行号

:set nu

:53

  • 3、导入rabbitmq 的管理界面

    • rabbitmq-plugins enable rabbitmq_management

    • systemctl restart rabbitmq-server

  • 4、设置erlang运行节点

    • 一定要保证三台机器的cookie内容一致

      • 找到erlang cookie文件的位置,

        • 源码包部署一般会存在.erlang.cookie文件;

        • rpm包部署一般是在/var/lib/rabbitmq/.erlang.cookie。

        • 将 rabbitmq1 的该文件使用rsync或者是scp复制到 rabbitmq2、rabbitmq3,文件权限需要是400。

[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie  rabbitmq3:/var/lib/rabbitmq/.erlang.cookie

[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie  rabbitmq2:/var/lib/rabbitmq/.erlang.cookie

    • cat /var/lib/rabbitmq/.erlang.cookie

  • (rabitmq2和rabbitmq3):重复服务

  • systemctl restart rabbitmq-server

  • rabbitmq2和rabbitmq3

    • #rabbitmqctl stop

      • 关闭rabbitmq2和rabbitmq3的服务(不要关rabbitmq1) 如果2,3节点没有启动服务,会提示关闭错误。

      • 也就是,确保所有的活动任务和连接都被正常处理和关闭

      • 一直 exit 退出

  • rabbitmq2和rabbitmq3

    • #rabbitmq-server -detached

      • 2、3 独立运行节点,warning提示不用理会

      • Warning: PID file not written; -detached was passed.

  • rabbitmqctl cluster_status

    • 查看各个节点状态。

    • Cluster status of node rabbit@rabbitmq1

  • 每台主机看到的只有一个的server信息。目前尚未组合成集群

  • 5、添加用户并设置密码

    • 由于guest这个用户,只能在本地访问,所以我们要在每个节点上,新增一个用户并赋予对/的所有权限,然后添加到管理员组中,让此用户能够远程访问

    • 三个主机都操作

    • rabbitmqctl add_user admin admin

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

    • rabbitmqctl set_user_tags admin administrator

  • 6、访问测试

    • http://ip:15672

    • 账号:admin

    • 密码:admin

    • 此时每个节点是单独的一台RabbitMQ,下面来将他们组成集群。

组成集群
  • 简介

    • rabbitmq-server 启动时,会一起启动:节点和应用,它预先设置RabbitMQ应用为standalone(脱机)模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。(停应用,不停止节点)

  • 1、将node2、node3加入到node1中组成集群

    • 磁盘节点

      • 第二台节点

        • node2# rabbitmqctl stop_app

          • 仅停止应用,不关闭节点(注意是节点2)

        • node2# rabbitmqctl join_cluster rabbit@rabbitmq1

          • 集群名字一定不要写错(查看rabbitmq1 的节点状态)

        • node2# rabbitmqctl start_app

          • 如果此时查看节点1,会发现集群节点信息增加

第三台节点

  • node3# rabbitmqctl stop_app

  • node3# rabbitmqctl join_cluster rabbit@rabbitmq1 ##集群名字一定不要写错

  • node3# rabbitmqctl start_app

    • 如果此时查看节点1,会发现集群节点信息增加

    • 内存节点(了解)

      • #使用内存节点加入集群

      • node2 # rabbitmqctl join_cluster --ram rabbit@rabbitmq1

  • 2、在任意节点上查看集群状态

    • node3# rabbitmqctl cluster_status

    • 输出信息

  • 3、在任意节点上设置镜像队列策略

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

    • 图示

点击mxl

  • 观察第二台主机:

  • 观察第三台主机:

然后在linux中

设置镜像队列策略
  • 语法介绍

    • rabbitmqctl set_policy -p vhost1 ha-all "^" '{"ha-mode":"all"}'

  • 案例中的命令

    • rabbitmqctl set_policy -p jinlongyu ha-all "^" '{"ha-mode":"all"}'

  • 注释

    • "coresystem"

      • vhost名称,此处应该填写“jinlongyu”

    • ha-all

      • 策略名称

    • "^"

      • queue的匹配模式为匹配所有的队列

    • { }

      • 为镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode

      • ha-mode

        • 指明镜像队列的模式,有效值为 all/exactly/nodes

        • all

          • 表示在集群中所有的节点上进行镜像,包含新增节点

        • exactly

          • (可选)表示在指定个数的节点上进行镜像,节点的个数由ha-params指定

        • nodes

          • (可选)表示在指定的节点上进行镜像,节点名称通过ha-params指定

      • ha-sync-mode

        • (可选)进行队列中消息的同步方式,有效值为automatic和manual

    • 提示

      • ​ 此时镜像队列设置成功。队列会被复制到各个节点,各个节点状态保持一致(这里的虚拟主机vhost1 。是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息队列进行隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)。

Rabbitmq+HAproxy

1、在独立服务器上安装HAProxy
  • 192.168.0.113

  • yum -y install haproxy

2、修改配置文件
  • vim /etc/haproxy/haproxy.cfg

    • global 
          
          log         127.0.0.1 local2
       
          chroot      /var/lib/haproxy
          pidfile     /var/run/haproxy.pid
          maxconn     4000
          user        haproxy
          group       haproxy
          daemon
       
          stats socket /var/lib/haproxy/stats
       
      defaults 
             log        global 
             mode       tcp 
             option     tcplog 
             option     dontlognull 
             retries    3 
             option redispatch 
             maxconn 2000 
             contimeout      5s 
             clitimeout      120s 
             srvtimeout      120s 
       
      listen rabbitmq_cluster 0.0.0.0:80#作为代理的服务器的IP和端口
             mode      tcp 
             balance roundrobin 
             server rabbit1  192.168.229.11:15672 check inter 5000 rise 2 fall 2 
             server rabbit2  192.168.229.12:15672 check inter 5000 rise 2 fall 2        
             server rabbit3  192.168.229.13:15672 check inter 2000 rise 2 fall 3
      ​
      ​
      listen monitor
          bind 0.0.0.0:8100#监控页面的访问端口
          mode http
          option httplog
          stats enable
          stats uri /rabbitmqstats
          stats refresh 30s
          stats auth admin:admin     
    • 修改三个服务器地址即可

3、重启HAProxy
  • systemctl restart haproxy

4、登录浏览器输入地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值