如何优雅的解决分布式数据库的复杂故障 (如何优雅的解释自己胖)

教程大全 2025-07-20 13:39:33 浏览

如何优雅的解决分布式数据库的复杂故障

2018-05-21 14:31:44ACID是事务的四个特性,其中D(Duration)就是讲的持久性,数据库的一大价值就在于可以有效处理的故障,保证数据不会丢失。随着分布式数据库的发展,部署的复杂度上升,数据库面临的故障场景也越来越多。

故障简介

ACID是事务的四个特性,其中D(Duration)就是讲的持久性,数据库的一大价值就在于可以有效处理的故障,保证数据不会丢失。随着分布式数据库的发展,部署的复杂度上升,数据库面临的故障场景也越来越多。

常见硬件故障

接下来,我们看下常见数据中心的故障概率

《Designs, Lessons and Advice from Building Large Distributed Systems》,jeff dean

网络故障

除了上述故障,对于分布式系统设计,还有一些额外的网络故障需要考虑

脑裂,顾名思义,脑裂指的是系统因为网络故障被分割为多个独立的区域;

多网面条件下,部分网面故障,这个错误一般是很难出现的,因为每个网面往往是逻辑的,并不和网卡绑定,如果用户调整配置出错,可能导致这种故障,如果系统横跨多个网面,需要考虑这个故障;

脆弱的数据中心

实际上,数据中心也没有想象中的那么稳定,下图是笔者2017年11月22日截取的cloudharmony监控数据,监控300多家数据中心的可靠性情况。

可以看到,即使大名鼎鼎的azure,也未能达到宣称99.95%,有兴趣的详细了解的可以看这里

除此之外,再给大家举几个详细的例子

2017年9月29日 azure北欧数据中心故障

北欧数据中心部分在定期的常规灭火系统维护中发生了意外,释放出了灭火剂。然后导致了专门用于遏制和安全的空气处理单元(AHU)自动关闭。而受到影响区域的某些系统为防止系统过热对部分机器进行关机和重启,AHU在35分钟后手动恢复,因为系统突然关机导致部分数据需要恢复,系统在7小时后才恢复正常。该事故导致了部分用户的存储服务不可用。

2017年2月28日amazon s3故障

运维工程师定位账务系统变慢这个问题时,想要删除一小部分 服务器 ,结果命令输入错误删除了大批服务器,包括 index subsystem和placement subsystem的服务器,导致S3服务从9:37AM开始不可用,直到1:54PM,其中最有意思的是,AWS Service Health Dashboard系统依赖S3,因此从故障发生直到11:37AM,监控页面没有显示故障。这个故障据说弄倒了半个墙外的互联网世界。

2016年4月13日Google Compute Engine停止服务

全球所有区域的Google Compute Engine停止服务,18分钟后恢复。该故障由一个运维工程师删除一个无用的ip blocks引起的,而删除ip这个操作并没有合理做配置同步,这个操作触发了网络配置系统的一致性检测,当网络配置系统检测到不一致后,进行了重启,导致服务中断。

2015年5月27日 杭州电信挖断阿里网线

光纤挖断后,部分用户无法使用,两小时后恢复。

2014年7月1日 宁夏银行核心数据库系统故障

银行二部(2014)187号正式发全国文件,对宁夏银行事故的描述大致如下,2014年7月1日,宁夏银行核心系统数据库出现故障,导致该行(含异地分支机构)存取款、转账支付、借记卡、网上银行、ATM和POS业务全部中断。

经初步分析,在季末结算业务量较大的情况下,因备份系统异常导致备份存储磁盘读写处理严重延时,备份与主存储数据不一致,在采取中断数据备份录像操作后,造成生产数据库损坏并宕机。因宁夏银行应急恢复处置机制严重缺失,导致系统恢复工作进展缓慢,直至7月3日5点40分核心系统才恢复服务,业务系统中断长达37小时40分钟,其间完全依靠手工办理业务。

故障分类

看一下数据中心网络的互联图

图上任何的硬件设备都可能发生故障,从各个主机,交换机到网线。

我们尝试以故障域对故障做一个简单的分类。所谓故障域,就是会因为一个故障而同时不可用的一组组件,常见的故障域包括:

如何优雅的解释自己胖

故障的变化

不同组件发生故障的概率是不同,google一项研究表明,在36 °C和47 °C范围内运转的磁盘,故障率***,随着时间的发展,磁盘故障率也逐渐提升,***年只有1.7%,第三年达到8.6%。

