针对Sharding DB的单点故障,合理构建HA架构

作者简介

何剑敏 

Oracle ACS华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。


sharding database最大的特点是可以横向扩展。但是横向扩展不是RAC的横向扩展,纯sharding db是没有HA架构的。即一个shardcat db,多个shard node db。无论是谁down了,都会造成不可用。我们从上往下捋一下,看看哪里有单点故障,这个单点可以通过什么方式解决。

我们知道,sharding的架构大致如下,

1connection pool

从应用端发起之后,往下是connection pool,这个connection pool,指的是Oracle Integrated connections pools (UCP, OCI, ODP.NET, JDBC)。这个connection pool,不在本文的讨论范围内,这个是涉及到中间件的高可用问题。

往下是shard director(gsm)和shardcat数据库。这涉及到一个路由的分类。直接路由(direct route)还是代理路由(proxy route)

直接路由

直接路由是基于sharding key,在connection pool中的connect阶段就实现了。如果在connection pool(以下以UCP为例)有缓存,缓存着sharding key的range,和shard以及chunk的mapping关系,所以直接忽略shard director,直接到某个shard,node;

如果在UCP中没有缓存,则到shard director中找一次,再去shard node。且下一次执行的时候,由于已经缓存,就不再需要去shard director中找了。

在直接路由模式下,当连接请求是包含sharding key的,即UCP的连接可以使用sharding相关的API,如pds.createShardingKeyBuilder() 和pds.createConnectionBuilder() ,相关的操作就直接去对应的数据库分片了。

代理路由

代理路由模式是不基于sharding key的访问,或者是需要查询multi shard的数据,那就需要coordinator database,也就是shardcat数据库。应用就需要通过shardcat数据库,才能找到对应的shard node。

所以说,对于直接路由模式,我们有可能出现的问题,是shard director进程挂了。对于这个问题的解决,我们可以设置多个shard director,每个region最多可以设置5个shard director。shard director的功能,类似于向listener,你可以认为它是一个region listener。接受来自某一个区域的连接,然后进行路由。

对于代理模式,我们需要经过shardcat数据库,那么就可以使用到shardcat数据库的高可用方案了。如ADG,如RAC。在sharding的高可用方案中,我们是优先考虑ADG,再考虑RAC。

另外提一下,由于如果不是multi shard的查询,就不经过shardcat数据库,所以如果shardcat down了,但是如果只有某个分片的transaction,那么也是不受到影响的。

3shard node

再往下,就是shard node了,每个shard node包含分片数据,当一个shard node挂掉的时候,shard table的其他分片,即使是活的,也是无法查询这个shard table。

所以,我们要对shard node建立ADG,且启用FSFO。(我会写另外一个文章,介绍如何deploy带ADG的shard node)。如果不用ADG,那么OGG也是另外一种高可用的方案。此外,还有RAC,也避免一个shard node主机挂掉,注意,只是防止主机挂掉,不能防止存储挂掉。如果要防止存储挂掉,还是要建ADG。(这也是为什么sharding的最佳实践,是建立ADG,而RAC方案只是optional)

但是由于ADG的FSFO切换影响较大,因此最好的方式,还是RAC+ADG,即如果一个shard node的一个机器挂了,那么在RAC架构下,还有另外一台机器能顶住,不会有问题。如果2个节点都挂了,才FSFO切换到standby。

所以,sharding的HA最佳实践,应该是如下的:

有2个区域(region),每个region有2个或以上的gsm(shard director),然后shardcat数据库有ADG(可以再加RAC),后面的shard node也是要做ADG+FSFO(可以再加RAC)。

文章转自数据和云公众号,原文链接

时间: 2024-10-28 22:55:16

针对Sharding DB的单点故障,合理构建HA架构的相关文章

大数据-三台机器能够构建HA的hadoop集群吗 hadoop-2.6.0 64位版本

问题描述 三台机器能够构建HA的hadoop集群吗 hadoop-2.6.0 64位版本 我设计的架构如图,理论上任意一台机器宕机,集群仍然可以正常工作,不知道这样是否可行. 求大神指导. 解决方案 keepalive 常用于HA, 不过你这里的hadoop 是怎么实现的内部我不是很清楚,不过正常HA 可以实现一台宕机立马切换到备用集群. 我测试过keepalive

