RabbitMQ单机到集群完整搭建(一)

RabbitMQ 安装和使用

注意:本文的安装位置默认为 /home/download下,并且版本也不是最新的,以下示例仅作参考!

一、安装依赖环境

  1. 在 http://www.rabbitmq.com/which-erlang.html 页面查看安装rabbitmq需要安装erlang对应的版本

  2. 在 https://github.com/rabbitmq/erlang-rpm/releases 页面找到需要下载的erlang版本,erlang-*.centos.x86_64.rpm就是centos版本的。

  3. 复制下载地址后,使用wget命令下载

    wget -P /home/download https://github.com/rabbitmq/erlang-rpm/releases/download/v21.2.3/erlang-21.2.3-1.el7.centos.x86_64.rpm
    
  4. 安装 Erlang

    sudo rpm -Uvh /home/download/erlang-21.2.3-1.el7.centos.x86_64.rpm
    
  5. 安装 socat

    sudo yum install -y socat
    

二、安装RabbitMQ

  1. 官方下载页面找到CentOS7版本的下载链接,下载rpm安装包

    wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm
    

    提示:可以在https://github.com/rabbitmq/rabbitmq-server/tags下载历史版本

  2. 安装RabbitMQ

    sudo rpm -Uvh /home/download/rabbitmq-server-3.7.9-1.el7.noarch.rpm
    

三、启动和关闭

  • 启动服务

    sudo systemctl start rabbitmq-server
    
  • 查看状态

    sudo systemctl status rabbitmq-server
    
  • 停止服务

    sudo systemctl stop rabbitmq-server
    
  • 设置开机启动

    sudo systemctl enable rabbitmq-server
    

注意:

1.启动如果失败,通常会提示我们执行 journalctl -xe 命令查看错误详情的,如下所示:
在这里插入图片描述

2.这里提示我们无法解析主机名:suvue,所以导致连接超时,因此我们执行命令 cd /etc/hosts,进入host文件中,将我们的主机名添加到127.0.0.1后面,如下图所示:
在这里插入图片描述

3.之后执行重启rabbitMq命令:sudo systemctl start rabbitmq-server,发现成功启动了
在这里插入图片描述

四、开启Web管理插件

  1. 开启插件

    rabbitmq-plugins enable rabbitmq_management
    

    说明:rabbitmq有一个默认的guest用户,但只能通过localhost访问,所以需要添加一个能够远程访问的用户。

  2. 添加用户

    rabbitmqctl add_user admin admin
    
  3. 为用户分配操作权限

    rabbitmqctl set_user_tags admin administrator
    
  4. 为用户分配资源权限

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

五、防火墙添加端口

  • RabbitMQ 服务启动后,还不能进行外部通信,需要将端口添加都防火墙

说明:

4369:是Erlang的端口/节点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用

5672/5671:AMQP 0-9-1和1.0客户端端口。

25672:用于RabbitMQ节点间和CLI工具通信,配合4369使用。

15672:Http_Api端口,管理员用户才能访问,用于管理rabbitMq,需要启动management插件。

  1. 添加端口

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
    
  2. 重启防火墙

    sudo firewall-cmd --reload
    

多机多节点集群部署

一、 环境准备

  • 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤

    • 10.10.1.41
    • 10.10.1.42
    • 10.10.1.43

    提示:如果使用虚拟机,可以在一台VM上安装好RabbitMQ后,创建快照,从快照创建链接克隆,会节省很多磁盘空间

二、修改配置文件

  1. 修改10.10.1.41机器上的/etc/hosts文件

    sudo vim /etc/hosts
    
  2. 添加IP和节点名

    10.10.1.41 node1
    10.10.1.42 node2
    10.10.1.43 node3
    
  3. 修改对应主机的hostname

hostname node1
hostname node2
hostname node3
  1. 10.10.1.41上的hosts文件复制到另外两台机器上

    sudo scp /etc/hosts root@node2:/etc/
    sudo scp /etc/hosts root@node3:/etc/
    

    说明:命令中的root是目标机器的用户名,命令执行后,可能会提示需要输入密码,输入对应用户的密码就行了

  2. 10.10.1.41上的/var/lib/rabbitmq/.erlang.cookie文件复制到另外两台机器上

    scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/
    

    提示:如果是通过克隆的VM,可以省略这一步

三、防火墙添加端口

  • 给每台机器的防火墙添加端口
  1. 添加端口

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
    
  2. 重启防火墙

    sudo firewall-cmd --reload
    