现在也有很多研究,将大数据和人工智能引入了磁盘故障预测领域,取得了不错的成果。

数据库故障处理

日志系统

数据库会为数据修改记录日志,日志记录了数据的变化,根据不同的日志用途,可以分为redo日志、. undo日志、redo/undo日志,现在流行的是redo日志。

看一下postgresql日志的结构:

根据不同日志记录方式,可以分为如下两种类型:

数据库日志系统有两个重要的原理:

日志系统是系统软件内广泛使用的技术,不仅仅是数据库,日志代表了系统的改变,他可以用来恢复/备份,也可以用做通知系统,掌握了系统的日志流,就相当于掌握了系统的整个状态,日志可以更抽象的理解为日志+状态机,通过不断的重访日志,改变状态机的状态,可以通过传递日志将状态改变传递到整个系统的各个角落,关于日志系统,笔者见过的***的一篇文章是The Log: What every software engineer should know about real-time>

master-slave(-cascade)

每个主机可以挂多个备机,每个备机可以挂多个级连备,这是当前传统数据库的常见部署方式。postgres甚至支持多级的级连备(次级连)等等,但是不是很常用。这种部署方式可以有效的处理单机故障。作为支持只读操作的备机,可以有效的分摊读负载,这是一种有延迟的读操作,本身也是满足相应隔离级别的,但是和主机放在一起考虑的话,并没有一致性可言。

事务提交时机

根据主机事务的提交时机,有几种事务提交级别:

主机日志落盘,此时RTO<1min,RPO>0

主机日志落盘,同时主机日志发送到备机,此时RTO<1min,RPO=0

主机日志落盘,同时主机日志发送到备机,并且落盘,此时RTO<1min,RPO=0

这三种提交级别,主机性能越来越差,一般而言,同城备机采用第二种方式,异地备机使用***种方式。

共享磁盘

共享磁盘方案依赖共享存储,备机只读不写,虽然备机不写盘,但仍然需要不断的在内存replay日志,以便主机故障后能快速升主。

很明显,share disk方案性能类似数据单机,而且RTO<1min,RPO=0。但是受硬件限制,sharding disk方案只适用于同城。

技术是螺旋式前进的,在分布式计算中,share disk的思想也很流行,很多系统依赖分布式文件系统/存储系统,在其上构建基于share disk的计算系统,比如大数据领域久负盛名的hADOop,还有OLTP领域的新力量aurora,还有newsql领域的tidb+tikv。

master-master

master-master架构服务也很多,日渐成为主流,目前低一致性的大数据系统几乎都是多主架构,笔者对大数据不够熟悉,这里只列一致性较强的一些数据库系统

master-master架构的系统,总有数据是可以提供服务的,因此可靠性更高,这是当前分布式系统的主流方案。

paxos/raft

paxos/raft是当前主流的分布式复制协议。

paxos协议精确定义了在分布式系统下达成共识的最小条件。关于paxos的原理可以参考这篇文章《一步一步理解Paxos算法》。

paxos是分布式系统的核心之一,关于这个算法给予再多的赞誉也不为过。paxos协议有很多变种,他的应用也是有一些主要注意的地方,《SRE: google运维解密》内23章讨论了paxos应用的一些场景和情况,有兴趣的可以了解一下。

一些工程可靠性手段

系统调用

什么样的系统调用是可靠的?几乎没有,c语言中最容易出问题的系统调用就是malloc,因为使用的太广泛了,在有些较深的代码逻辑内,一旦申请内存出错,处理相当棘手。在某个重要的内闭的模块中,首先申请足够的内存是一个比较好的做法,相当于半自管理的内存。

其次容易出错的系统调用是和IO相关的调用,比如IO调用出错更难处理的是IO变慢,读写操作的速度在故障时是完全不不能有任何期待的,几十秒,几分钟甚至更久都很正常,所以,如果自旋锁内包含一个IO操作,这个系统离崩溃就不远了。

凡是跨网络的操作,对网络不要有任何期待,在操作前,释放所有不必要持有的资源,并做好调用出错的准备,并为其设定一个超时时间,改为异步模式是一个好选择。

如果由于外部破坏或bug等原因导致数据损坏,可以通过checksum的方式探查,checksum一般在如下两个时机应用:

数据刷盘时计算,并同时记录到磁盘上;

数据读取时校验;

磁盘心跳/连接心跳

