CentOS7实现RabbitMQ高可用集群
CentOS安装RabbitMQ集群
1、有3台已安装RabbitMQ的机器
- 192.168.38.133 rabbitmq1
192.168.38.137 rabbitmq2
192.168.38.138 rabbitmq3
2、设置hosts解析,所有节点配置相同
- # vi /etc/hosts
- 192.168.38.133 rabbitmq1
- 192.168.38.137 rabbitmq2
- 192.168.38.138 rabbitmq3
3、设置节点间认证的cookie
- [root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.38.137:~
- [root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.38.138:~
4、分别启动独立的单机版rabbitmq broker节点:
- [root@rabbitmq1 ~]# rabbitmq-server -detached
- [root@rabbitmq2 ~]# rabbitmq-server -detached
- [root@rabbitmq3 ~]# rabbitmq-server -detached
5、查看broker的集群状态:
- [root@rabbitmq1 ~]# rabbitmqctl cluster_status
- Cluster status of node rabbit@rabbitmq1 ...
- [{nodes,[{disc,[rabbit@rabbitmq1]}]},
- {running_nodes,[rabbit@rabbitmq1]},
- {cluster_name,<<"rabbit@rabbitmq1">>},
- {partitions,[]},
- {alarms,[{rabbit@rabbitmq1,[]}]}]
6、创建broker集群,为了把集群中的3个节点联系起来,我们把137和138分别加入到133的集群。先在137上stop rabbitmq,然后加到133的集群(join cluster会隐式的重置该节点,并删除该节点上所有的资源和数据),然后查看集群状态里有了2个node。
- [root@rabbitmq2 ~]# rabbitmqctl stop_app
- [root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1
- [root@rabbitmq2 ~]# rabbitmqctl start_app
- [root@rabbitmq2 ~]# rabbitmqctl cluster_status #这时候会出现两个节点
- Cluster status of node rabbit@rabbitmq2 ...
- [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
- {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2]},
- {cluster_name,<<"rabbit@rabbitmq1">>},
- {partitions,[]},
- {alarms,[{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]}]}]
- 138服务器同理,加入集群中
7、修改集群的名字为rabbit@rabbitmq1_cluster(默认是第一个node的名字):
- [root@rabbitmq1 ~]# rabbitmqctl set_cluster_name rabbit@rabbitmq1_cluster
8、重启集群:通过rabbitmqctl stop、rabbitmq-server -detached来重启集群,观察集群的运行状态变化
9、删除集群节点,当一个节点不属于这个集群的时候,我们需要删除它,可以通过本地或者远程的方式
- [root@rabbitmq2 ~]# rabbitmqctl stop_app
- [root@rabbitmq2 ~]# rabbitmqctl reset
- [root@rabbitmq2 ~]# rabbitmqctl start_app
- [root@rabbitmq2 ~]# rabbitmqctl cluster_status
- Cluster status of node rabbit@rabbitmq2 ...
- [{nodes,[{disc,[rabbit@rabbitmq2]}]},
- {running_nodes,[rabbit@rabbitmq2]},
- {cluster_name,<<"rabbit@rabbitmq2">>},
- {partitions,[]},
- {alarms,[{rabbit@rabbitmq2,[]}]}]
10、通过管理控制台连接集群,进行创建队列、发布消息、创建用户、创建policy等
- http://192.168.38.133:15672/
注:到这里为止,我们创建好了一个简单的聚合集群。默认情况下,集群中的队列存在于集群中单个节点上,这要看创建队列时声明在那个节点上创建,而exchange和binding则默认存在于集群中所有节点。在stop_app或者stop掉broker之后在133节点的上队列,重启133的app或broker之后,虽然集群工作正常,但133上队列中消息会被清空(queue还是存在的)。对于生产环境而已,这肯定是不可接受的,如果不能保证队列的高可用,那么做集群的意义也不太大了,还好rabbitmq支持Highly Available Queues,下面介绍queue的HA。
11、Queue HA配置,队列可以通过镜像来提高可用性,HA依赖rabbitmq cluster,所以队列镜像也不适合WAN部署,每个被镜像的队列包含一个master和一个或者多个slave,当master因任何原因故障时,最老的slave被提升为新的master。发布到队列的消息被复制到所有的slave上,消费者无论连接哪个节点,都会连接到master;如果master确认要删除消息,那么所有slave就会删除队列中消息。队列镜像可以提供queue的高可用性,但不能分担负载,因为所有参加的节点都做所有的工作。
12、配置队列镜像,通过policy来配置镜像,策略可在任何时候创建,比如先创建一个非镜像的队列,然后在镜像,反之亦然。镜像队列和非镜像队列的区别是非镜像队列没有slaves,运行速度也比镜像队列快。设置策略然后设置ha-mode,3中模式:all、exactly、nodes。每个队列都有一个home node,叫做queue master node
-> 设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后需要手动同步队列消息
- [root@rabbitmq1 ~]# rabbitmqctl set_policy -p AAA ha-allqueue "^ha\." '{"ha-mode":"all"}'
->设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后会自动同步队列消息(生产环境建议采用这个方式)
- [root@rabbitmq1 ~]# rabbitmqctl set_policy -p AAA ha-allqueue "^ha\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'
- 注释:AAA 是VHost名称,
- ha-allqueue 是策略名称,
- ^ha\. 是匹配ha.开头的队列,如果只有^的话就是匹配所有队列都会自动同步数据
- ha-mode:all是同步到所有节点,
- ha-sync-mode:automatic 自动同步,没有这个配置的话则需要手动同步数据
-> 在管理控制台中设置policy
导航 -> Admin -> Policies -> Add/Update a policy
注:
- > 当整个集群down掉时,最 后一个down机的节点必须第一个启动到在线状态,如果不是这样,节点会等待30s等最后的磁盘节点恢复状态,然后失败。如果最后下线的节点不能上线,可以通过forget_cluster_node 指令来踢出集群。
- > 如果所有的节点不受控制的同时宕机,比如掉电,会进入所有的节点都会认为其他节点比自己宕机的要晚,即自己先宕机,这种情况下可以使用force_boot指令来启动一个节点。
CentOS7实现RabbitMQ高可用集群的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- Linux源码安装RabbitMQ高可用集群
1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...
- RabbitMQ学习系列(六): RabbitMQ 高可用集群
前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...
- RabbitMQ 高可用集群搭建及电商平台使用经验总结
面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...
- [Open Source] RabbitMQ 高可用集群方案
简介 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模式.镜像模式 Rabb ...
- RabbitMQ高可用集群配置
1.安装RabbitMQ 1)下载和安装erlang 下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x ...
- RabbitMQ 高可用集群搭建
面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...
- CentOS下RabbitMq高可用集群环境搭建
准备工作 1,准备两台或多台安装有rabbitmq-server服务的服务器 我这里准备了两台,分别如下: 192.168.40.130 rabbitmq01192.168.40.131 rabbit ...
- docker下rabbitMQ高可用集群部署
第一步:docker 安装: mac 下安装命令: brew cask install docker 安装完之后查看版本 docker --version 第二步:开始集群搭建: 采用bijukunj ...
随机推荐
- Kafka跨网络访问设置
实际场景: kafka应用通过docker进行部署并暴露出不同kafka节点到不同的指定端口: 业务系统通过虚拟机进行部署: docker宿主机与业务系统在同一个局域网: 报错: 业务系统连接kafk ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 20155239 2016-2017-2 《Java程序设计》第10周学习总(2017-04-22 16:26
教材学习 1.基本概念划分 OIS的七层协议: 应用层.表示层.会话层.运输层.网络层.数据链路层.物理层. OIS的五层协议: 应用层.运输层.网络层.数据链路层.物理层. 由下往上介绍如下: 2. ...
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
A There is a tree with nn nodes, at which attach a binary 64*6464∗64 matrix M_i (1 \le i \le n)M i ...
- docker容器的启动、停止、运行、导入、导出、删除
原文:docker容器的启动.停止.运行.导入.导出.删除 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jiang425776024/articl ...
- CF 959 E. Mahmoud and Ehab and the xor-MST
E. Mahmoud and Ehab and the xor-MST https://codeforces.com/contest/959/problem/E 分析: 每个点x应该和x ^ lowb ...
- P3940 分组
P3940 分组 https://www.luogu.org/problemnew/show/P3940 官方题解http://pan.baidu.com/s/1eSAMuXk 分析: 并查集. 首先 ...
- activeX 打包
原文 http://www.docin.com/p-409284488.html CAB打包文档说明 文档目的 本文档的目的在于说明将ocx和dll以及相关的文件打包成一个CAB包,以便在网页下调用o ...
- activeX 开发
转自 (http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html),并且在开发过程中遇到的问题进行了补充说明,让新手少走弯路 本文 ...
- Consul 架构(译)
Consul 架构 此篇文章主要对consul的相关内部技术细节进行简要概述. »术语 代理 - 代理是指consul集群中运行的consul实例,通过执行 consul agent 命令来启动. 代 ...