RabbitMQ-集群

Posted weixin_43956692

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ-集群相关的知识,希望对你有一定的参考价值。

一、搭建

1、创建三个虚拟机

2、修改三台主机的hostname,分别为node1,node2,node3,分别重启

vi /etc/hostname
reboot

        3、配置各个主机的hosts文件,让各个节点都能互相识别对方

vi /etc/hosts
#添加下面配置
192.168.xxx.165 node1
192.168.xxx.167 node2
192.168.xxx.168 node3

        4、为确保各个节点的cookie文件使用的是同一个值,在node1上执行远程操作命令(.erlang.cookie是个隐藏文件)

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

        5、启动RabbitMQ服务,顺带启动Erlang虚拟机和RabbitMQ应用服务,在三个节点分别执行以下命令

rabbitmq-server -detached

       6、在节点二执行如下命令(这里需要关闭各节点的防火墙 systemctl stop firewalld 不然无法连接)

 rabbitmqctl stop_app  # (rabbitmqctl stop 会将erlang虚拟机关闭, rabbitmqctl stop_app 只关闭RabbitMQ服务)
 rabbitmqctl reset   #重置
 rabbitmqctl join_cluster rabbit@node1  #关联节点1
 rabbitmqctl start_app #启动服务

       7、在节点三执行如下命令

 rabbitmqctl stop_app  # (rabbitmqctl stop 会将erlang虚拟机关闭, rabbitmqctl stop_app 只关闭RabbitMQ服务)
 rabbitmqctl reset   #重置
 rabbitmqctl join_cluster rabbit@node2  #关联节点2
 rabbitmqctl start_app #启动服务

      8、查看集群状态

rabbitmqctl cluster_status

   9、重新设置账户

#创建账号
rabbitmqctl add_user admin 123
#设置用户角色
rabbitmqctl set_user_tags admin administrator
#设置用户权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

   10、登录

    11、解除集群节点

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
rabbitmqctl forget_cluster_node rabbit@node2(在node1上执行)
  二、镜像队列

         搭建

      结果

      就算整个集群只剩下一台机器,依然能消费队列里面的消息,说明队列里面的消息被镜像队列传递到相应的机器里面了。

  三、高可用负载均衡

         HAProxy实现负载均衡

         HAProxy提供高可用性、负载均衡及基于TCPHTTP 应用的代理,支持虚拟主机,他是免费的,快速并且可靠的一种解决方案。HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。

  四、Federation Exchange

         搭建

         1、需要保证每台节点单独运行

         2、在每台机器上开始federation插件

rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management

      3、必须先有下游节点交换机(先在node2创建fed_exchange)【部分代码】

       //声明交换机
        channel.exchangeDeclare(FED_EXCHANGE,BuiltinExchangeType.DIRECT);
        //声明队列
        channel.queueDeclare("node2_queue",true,false,false,null);
        //绑定
        channel.queueBind("node2_queue",FED_EXCHANGE,"routeKey");

      4、在downstream(node2)配置upstream(node1)

      5、添加policy

  五、Federation Queue

         联邦队列可以在多个Broker节点(或者集群)之间为单个队列提供均衡负载功能。一个联邦队列可以连接一个或者多个上游队列(upstream queue)并从这些上游队列中获取消息以满足本地消费者消费消息的需求。

        搭建(同上)只是在策略选项上选择则队列即可

  五、Shovel

         和Federation具备的数据转发功能类似,Shovel够可靠、持续地从一个broker中的队列(作为源端)拉取数据并转发至另一个Broker中的交换机(作为目的端),作为源端地队列和作为目的端地交换机可以同时位于同一个Broker,也可以位于不同的broker上

       搭建

       1、开启插件(每台机器都需要)

rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management

   2、添加配置

以上是关于RabbitMQ-集群的主要内容,如果未能解决你的问题,请参考以下文章

【rabbitMQ】rabbitMQ集群节点重新加入集群相关操作

Linux CentOS6.5下RabbitMQ集群部署配置

rabbitmq集群搭建方法简介(测试机linux centos)

Linux搭建Rabbitmq集群

Linux搭建Rabbitmq集群

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》