ActiveMQ的集群与高可用

针对大量的消息吞吐量、对MQ可用性要求非常严格的场景、或者非常复杂的消息处理关系情况下,单个MQ实例通常已经无法满足我们的需要,这时候ActiveMQ的集群和高可用方案就对我们很重要了。

1.client的集群

对消费者来说,使用queue即可做到某种意义上的消费者集群,所有消费者共同处理同一类消息。

非持久订阅的topic,这种功能没有实现。但是持久订阅的topic,可以通过Composite Destination机制转换成针对具体的持久消费者的专用queue,从而实现多个client共同处理同一类消息。参见:http://blog.csdn.net/kimmking/article/details/9773085

需要注意的是,如果缓存了consumer(例如spring DMLC+cache consumer)情况下使用了prefetch,多个consumer间可能导致消息顺序混乱。见:http://activemq.apache.org/what-is-the-prefetch-limit-for.html

2.client的高可用

在客户端来说,最简单的高可用方案就是内置的failover机制。它帮助我们在客户端实现:

  • 在某个broker故障时,自动使用其他备用broker
  • 强大的断线重连机制,哪怕是只有一个broker时,也可以用来在broker down掉重启后,客户端重新连接上

断线重连的配置和参数说明参见:http://activemq.apache.org/failover-transport-reference.html

3.broker的集群

broker端,典型的集群方式就是Network Connector,通过桥接的方式把多个broker,一个个的串起来,整个broker网络就可以作为一个整体,协同工作。

每个connect上去的broker,都会自动在被连接的broker上创建一个client connecttion,并通过Advisory机制共享自己的消费者列表,从而使得消息可以跨过broker在这个网络上自由流动。也可以设置duplex为true使得这个连通变为双向的对等网络。在BrokerA上配置一个指向BrokerB上的network connector,则连接到BrokerA上的各个ConsumerA1、ConsumerA2、ConsumerA3,都可以消费BrokerB上的QueueB里的消息。默认这三个消费者都被当做一个消费者来看待,即如果BrokerB上有一个ConsumerB1消费。

详细参见:http://blog.csdn.net/kimmking/article/details/8440150

其实个人感觉更好的集群方式是增加类似kafka和metaq的partition,然后使用zk作为配置中心来协调各个不同的broker实例、以及不同的partition来协同工作,使得broker的读写都可以分散进行。

4.broker的高可用

Broker端的高可用主要是Master-Slave实现的冷备,需要结合客户端的failover来用。

5.8.0以前的版本,支持三种Master-Slave:

  1. 基于共享储存的Master-Slave:多个broker实例使用一个存储文件,谁拿到文件锁就是master,其他处于待启动状态,如果master挂掉了,某个抢到文件锁的slave变成master。由于使用的还是master的存储文件,所以数据好似一致的。
  2. 基于JDBC的Master-Slave:使用同一个数据库,拿到LOCK表的写锁的broker成为master,机制同上。
  3. Pure Master-Slave:Slave的broker,简单的从Master复制数据和状态,问题较多,已被废弃。

5.9.0版本以后,Pure Master-Slave机制被废弃,新添加了基于zk的复制LevelDB存储Master-Slave机制。

此外还有一种可选方式就是,使用某种存储复制技术,比如Raid、或是DB的replication等等机制来同步存储,在故障的时候,使用这个复制的存储恢复broker。

详细参见:http://activemq.apache.org/masterslave.html

ActiveMQ的集群与高可用相关推荐

  1. 【带你重拾Redis】Redis 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 Redis master 和 sla ...

  2. 数据库集群和高可用解决方案

    数据库集群和高可用解决方案 参考文章: (1)数据库集群和高可用解决方案 (2)https://www.cnblogs.com/Newd/p/9049873.html 备忘一下.

  3. web应用的负载均衡、集群、高可用(HA)解决方案

    web应用的负载均衡.集群.高可用(HA)解决方案 参考文章: (1)web应用的负载均衡.集群.高可用(HA)解决方案 (2)https://www.cnblogs.com/huojg-21442/ ...

  4. 蚂蚁集团万级规模 k8s 集群 etcd 高可用建设之路

    蚂蚁集团运维着可能是全球最大的 k8s 集群:k8s 官方以 5k node 作为 k8s 规模化的顶峰,而蚂蚁集团事实上运维着规模达到 10k node 规模的 k8s 集群.一个形象的比喻就是,如 ...

  5. K8S集群Master高可用实践

    本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以下几个内容: 1.etcd集群高可用 2.集群dns服务高可用 3.kube-apiserver.kube-contr ...

  6. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案

    浅谈web应用的负载均衡.集群.高可用(HA)解决方案 转载于:https://www.cnblogs.com/hfultrastrong/p/7887420.html

  7. Redis面试 - 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis master 和 sla ...

  8. 手绘流程图讲解spark是如何实现集群的高可用

    本文分享自华为云社区<图解spark是如何实现集群的高可用>,作者:breakDawn. 我们看下spark是怎么针对master.worker.executor的异常情况做处理的. 容错 ...

  9. nginx两台文件服务器集群,keepalived结合nginx状态检测脚本实现对web服务器集群的高可用...

    实验环境 两台CentOS-7.5虚拟机 web1:10.0.11.203 web2:10.0.11.204 VIP :10.0.11.210 web类型:nginx 客户端:自用笔记本(win10) ...

最新文章

  1. 独家 | 基于癌症生存数据建立神经网络(附链接)
  2. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转发)
  3. 2020-11-7(http协议简介)
  4. Linux下的编程入门
  5. 二十七、 爬取Boss直聘的招聘信息
  6. ThinkJS前端搭配vue时的Nginx配置
  7. js请求php文件 302,采集某个 url, js 请求 200,浏览器访问 302
  8. 蓝桥杯 迷宫与陷阱 BFS
  9. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...
  10. 关于.net项目从vs2003升级到2005的若干问题
  11. linux shell中各种分号和括号,linux shell 各种分号,括号使用方法总结
  12. namenode的元数据会被删除吗_欠阿里云0.01元,欠费15天后数据被删除了
  13. java中四种引用类型
  14. python第一题 引发的思考和学习
  15. ehcache入门基础示例
  16. QT MD4 MD5 Sha1等几种加密方式
  17. 6950有史以来最经典玩机宝典/软件包/导航
  18. Caused by: org.springframework.web.client.RestClientException: Error while extracting response for t
  19. windows 无法更新计算机的配置,[修复] Windows无法更新计算机引导配置。安装无法继续。 | MOS86...
  20. matlab左侧显示当前文件夹,matlab还原默认布局,matlab左侧显示

热门文章

  1. 内存泄漏MobX State Tree_[译]iOS Crash Dump Analysis 错误的内存崩溃
  2. maven 打包时缺少文件_(三)Java资源文件和路径相关扫盲
  3. mysql hypot_mysqli_stmt_prepare
  4. rqt teb参数动态调试工具_16.ROS常用工具:Rviz/rqt
  5. java 今天 昨天_js获取当前时间(昨天、今天、明天)
  6. mysql手注_php+mysql手注拿shell教程【朋友给的】
  7. 2010 模板下载 罗斯文_俄罗斯签证办理攻略
  8. rancher k8s docker 关系_【环境搭建】Ubuntu20.04通过rke部署K8S
  9. 织梦html编辑器功能在哪,织梦dede自带编辑器替换百度ueditor编辑器
  10. 二、Go语言基础入门