0%

【RabbitMQ】集群

关于RabbitMQ集群的实现方法


1 集群

1.1 环境准备

  • (1)克隆虚拟机
  • 虚拟机管理界面,右键虚拟机 -> 管理 -> 克隆
  • (2)修改机器hostname
    1
    2
    # 修改两台机器hostname用于区分
    vim /etc/hostname
  • (3)保存主机地址
    1
    2
    3
    4
    5
    # 将另外机器的ip地址保留,方便通讯
    vim /ect/hosts

    # 格式
    ip地址 hostname
  • (4)确保机器cookies文件一致
    1
    2
    # 确定好以一台主机为准,将该机器文件复制到其他机器上
    scp /var/lib/rabbitmq/.erlang.cookie root@主机名:/var/lib/rabbitmq/.erlang.cookie
  • (5)rabbitmq重启
    1
    rabbitmq-server -detached

1.2 集群

  • (1)加入集群
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 暂停rabbitmq_app
    rabbitmqctl stop_app

    # 重置
    rabbitmqctk reset

    # 集群加入到其他rabbitmq
    rabbitmqctl join_cluster rabbit@主机名

    # 启动rabbitmq_app
    rabbitmqctl start_app
  • (2)查看集群状态
    1
    rabbitmqctl cluster_status
  • (3)集群设置用户
    1
    2
    3
    4
    5
    6
    7
    8
    # 创建账号
    rabbitmqctl add_user 用户名 密码

    # 设置用户角色
    rabbitmqctl set_user_tags 用户名 角色(administrator)

    # 设置用户权限
    rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

1.3 脱离集群

  • (1)解除
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 停止rabbitmq app
    rabbitmqctl stop_app

    # 重置
    rabbitmqctl reset

    # 开启rabbitmq app
    rabbitmqctl start_app

    # 解除集群(主集群机器运行)
    rabbitmqctl forget_cluster_node rabbit@主机名

2 镜像队列

2.1 概念

  • 镜像队列: 将主服务创建的队列,和消息备份到另一个从服务上,该从服务的队列就为镜像队列,避免主服务宕机,导致数据丢失以及服务不可用

2.2 实现方法


3 负载均衡

  • 此为nginx的内容,故不多细说,有需去查看之前nginx文章

4 Federation

4.1 概念

  • Federation: 翻译过来为“联合”,可以理解为同步。例:为了减少网络延迟,不同地区部署不同的rabbitmq,但需要这些不同地区的rabbitmq的数据进行同步,否则更改地区之后,数据不一致。

4.2 步骤

  • (1)插件开启
    1
    2
    rabbitmq-plugins enable rabbitmq_federation
    rabbitmq-plugins enable rabbitmq_federation_management
  • (2)添加同步数据上游
  • 上游数据会同步到下游
  • (3)配置上游(连接)
  • federation交换机或队列都可以(2者选其1)

5 Shovel

5.1 概念

  • Shovel: 翻译为“铲子”。功能和federation一样,也是数据同步。只是操作步骤比federation简单明了,只需配置源和目的地,会自动将源的消息同步到目的地中

5.2 配置

  • (1)插件开启
    1
    2
    rabbitmq-plugins enable rabbitmq_shovel
    rabbitmq-plugins enable rabbitmq_shovel_management
  • (2)配置源与目的地