一:集群 集群将多台机器连接在一起,形成一个逻辑代理 通信是通过Erlang消息传递的,因此集群中的所有节点都必须具有相同的Erlang cookie 群集中计算机之间的网络链接必须可靠,群集中的所有计算机必须运行相同版本的RabbitMQ和Erlang 1.单机版缺陷: (1)单台RabbitMQ服务器的吞吐量有限 (2)单节点遇到内存崩溃、机器掉电或者主板故障会导致服务不可用 2.搭建步骤: (1)修改 3 台机器的主机名称 vim /etc/hostname (2)配置各个节点的 hosts 文件,让各个节点都能互相识别对方 vim /etc/hosts 10.211.55.74 node1 10.211.55.75 node2 10.211.55.76 node3 (3)确保各个节点的 cookie 文件使用的是同一个值 在 node1 上执行远程操作命令 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 (4)启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务(在三台节点上分别执行以下命令) rabbitmq-server -detached (5)在node2执行 rabbitmqctl stop_app(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭RabbitMQ 服务) rabbitmqctl reset rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app (6)在node3执行 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@node2 rabbitmqctl start_app (7)查看集群状态 rabbitmqctl cluster_status (8)需要重新设置用户 创建账号:rabbitmqctl add_user admin 123 设置用户角色:rabbitmqctl set_user_tags admin administrator 设置用户权限:rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" (9)解除集群节点(node2 和 node3 机器分别执行) rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app rabbitmqctl cluster_status rabbitmqctl forget_cluster_node rabbit@node2(node1 机器上执行) 3.镜像队列 如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用 引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中 的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性 (1)启动三台集群节点 (2)随便找一个节点 Add a policy 4.Haproxy+Keepalive 实现高可用负载均衡 Haproxy 实现负载均衡 Keepalived 实现双机热备(高可用) 二:Federation Exchange 与 Federation Queue 当我们有多个rabbitmq集群的时候,如果想要单向的同步消息 federated exchange 或 federated queue 能够从一个或多个 upstream 接收到消息 (1)开启 federation 相关插件 rabbitmq-plugins enable rabbitmq_federation rabbitmq-plugins enable rabbitmq_federation_management (2)Add a new upstream (3)Add a policy 三.Shovel (1)开启插件 rabbitmq-plugins enable rabbitmq_shovel rabbitmq-plugins enable rabbitmq_shovel_management (2)添加shovel源和目的地