实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构  实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能 实战使用Axure设计App,使用WebStorm开发(6) –

三台机器能够构建HA的hadoop集群吗 hadoop-2.6.0 64位版本

问题描述 这是我设计的架构如图,理论上任意一台机器宕机,集群仍然可以正常工作,不知道这样是否可行.求大神指导. 解决方案 解决方案二:这个是图,忘记帖了...

新零售时代,零售行业如何构建互联网架构

摘要:经过近10年的发展,阿里中间件Aliware摸索出了一套独特的架构实现技术.传统企业企业如何快速复制阿里巴巴互联网架构?Aliware如何赋能新零售?在2017苏州云栖大会企业级互联网架构专场上,阿里巴巴中间件架构师员海滨结合实际案例为大家分享了新零售行业的互联网架构设计和实践经验. 以下内容根据演讲视频以及PPT整理而成. 回顾"五新" 2016年,马云老师在云栖大会上正式提出了"五新"战略.近一年以来,"五新"战略其实已经在大家日常的生

MySQL HA架构下innodb_flush_log_at_trx_commit及sync_binlog参数

      HeartBeat + DRBD以及MySQL replication是很多企业比较普遍使用的方式.对于数据的完整性和一致性的问题,这两种架构需要考虑2个重要的参数innodb_flush_log_at_trx_commit以及sync_binlog参数.本文主要参考了MySQL 5.6 Reference Manual列出对这2个参数的具体描述.   1.Heartbeat + DRBD or replication Cost: Additional passive master

回归架构本真:从规划、思维到设计,构建坚不可摧的架构根基

   关于什么是架构,业界从来没有一个统一的定义.Martin Fowler在<企业应用架构模式>中也没有对其给出定义,只是提到能够统一的内容有两点: 最高层次的系统分解: 系统中不易改变的决定.   <软件架构设计>一书则将架构定义总结为组成派和决策派: 组成派:架构=组件+交互:软件系统的架构将系统描述为计算组件及组件之间的交互. 决策派:架构=重要决策集:软件架构是在一些重要方面所作出的决策的集合.   而架构的概念最初来源于建筑,因此,我想从建筑的角度去思考这个问题.Wik

缘何中国光大银行选择华为FusionCube构建融合架构资源池?

近日,华为FusionCube超融合基础设施中标中国光大银行融合架构二级资源池建设项目.中国光大银行总部设在北京,是经国务院批复并经中国人民银行批准设立的金融企业,在英国<银行家>杂志2015年发布的"世界1000家大银行排名中,中国光大银行位列第57位.凭借卓越的创新能力和出色的业绩表现,中国光大银行被评为"年度最具创新银行",荣膺"CCTV中国年度品牌". 该项目涉及光大银行全部分行的资源池新建部署,实现了华为公司的超融合基础设施Fusio

App 组件化/模块化之路——构建开发架构思路

App 组件化/模块化开发架构思路 随着业务的发展 App 开发技术也越来越成熟,对开发者来说 App 代码量也迅速地增长到一个数量级.对于如何架构 App 已经每个开发者面临的实际问题.好的架构可以提高开发者的效率,降低维护成本. 由于业务增长引起项目中代码量激增,以及历史遗留问题和结构混乱,作为一个有代码洁癖的程序员,很早就开始思考如何组织 App 架构的问题了.目前遇到的主要有以下几点问题: 代码量激增引起结构混乱 各个模块相互引用且耦合度高 无法独立开发或者调试组件代码 无法应对组件插拔

构建开放架构 提升金融领域“安全可控”之能力

欣闻深圳证券交易所第五代交易系统(以下简称"深五代")于2016年6月6日成功上线正式投产,这是一个值得纪念的历史时刻.在过去的二十多年里,先后推出的几代交易系统见证了深圳证券市场的快速发展,为保证国家资本市场的持续健康发展发挥了重要的技术支撑作用.新华三集团非常自豪能够从2011年底深五代项目启动开始,就全力配合深交所进行新一代交易系统的建设.几年来,与各方合作伙伴通力合作下,先后攻克了多项关键技术难关.深五代的成功上线,充分说明新华三基于开放架构的解决方案完全能够承载交易系统稳定.