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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

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

本文作者:刘韬

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

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
Prometheus 监控 Cloud Native
Prometheus VS InfluxDB
前言 除了传统的监控系统如 Nagios,Zabbix,Sensu 以外,基于时间序列数据库的监控系统随着微服务的兴起越来越受欢迎,比如 Prometheus,比如 InfluxDB。gtt 也尝试了一下这两个系统,希望能找到两者的差别,为以后选型提供一些帮助。
9384 0
|
Oracle Java 关系型数据库
mybatis批量删除Batch delete
mybatis批量删除Batch delete
mybatis批量删除Batch delete
|
NoSQL MongoDB 索引
MongoDB副本集同步原理
MongoDB的同步原理,官方文档介绍的比较少,网上资料也不是太多,下面是结合官方文档、网上资料和测试时候的日志,整理出来的一点东西。
3642 0
|
监控 数据可视化 大数据
蚂蚁金服数据洞察分析平台DeepInsight:人人都是数据分析师
小蚂蚁说: 大数据时代,由数据驱动的用户行为分析、运营分析、业务分析无疑是最被关注的“热词”,尤其对于拥有海量数据的大中型企业来说,对数据的需求已远远超越了传统数据报表所能提供的范畴。如何运用自助式BI实现当代企业精细化运营,已成为企业运营管理的新课题。
7470 0
|
8月前
|
机器学习/深度学习 网络协议 安全
5G 网络的防御利器:抵御分布式拒绝服务攻击
5G 网络的防御利器:抵御分布式拒绝服务攻击
198 0
|
传感器 数据采集 监控
什么是物联网通信网关?
物联网通信网关是连接物联网设备与云或外部网络的关键桥梁。
355 2
|
8月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万数据量的优化实录
【10月更文挑战第6天】 在现代互联网应用中,随着用户量的增加和业务逻辑的复杂化,数据量级迅速增长,这对后端数据库系统提出了严峻的挑战。尤其是当数据量达到百万级别时,传统的数据库解决方案往往会遇到性能瓶颈。本文将分享一次使用MySQL与Redis协同优化大规模数据统计的实战经验。
469 3
|
8月前
|
SQL 监控 关系型数据库
如何查看MySQL使用的内存
综合运用上述方法,您可以全方位地监控和管理MySQL的内存使用。从简单查看配置到深入分析实时内存占用,每种方法都有其适用场景和优势。定期检查和调整MySQL的内存配置,对于维持数据库性能和稳定性至关重要。
1283 0
|
存储 容灾 NoSQL
同城双活的必修课 - 落地经验与关键挑战解析
同城双活作为一种容灾架构,通过在同一城市建立两个数据中心,以确保在一个数据中心发生故障时,系统能够快速切换到另一个数据中心,从而提高系统的可用性
1154 2
同城双活的必修课 - 落地经验与关键挑战解析
|
Dubbo Java 应用服务中间件
双活工作下的数据迁移:Nacos注册中心实战解析
这篇内容介绍了如何使用NacosSync组件进行双活项目中的注册中心数据迁移。首先,准备包括64位OS、JDK 1.8+、Maven 3.2+和MySQL 5.6+的环境。接着,获取并解压NacosSync安装包,配置数据库连接,启动服务,并通过访问特定URL检查系统状态。然后,通过NacosSync控制台进行集群配置,添加Zookeeper和Nacos集群,并设置同步任务。当数据同步完成后,Dubbo客户端(Consumer和Provider)更新配置以连接Nacos注册中心。最后,迁移完成后,原有的Zookeeper集群可下线,整个过程确保了服务的平滑迁移。
351 1