实战分享:activemq 在灾备双活建设中的研究

activemq 是业界非常流行的、功能强大的、开源消息中间件。以快速、支持多种跨语言客户端和协议著称;完全支持 JMS 1.1 and J2EE 1.4。在各个行业中有大量的应用案例。

由于 activemq 承担着消息服务的重要角色,在这篇文章中我们重点讲述在灾备双活建设中 activemq 设计、规划、部署。

随着各个行业对 IT 灾备建设的重视,越来越多的企业、单位正在筹备、实施 IT 灾备建设。由于早期的建设并没有充分考虑多数据中心下容灾方案,势必在新的多数据中心环境需要做一番整体架构的调整、重建。

本文是对目前业界流行的消费服务产品 active 在灾备双活建设的一些探讨,希望起到抛砖引玉的效果。

目标

灾备双活建设最完美的架构设计:在同城、异地 2 个数据中心,在最极端情况下,例如单数据中心垮掉情况下,保证消息零丢失,支持 7*24 服务要求。

需求描述

机房故障

1) 现象描述

消息队列中间件部署在 A、B 两个不同的机房中,客户端根据负载的策略转发到对应机房的消息中间件,其中 A 或者 B 机房因为断电或者灾难等因素出现故障,无法继续提供服务。此时仅有一个机房正常。

2) 现象图示

717bfb9c90a6dbdccc4e3da69af1bf8afc1abb0d

3) 服务影响

正常情况下,对于客户端的连接平均分布在两个机房中,出现单个机房故障后,连接在故障机房中的连接会断开,正在执行未提交的事务将会回滚,对于发起的新连接不受任何影响,依然可以通过配置的负载策略访问正常机房中的消息中间件服务。

4) 故障恢复

当机房恢复正常后,启动消息中间件服务,此时,只要主机、网络恢复正常,消息中间件服务就可以启动成功。这时,AB 机房按照负载策略继续处理连接,最终使得每个机房的中间件连接数无限接近。

活动预告

云南的朋友们有福利了,云和恩墨大讲堂-云南站,将于 8.31(下周五)在昆明举办。本次活动邀请到了 ACOUG 联合创始人,Oracle ACE 总监,云和恩墨创始人盖国强先生、云和恩墨西区交付总监郭耀龙先生。演讲议题涵盖 Oracle 18c 的新特性解析和 DBA 的未来、 Oracle 数据库故障诊断、金融行业 PaaS 云数据库平台解决方案等。欢迎各位数据库爱好者报名参与!

39f5050efc38d66b2b5a28600dd2518239d69684

服务器DOWN

1) 现象描述

在运行的消息中间件集群架构中,存在 N 个主机,其中任意 N-2 个主机 DOWN 机,不具备服务提供能力,仅剩余大于 1 个主机存活可以提供服务的场景。

2) 现象图示

a62b772473896fdf26636b4a9050e06141d7e887

3) 服务影响

主机 DOWN 掉后,已经连接在该主机消息中间件上的连接会断开,对应的事务会回滚,新的连接不受到影响。

4) 故障恢复

当主机故障处理后,启动故障主机,并启动消息中间件服务。根据负载均衡算法,客户端连接会重新分配到该主机上的节点。

消息中间件节点崩溃

1) 现象描述

在运行的消息中间件集群架构中,存在 N 个节点,其中任意 N-2 个节点崩溃,不具备服务提供能力,仅剩余大于1个节点存活可以提供服务的场景。

2) 现象图示

e564f5feaf649d26890e03780194690af8e1648c

3) 服务影响

当消息中间件节点崩溃后,已经连接在该主机消息中间件上的连接会断开,对应的事务会回滚,新的连接不受到影响。

4) 故障恢复

当消息队列节点故障处理后,启动消息中间件服务。根据负载均衡算法,客户端连接会重新分配到该节点。

架构设计

架构设计要点

● 采用 activemq 的何种架构来实现上述需求?

采用 主从+Broker-Cluster 方式来实现,主从架构实现了 HA(高可用)功能,借用 zookeeper 的选举投票功能,保证“过半即可用”,所以推荐的 HA 架构的节点数为单数,至少 3 个节点,任何时候垮掉一个节点都不影响正常使用。

同时结合 Broker-Cluster,Broker-Cluster 的部署方式可以解决负载均衡和分布式问题,因为单一主从方式无法解决负载均衡的问题。

● 如何保证未消费消息在各个节点间的同步?

采用 leveldb(LevelDB 是 Google 开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能)实现各个节点间的同步写,保证数据在同一个 Broker-Cluster 组下复制,以 3 个节点为例,同一条堆积消息,在 3个 节点保持同步,在最极端情况下,即使2个节点的数据文件丢失,也能防止数据丢失。

如何保证在灾难情况下,消息服务仍然可以正常提供服务?例如考虑最极端情况下,单边数据中心宕机?

采用 2 套主从、2套 Broker-Cluster,并且保证 2 个数据中心各包含一套主从的2个节点,如下图所示,cluster1 的 2 个节点在 B 中心,cluster2 的 2 个节点在 A 中心,即使 A、B 整个数据中心发生灾难,都不影响 jms 服务正常运行。

● 保证在各种灾难场景都实现了 7*24 和消息零丢失吗?

是的,只要保证一个 cluster 下的 2 个节点可用的情况下,不管在任何一种组合下,jms 服务都是可用的。

● 客户端如何来调用集群的 jms 地址

connectionFactory = new ActiveMQConnectionFactory(

ActiveMQConnection.DEFAULT_USER,

ActiveMQConnection.DEFAULT_PASSWORD,

"failover:(tcp://192.168.40.140:61616,tcp://192.168.40.140:61617,tcp://192.168.40.141:61619,tcp://192.168.40.141:61620,tcp://192.168.40.141:61621,tcp://192.168.40.140:61618)");

如上例子,activemq 根据随机策略,调用任一可用的节点。

架构图示

● 架构示例图如下:

fe21f69b257224aec98c2939aa190c7f5a328f4d

◆ 哪一个节点是 master,没有要求,那个先启动那个就可能成为 master。

◆ master 节点是当前提供服务的节点。


原文发布时间为:2018-08-22

本文作者:刘韬

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”。

已标记关键词 清除标记
相关推荐
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了易用的一键式设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。在常规修复过程中,程序还会自动检测DirectX加速状态,在异常时给予用户相应提示。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V4.0版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。如扩展失败,可点击“扩展”界面左上角小锁图标切换为加密连接,即可很大程度上避免因防火墙或其他原因导致的连接失败。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有更新系统c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,请仅在常规修复无效时再使用此功能。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制Direct加速的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了7项高级功能。点击"常规”选项卡可以调整程序的基本运行情况,包括日志记录、安全级别控制、调试模式开启等。只有开启调试模式后才能在C
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页