进程卡死是不可避免的,当系统CPU被占满时,或者由于某些bug,可能导致某些关键进程得不到调度,导致其无法传递某些信息,某些故障可能对整个系统都是致命。

如何侦测进程/线程卡斯,有两种常用的做法:

维护磁盘心跳,比如定期touch某个文件,如果长时间文件的时间戳没有变化,表示该程序卡死;

提供接口供外部程序访问,外部程序定期访问该进程,如果长时间得不到回应,可以认为程序卡死;

对于bug导致的程序卡死,往往杀掉进程重新拉起可以解决。

调度/队列/优先级/流控

系统性能是很难做到线性提升的,对于数据库来说,更是不可能,对于大部分数据库系统来说,性能首先随连接数增加而提升到某个点,继续增加连接数,往往性能会下降,

上图是mysql8.0.3 CATS特性的性能测试结果,明显可以看到超过64连接后,性能随着连接数增加而降低。

这也是数据库系统一般都会做连接池的原因。

过量的压力可能导致系统崩溃,比如上图,FIFO的调度方式下,512连接,性能降低接近5倍。因此在大型系统中,连接池和优先级队列是一个好设计,可以方便对系统的压力进行有效控制,同时通过监控队列长度,可以直观看到这部分系统的压力和处理能力。

异地备份

主流的高可用方案有两种,一种是两地三中心,一种是异地多活。

两地三中心

对于传统数据库,两地三中心的方案比较常见,常见的部署是同城两中心,异地一中心

两地三中心是一个初级和简单的部署架构,一旦主库发生故障,异地中心很难顶上,只能起到冷备的作用:

还有一种共有云上可靠性更高的方案,如下图

有钱任性。当然,公有云海量部署可以摊低成本,在私有云上,这种方案更贵。

paxos并不适合两地三中心的部署,paxos协议要求有3个对等的故障域,并且能处理一个故障域的故障,两地三中心故障域并不对等

同城复制快,异地复制慢,性能受很大影响;

同城两中心在地质灾害时会同时故障,paxos不能处理;

异地多活

异地多活方案主要要考虑如下几个问题:

数据中心是及其昂贵的,一旦整个数据中心发生故障,作为服务整体服务质量不降级是不可能的,如何优雅降级并保证尽可能多的数据可用,这是分布式系统需要重点考虑的问题。

以google spanner为例,时间戳分配是分布式的,不需要中心节点,数据可以由用户选择部署方式,横跨数据中心越多,性能越差,可靠性越强,区域故障完全自闭,不影响其他部分。

异地多活是一项系统工程,在这个庞大工程里,数据库只需要做好自己的事就可以了。

参考资料

《SRE: google运维解密》

来自 Google 的高可用架构理念与实践

《the tail at scale》

Hard disk drive failure

CAP理论

The Log: What every software engineer should know about real-time>


ims技术特点是什么

IMS是上海新跃物流汇团队自主研发并拥有自主知识产权的针对中小物流企业的综合性信息化管理解决方案,IMS是系统的英文缩写。 简单介绍一下,IMS在技术方面主要有以下这样几个特点:一 采用B/S架构IMS系统采用B/S架构,但可以安装客户端。 B/S最大的优点就是大大简化了系统的维护、开发和使用,实现客户端零维护。 无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可实现远程维护、升级和共享。 由于IMS系统主要针对物流行业的中小型公司,因此采用IE/Flashplayer 可以让界面元素呈现更多,更容易在B/S架构下轻松实现C/S的客户体验。 二 采用分布式数据库方式IMS系统通过B/S架构实现数据的集中管理,同时采用分布式数据库实现数据的分布式存储,大大增强了IMS的扩展性,使得系统可以轻松应对企业业务数据不断攀升的量级需求;而在服务器的架设上,IMS根据IT灾备需求进行集群架构处理,从根本上避免了系统因为受到黑客攻击而全线崩溃的可能。 三 IMS采用了靓丽的换皮肤技术。 将系统外观与代码进行隔离,可以让IMS系统在改变界面风格时变得更容易。

什么是wins服务器?