四、启动RabbitMQ

  1. 启动每台机器的RabbitMQ

    sudo systemctl start rabbitmq-server
    

    或者

    rabbitmq-server -detached
    
  2. 10.10.1.42加入到集群

    # 停止RabbitMQ 应用
    rabbitmqctl stop_app
    # 重置RabbitMQ 设置
    rabbitmqctl reset
    # 加入到集群
    rabbitmqctl join_cluster rabbit@node1 --ram
    # 启动RabbitMQ 应用
    rabbitmqctl start_app
    
  3. 查看集群状态,看到running_nodes,[rabbit@node1,rabbit@node2]表示节点启动成功

    rabbitmqctl cluster_status
    

    提示:在管理界面可以更直观的看到集群信息

  4. 10.10.1.43加入到集群

    # 停止 RabbitMQ 应用
    rabbitmqctl stop_app
    # 重置 RabbitMQ 设置
    rabbitmqctl reset
    # 节点加入到集群
    rabbitmqctl join_cluster rabbit@node1 --ram
    # 启动 RabbitMQ 应用
    rabbitmqctl start_app
    
  5. 重复地3步,查看集群状态


单机多节点部署

一、环境准备

  • 准备一台已经安装好RabbitMQ 的机器,安装方法见 安装步骤
    • 10.10.1.41

二、启动RabbitMQ

  1. 在启动前,先修改RabbitMQ 的默认节点名(非必要),在/etc/rabbitmq/rabbitmq-env.conf增加以下内容

    # RabbitMQ 默认节点名,默认是rabbit
    NODENAME=rabbit1
    
  2. RabbitMQ 默认是使用服务的启动的,单机多节点时需要改为手动启动,先停止运行中的RabbitMQ 服务

    sudo systemctl stop rabbitmq-server
    
  3. 启动第一个节点

    rabbitmq-server -detached
    
  4. 启动第二个节点

    RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
    
  5. 启动第三个节点

    RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
    
  6. 将rabbit2加入到集群

    # 停止 rabbit2 的应用
    rabbitmqctl -n rabbit2 stop_app
    # 重置 rabbit2 的设置
    rabbitmqctl -n rabbit2 reset
    # rabbit2 节点加入到 rabbit1的集群中
    rabbitmqctl -n rabbit2 join_cluster rabbit1 --ram
    # 启动 rabbit2 节点
    rabbitmqctl -n rabbit2 start_app
    
  7. 将rabbit3加入到集群

    # 停止 rabbit3 的应用
    rabbitmqctl -n rabbit3 stop_app
    # 重置 rabbit3 的设置
    rabbitmqctl -n rabbit3 reset
    # rabbit3 节点加入到 rabbit1的集群中
    rabbitmqctl -n rabbit3 join_cluster rabbit1 --ram
    # 启动 rabbit3 节点
    rabbitmqctl -n rabbit3 start_app
    
  8. 查看集群状态,看到{running_nodes,[rabbit3@node1,rabbit2@node1,rabbit1@node1]}说明节点已启动成功。

    rabbitmqctl cluster_status
    

    提示:在管理界面可以更直观的看到集群信息

三、防火墙添加端口

  • 需要将每个节点的端口都添加到防火墙
  1. 添加端口

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5674/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25674/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15674/tcp --permanent
    
  2. 重启防火墙

    sudo firewall-cmd --reload
    

镜像队列模式集群

  • 镜像队列属于RabbitMQ 的高可用方案,见:https://www.rabbitmq.com/ha.html#mirroring-arguments

  • 通过前面的步骤搭建的集群属于普通模式集群,是通过共享元数据实现集群

  • 开启镜像队列模式需要在管理页面添加策略,添加方式:

    1. 进入管理页面 -> Admin -> Policies(在页面右侧)-> Add / update a policy

    2. 在表单中填入:

            name: ha-all
         Pattern: ^
        Apply to: Queues
        Priority: 0
      Definition: ha-mode = all
      

      参数说明

      name: 策略名称,如果使用已有的名称,保存后将会修改原来的信息

      Apply to:策略应用到什么对象上

      Pattern:策略应用到对象时,对象名称的匹配规则(正则表达式)

      Priority:优先级,数值越大,优先级越高,相同优先级取最后一个

      Definition:策略定义的类容,对于镜像队列的配置来说,只需要包含3个部分: ha-modeha-paramsha-sync-mode。其中,ha-sync-mode是同步的方式,自动还是手动,默认是自动。ha-modeha-params 组合使用。组合方式如下:

    ha-modeha-params说明
    all(empty)队列镜像到集群类所有节点
    exactlycount队列镜像到集群内指定数量的节点。如果集群内节点数少于此值,队列将会镜像到所有节点。如果大于此值,而且一个包含镜像的节点停止,则新的镜像不会在其它节点创建。
    nodesnodename队列镜像到指定节点,指定的节点不在集群中不会报错。当队列申明时,如果指定的节点不在线,则队列会被创建在客户端所连接的节点上。
  • 镜像队列模式相比较普通模式,镜像模式会占用更多的带宽来进行同步,所以镜像队列的吞吐量会低于普通模式

  • 但普通模式不能实现高可用,某个节点挂了后,这个节点上的消息将无法被消费,需要等待节点启动后才能被消费。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值