一、搭建
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、添加配置