WINSWINS用来登记NetBIOS计算机名,并在需要时将它解析成为IP地址。 WINS数据库是动态更新的。 (1) WINS的基本要求:对于WINS服务器:1. 必须是一台NT server计算机2. 使用TCP/IP协议,并且具有一个静态的IP地址。 对于WINS客户:1.要求是运行以下操作系统的计算机:Windows NT Server 3.5或更高Windows NT Workstation 3.5或更高Windows 95运行Microsoft TCP/IP-32的Windows for Workgroups 3.11带有实模式TCP/IP驱动的Microsoft Network Client 3.0 for MS-DOSLAN Manager 2.2c for MS-DOS。 不支持LAN Manager 2.2c for OS/22.需要WINS server的IP地址(2)WINS过程(a)在一个WINS的环境中,每次WINS客户开启计算机并初始化TCP/IP后,它都会将它的NetBIOS名和IP地址的对应关系映射到WINS服务器的数据库中。 (b)当一个WINS客户想和另外一台主机通讯时,它会直接和WINS server联系,查询计算机名和IP地址的关系。 (c)如果WINS服务器在自己的数据库中查到了被查计算机名和IP地址的映射关系,它就将目的计算机的IP 地址返回要求查询的WINS客户。 另一个WINS:Windows Internet Name Service (WINS)WINS提供一个分布式数据库,它的作用是在路由网络的环境中对IP地址和NetBIOS名的映射进行注册与查询。 这可能是解决NetBIOS名与IP地址之间转换的比较合适的一种方法,对于比较复杂的网络如互联网更是如此。 LMHOSTS文件在广播式系统中有一点缺点,它是基于广播的,所以对网络的通信量是一个沉重的负担,这个问题并未得到解决。 有人设计了通过路由协议进行单播式的动作对NetBIOS名字进行注册和解析。 如果采用这个协议,那就可以解决了广播的问题,也就没有必要使用LMHOSTS文件了,使动态配置的灵活性与方便性得到重新体现,使得这个系统可以和DHCP协议无缝连接。 我们可以想象,当DHCP给一台计算机分配了一个地址后,这个更新可以直接在WINS数据库中体现。 用户和管理员都不需要进行任何额外的工作,十分方便。 WINS协议可以和NBNS一起工作,但是因为WINS数据库备份的问题没有解决,因为它不能和别的NetBIOS名字服务器一起工作,数据不能在WINS服务器和非WINS服务器间进行复制。 WINS是基于客户服务器模型的,它有两个重要的部分,WINS服务器和WINS客户。 我们首先看一下服务器,它主要负责处理由客户发来名字和IP地址的注册和解除注册信息。 如果WINS客户进行查询时,服务器会返回当前查询名下的IP地址。 服务器还负责对数据库进行备份。 而客户主要在加入或离开网络时向WIN服务器注册自己的名字或解除注册。 当然了,在进行通信的时候它也向服务器进行查询,以确定远程计算机的地址。 我们使用WINS的好处在什么地方呢?WINS就是以集中的方式进行IP地址和计算机名称的映射,这种方式可以简化网络的管理,减少网络内的通信量,但是这种集中式的管理方式可以和星型结构相比,我们有理由怀疑它可以会成为网络的瓶颈。 在本地的域控制器不在路由器管理网段的另一段时,客户仍然可以游览远程域,在集中处理的时候,数据都会集中于这个服务器中,一定要注意不要让这个节点失败。 WINS的另外一个重要特点是可以和DNS进行集成。 这使得非WINS客户通过DNS服务器解析获得NetBIOS名。 这对于网络管理提供了方便,也为异种网的连接提供了另一种手段。 我们可以看到,使用集中管理可以使管理工作大大简化,但是却使网络拓朴结构出现了中心结点,这是一个隐性的瓶颈,而如果采用分布式的管理方式,却有个一致性的问题,也就是如果一个服务器知道了这个改变,而另一个不知道,那数据就不一致了,这时候要有一些复杂的算法来解决这一问题,两台服务器要想知道对方的情况,不可能不进行通信,也就无形中加重了网络负担。 网络就是这样,集中起来就加大了单机的处理压力,而分布了就增加了网络传输量,天下没有十全十美的事情。 WINS(Windows Internet Name Service)服务器主要用于NetBIOS名字服务,它处理的是NetBIOS计算机名(Computer Name),所以也被称为NetBIOS名字服务器(NBNS,NetBIOS Name Server)。 WINS服务器可以登记WINS-enabled工作站的计算机名、IP地址、DNS域名等数据,当工作站查询名字时,它又可以将这些数据提供给工作站。 在各种名字解析方式之中,WINS名字服务具有一些优点。 首先,WINS名字服务是以点对点的方式直接进行通信的,并可以跨越路由器访问其他子网中的计算机,这便克服了广播查询无法跨越路由器和加重网络负担的不足;其次,与静态处理域主机名(Host Name)的DNS服务器不同,WINS名字服务还是一种很少人工干预的动态名字服务;第三,WINS名字服务不仅能够用于NetBIOS名字查询,而且还可以辅助域主机名(Host Name)的查询,可以结合DNS和WINS服务器的好处进行Internet域名查询,因此WINS又被称为Windows 网际名称服务(Windows Internet Name Service)。 WINS服务器在TCP/IP网络(包括Internet)的名字解析中得到了广泛的应用。

