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

简介:

作者简介

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

何剑敏 

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


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


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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;

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=



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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


代理路由

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


所以说,对于直接路由模式,我们有可能出现的问题,是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最佳实践,应该是如下的:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


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

相关文章
|
1天前
|
运维 负载均衡 API
构建高效微服务架构的七大关键策略
【5月更文挑战第27天】 在当前企业级应用开发中,微服务架构已成为实现敏捷、可扩展和灵活部署的主流解决方案。本文将深入探讨构建和维护一个高效微服务系统的七个关键策略,包括服务划分原则、API网关设计、服务发现与注册、配置管理、熔断机制、分布式跟踪及持续集成和部署。这些策略不仅有助于提升系统的稳定性和弹性,还能确保在不断变化的业务需求面前,系统能够快速响应并保持高效的运行状态。
|
1天前
|
机器学习/深度学习 监控 持续交付
构建高效微服务架构:后端开发的新趋势探索深度学习在图像识别中的边界
【5月更文挑战第27天】随着业务需求的快速变化和市场竞争的激烈,企业需要更灵活、高效和可扩展的系统来支持其运营。微服务架构作为一种新兴的软件开发模式,已经成为后端开发领域的热门话题。本文将深入探讨微服务架构的概念、优势以及如何构建一个高效的微服务架构,帮助后端开发者更好地应对业务挑战。 【5月更文挑战第27天】 随着人工智能的不断进步,深度学习技术已经在图像识别领域取得了显著成就。本文将深入探讨深度学习模型在处理复杂图像数据时的挑战与机遇,分析现有技术的局限性,并提出潜在的改进方向。通过实验验证,我们将展示如何通过创新的网络架构、数据增强策略和损失函数设计来提升模型性能。本研究不仅为深度学习
|
1天前
|
监控 安全 数据管理
构建高效微服务架构的五大核心要素
【5月更文挑战第27天】在现代软件开发中,微服务架构以其灵活性、可扩展性和容错性而受到企业青睐。本文将深入探讨构建一个高效微服务架构所需的五大核心要素:服务划分策略、通信机制、数据管理、安全性和监控与日志系统。这些要素是确保微服务架构能够高效运行并适应快速变化需求的关键。我们将逐一解析每个要素的重要性及其实现方法,为后端开发者提供一套全面的指导原则和实践技巧。
|
1天前
|
消息中间件 缓存 数据库
构建高性能微服务架构:从理论到实践
【5月更文挑战第27天】在现代软件开发中,微服务架构已成为实现可扩展、灵活和容错系统的关键设计模式。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计理念、技术选型以及性能优化策略。我们将通过分析真实案例,提供一套实用的指导原则和最佳实践,帮助开发者提升系统的响应速度和处理能力,从而满足不断变化的业务需求。
|
1天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第27天】 随着企业加速其数字转型的步伐,云原生技术已不仅仅是一种趋势,而是成为了推动创新和业务敏捷性的必要条件。本文深入探讨了云原生架构的核心原则、关键技术和实施策略,旨在为企业提供一个清晰的云原生技术应用蓝图,以支持它们在不断变化的市场环境中保持竞争力。
|
1天前
|
存储 监控 安全
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性和维护性的瓶颈。本文探讨了采用微服务架构作为解决方案的优势与挑战,并详细阐述了在设计、部署和优化微服务过程中的关键实践和技术考量。通过将大型应用程序拆分成一系列小型、自治的服务,开发团队可以更灵活地应对市场变化,提高系统的可靠性,同时促进技术创新。
|
1天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】在现代软件开发领域,随着业务需求的不断复杂化和开发团队规模的增长,传统的单体应用架构逐渐显得笨重且难以维护。微服务架构作为解决这一问题的银弹,其设计理念是拆分大型应用程序为一系列小型、自治的服务单元,每个单元负责一个功能模块并独立运行在其各自的进程中。本文探讨了微服务架构的设计原则、技术选型、以及在实施过程中可能面临的挑战,并提供了一系列解决方案和最佳实践,旨在帮助后端开发人员构建更加灵活、可扩展且高效的系统。
|
1天前
|
存储 运维 监控
探索微服务架构下的系统监控策略
【5月更文挑战第27天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构以其灵活性、可扩展性成为了众多企业技术选型的宠儿。然而,随之而来的复杂性也给系统监控带来了前所未有的挑战。本文深入剖析了在微服务环境中实施有效监控的策略,探讨了如何通过日志聚合、性能指标监控与分布式追踪技术相结合,实现对微服务生态系统的全方位把控。我们将分享一系列实践经验,并讨论监控策略的最佳实践,以期为面临类似挑战的开发者和运维团队提供参考。
|
1天前
|
消息中间件 持续交付 开发者
构建高效的微服务架构:后端开发的新范式
【5月更文挑战第27天】在现代软件开发中,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序拆分成一组小型、松散耦合的服务来提供灵活性和可扩展性。本文将探讨微服务架构的关键概念、优势以及如何在实际项目中实现这种架构。我们将重点关注后端开发的挑战,包括服务的划分、通信、数据一致性和安全性等方面,并提供实用的解决方案和最佳实践。
|
1天前
|
监控 负载均衡 数据库
构建高效微服务架构:后端开发者的技术挑战与策略
【5月更文挑战第27天】 在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过拆分传统单体应用,实现服务的细粒度管理和独立部署,从而提高了系统的可扩展性和灵活性。然而,随之而来的是一系列技术挑战,包括服务治理、数据一致性、网络延迟等问题。本文将探讨这些挑战并提出相应的解决策略,以帮助后端开发者构建和维护一个高效的微服务系统。