rabbitmq 集群

搭建集群

rabbitmq集群允许消费者和生产者在RabbitMQ单个节点崩溃的情况下继续运行,它可以通过添加更多的节点来线性的扩展消息通信的吞吐量。当失去一个rabbitMQ节点时,客户端能够重新连接到集群中的任何其他节点并继续生产或者消费
注意:集群也不能保证消息的万无一失。集群会备份节点的所有元数据信息(队列元数据:名称及属性;交换器:名称及属性;绑定关系元数据:交换器与队列或者交换器与交换器之间的绑定关系;vhost元数据:vhost内的队列、交换器和绑定提供命名空间及安全属性),但并不会备份节点中的消息(可以通过特殊配置镜像队列来备份)。即当节点崩溃时,该节点中的消息也会丢失。

多机多节点

rabbitmq对延迟非常敏感,应当只在本地局域网内使用。

  1. 配置host,保证各个主机都可以使用主机名称正确的访问到其他主机
    例如:三台机器主机名称分别为node1、node2、node3,需配置host如下:
192.168.0.2node1
192.168.0.3node2
192.168.0.4node3
  1. 编辑rabbitMQ的cookie文件,确保各个结点的cookie文件使用的是同一个值
    cookie相当于密钥令牌,集群中的rabbitmq节点需要通过交换密钥令牌以获得相互认证。

其他操作参考单机多节点,启动命令去掉节点参数即可。

单机多节点
  1. 启动命令
rabbitmq_node_port=5672 rabbitmq_nodename=rabbit1 rabbitmq-server -detached
rabbitmq_node_port=5673 rabbitmq_nodename=rabbit2 rabbitmq-server -detached
rabbitmq_node_port=5674 rabbitmq_nodename=rabbit3 rabbitmq-server -detached

注意:当第一个启动成功后,第二个第三个启动失败大多数是因为配置端口冲突造成的。除了rabbitmq的端口需要修改之外,mq的插件例如rabbitmq managment的端口也需要修改

RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" rabbitmq-server -detached
  1. 停止第二个结点应用,并将第二个节点加入第一个节点中
rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ stop_app
rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ reset
rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ join_cluster rabbit1@iZbp1han4z0731tnhucpyyZ
rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ start_app

以内存节点的方式加入集群

rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ join_cluster rabbit1@iZbp1han4z0731tnhucpyyZ --ram

如果已加入集群,可以停止应用后执行如下命令重新启动

rabbitmqctl -n rabbit2@iZbp1han4z0731tnhucpyyZ change_cluster_node_type ram

在这里插入图片描述

其他节点同理

  1. 最终效果
    在这里插入图片描述
剔除节点

方式一
首先停止需要剔除的节点,之后在集群中的其他节点上窒息以下命令(以节点1为例)

rabbitmqctl forget_cluster_node rabbit1@iZbp1han4z0731tnhucpyyZ {-offline}

-offline:在非运行状态下执行
方式二
停止剔除节点的应用,然后执行以下操作,重新启动后就退出集群了

rabbitmqctl -n rabbit1@iZbp1han4z0731tnhucpyyZ reset
集群升级
  1. 关闭所有节点的服务,使用rabbitmqctl stop命令
  2. 保存各个节点的Mnesia数据
  3. 解压新版本到指定目录
  4. 指定新版本的Mnesia数据为步骤2保存的Mnesia数据路径
  5. 按照顺序启动新版本
注意事项

如果关闭了集群中的所有节点,则需要确保在启动的时候最后关闭的节点是第一个启动的。否则,启动的节点会等待最后关闭节点的启动。如果最后一个节点未启动,那么该节点也启动失败。如果最后一个节点发生异常,则需要剔除该节点。
在集群中,创建队列、绑定关系等时,所有的节点都成功后才会返回成功,因为磁盘节点写入的时间、速度等较慢,因此系统绝大多数节点都为内存节点。如果当系统中只有一个磁盘节点,当该节点崩溃时,系统可以正常的接收发送消息,但是无法创建用户、队列、绑定关系、更改权限等操作,因此建立集群的时候需要保证有两个或者更多的磁盘节点存在。
mq创建队列及绑定关系的操作较少,大多数都是生产和消费消息时,为了确保集群的可靠性或者不确定应该选内存节点还是磁盘节点时,建立使用磁盘节点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值