SQL Server 2005的有哪些新特点

看看官方的介绍吧:SQL Server 2005 新增功能企业数据管理在当今的互联世界中,数据和管理数据的系统必须始终为 用户可用且能够确保安全。 有了 SQL Server 2005,组织内的用户和信息技术 (IT) 专家将从减少的应用程序停机时间、提高的可伸缩性及 性能、更紧密而灵活的安全控制中获益。 SQL Server 2005 也包括了许多新的和改进的功能来帮助 IT 工作人员更有效率地工作。 SQL Server 2005 包含几个在企业数据管理中关键的增强:易管理性SQL Server 2005 使部署、管理和优化企业数据以及分析应用程序变得更简单、更容易。 作为一个企业数据管理平台,它提供单 一管理控制台,使数据管理员能够在任何地方监视、管理和调谐企业中所有的数据库和相关的服务。 它还提供了一个可以使用 SQL 管理对象轻松编程的可扩展 的管理基础结构,使得用户可以定制和扩展他们的管理环境,同时使独立软件供应商 (ISV) 也能够创建附加的工具和功能来更好地扩展打开即得的能力。 SQL Server Management StudioSQL Server 2005 通 过提供一个集成的管理控制台来监视和管理 SQL Server 关系数据库、Integration Services、 Analysis Services、Reporting Services、Notification Services 以及在数量众多的分布式服务 器和数据库上的 SQL Server Mobile Edition,从而简化了管理工作。 数据库管理员能够同时执行多个任务,例如,编写和执行查询, 查看服务器对象,管理对象,监视系统活动和查看联机帮助。 SQL Server Management Studio 提供了一个开发环境,可在其中使 用 Transact-SQL、多维表达式、XML for Analysis 和 SQL Server Mobile Edition 来编写、编辑 和管理脚本和存储过程。 Management Studio 可以很容易地与源代码控制集成在一起。 Management Studio 还包括一些工具 可用来调度 SQL Server 代理作业和管理维护计划,以自动执行日常维护和操作任务。 管理和脚本编写集成在单一工具中,同时,该工具具有管理所有 类型的服务器的能力,为数据库管理员们提供了更强的生产效率。 SQL Server 2005 开放了 70 多个新的内部数据库性能和 资源使用的度量值,涵盖了从内存、锁定到对事务、网络和磁盘 I/O 的调度等。 这些动态管理视图 (DMV) 提供了对数据库和强大的基础结构的更大的 透明度和可见性,可以主动监视数据库的状况和性能。 SQL 管理对象SQL 管理对象 (SMO) 是一个新的可编程对象集,它 可实现所有 SQL Server 数据库的管理功能。 事实上,Management Studio 就是构建在 SQL 管理对象之上的。 SMO 是作 为 Microsoft Framework 程序集实现的。 您可以使用 SMO 自动执行常见的 SQL Server 管理任务,例如,用 编程方式检索配置设置,创建新数据库,应用 Transact-SQL 脚本,创建 SQL Server 代理作业以及调度备份等。 SMO 对象模型替 代了包含在 SQL Server 早期版本中的分布式管理对象 (DMO),因为它更安全可靠并具有更高的可伸缩性。 可用性在 高可用性技术、额外的备份和恢复功能,以及复制增强上的投资使企业能够构建和部署高可用的应用程序。 在高可用性上的创新有:数据库镜像、故障转移群集、数 据库快照和增强的联机操作,这有助于最小化停机时间,并确保可以访问关键的企业系统。 本节将详细介绍这些增强特性。 数据库镜像数 据库镜像允许事务日志以连续的方式从源服务器传递到单台目标服务器上。 当主系统出现故障时,应用程序可以立即重新连接到辅助服务器上的数据库。 辅助实例几 秒钟内即可检测到主服务器发生了故障,并能立即接受数据库连接。 数据库镜像工作在标

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