本文由云+社区发表
本文作者:许中清,腾讯云自研数据库CynosDB的分布式存储CynosStore负责人。从事数据库内核开发、数据库产品架构和规划。曾就职于华为,2015年加入腾讯,参与过TBase(PGXZ)、CynosDB等数据库产品研发。专注于关系数据库、数据库集群、新型数据库架构等领域。目前担任CynosDB的分布式存储CynosStore负责人。

CynosDB for PostgreSQL是腾讯云自研的一款云原生数据库,其主要核心思想来自于亚马逊的云数据库服务Aurora。这种核心思想就是“基于日志的存储”和“存储计算分离”。同时,CynosDB在架构和工程实现上确实有很多和Aurora不一样的地方。

下图为CynosDB for PostgreSQL的产品架构图,CynosDB是一个基于共享存储、支持一写多读的数据库集群。

CynosDB for PostgreSQL产品架构图

CynosDB基于CynosStore之上,CynosStore是一个分布式存储,为CynosDB提供坚实的底座。CynosStore由多个Storage Node和CynosStore Client组成。CynosStore Client以二进制包的形式与DB(PostgreSQL)一起编译,为DB提供访问接口,以及负责主从DB之间的日志流传输。除此之外,每个Storage Node会自动将数据和日志持续地备份到腾讯云对象存储服务COS上,用来实现PIT(Point In Time)功能。

CynosStore会为每一个数据库分配一段存储空间,我们称之为Pool,一个数据库对应一个Pool。数据库存储空间的扩缩容是通过Pool的扩缩容来实现的。一个Pool会分成多个Segment Group(SG),每个SG固定大小为10G。我们也把每个SG叫做一个逻辑分片。一个Segment Group(SG)由多个物理的Segment组成,一个Segment对应一个物理副本,多个副本通过RAFT协议来实现一致性。Segment是CynosStore中最小的数据迁移和备份单位。每个SG保存属于它的数据以及对这部分数据最近一段时间的写日志。

CynosStore 数据组织形式

图二中CynosStore一共有3个Store Node,CynosStore中创建了一个Pool,这个Pool由3个SG组成,每个SG有3个副本。CynosStore还有空闲的副本,可以用来给当前Pool扩容,也可以创建另一个Pool,将这空闲的3个Segment组成一个SG并分配个这个新的Pool。

数据库用户有可能因为某种原因需要回到过去某个时间点的数据库快照,CynosDB提供快照备份特性,满足用户的回档需求。当然,可以回到过去的时间段总是有限的,这取决于快照备份的存储空间成本。CynosStore通过持续不断地将各个SG上的数据和日志备份到腾讯云对象存储服务COS上。其中,基础数据的快照根据一定频率定期备份,而日志则从RAFT状态机中源源不断地向COS备份。为了避免备份本身对SG的同步日志过程产生影响, SG会先将日志持久化到所在Store Node的本地存储,然后通过Journal Backup Service将本地Journal上传到COS。每个SG向COS备份的过程是完全独立并互不依赖的。每个SG备份时的故障处理也是独立的。

CynosStore即时恢复

相比SG的备份,一个数据库实例回档到某个时间点的过程要复杂得多,因为回档过程必须保证这个Pool的所有SG回到同一个快照点。当CynosStore接收到一个回档Pool的请求,CynosStore会根据这个Pool上所有SG备份的日志信息找到并计算出与这个时间点对应的VDL。这个计算的依据是每个SG的日志中会定期不断地加入一个时间戳日志。每个SG根据需要回档的时间点和Pool全局VDL找到时间上最接近的前一个快照以及相应的日志文件。然后根据快照和日志重放SG,各个SG重放过

程互不依赖。这个回档过程借助Replayer Service服务来完成,其根据某个SG的快照数据和日志重放到给定的一致性点,并将新产生的快照数据上传到COS。然后由META Center在CynosStore中构建新的Pool和新的SG,通知新SG leader从COS获取刚刚生成的快照数据,这样就完成了一个SG的回档。当这个Pool上所有的SG的回档完成,那么这个Pool的回档也就完成了。

此文已由作者授权腾讯云+社区发布


自研数据库CynosDB存储系统如何实现即时恢复的更多相关文章

  1. 免费报名 | 腾讯云自研数据库CynosDB交流会

    本文由云+社区发表 作者:技术沙龙 All in 云+时代,数据库的高可用性.按需付费.按需扩展等属性解放了大批开发者.腾讯发布的自研数据库CynosDB作为国内首款同时兼容MySQL和PG的云原生数 ...

  2. ZT:阿里合伙人发文:十年磨一剑,自研数据库终拿世界第一

    按:真正做技术的,就该这样. 以下为全文转载 (观察者网讯) 10月24日,阿里巴巴合伙人.高德总裁刘振飞在阿里云开发者社区发文,回忆从2009年启动“去IOE”工程到2019年OceanBase拿下 ...

  3. PostgreSQL Replication之第三章 理解即时恢复(4)

    3.4 重放事务日志 一旦我们创建了一个我们自己的初始基础备份,我们可以收集数据库创建的XLOG.当时间到时,我们可以使用所有这些XLOG 文件并执行我们所期望的恢复进程.这就像本节描述的一样工作. ...

  4. PostgreSQL Replication之第三章 理解即时恢复(3)

    3.3 做基础备份 在上一节中,您已经看到,启用归档只需要几行命令,并提供了极大的灵活性.在本节,我们将看到如何创建一个所谓的基础备份,稍后这可以使用XLOG.一个基本备份是一个最初的数据的拷贝. [ ...

  5. PostgreSQL Replication之第三章 理解即时恢复(1)

    到现在为止,您已经掌握了一定的理论.因为生活不仅由理论组成(它可能同样重要),是时候深入实际的工作了. 本章的目标是让您明白如何恢复数据到一个给定的时间点.当您的系统崩溃或者有人意外地删除了一个表,不 ...

  6. [转帖]超详细的Oracle数据库在不同损坏级别的恢复总结

    超详细的Oracle数据库在不同损坏级别的恢复总结 原创 波波说运维 2019-07-20 00:02:00 概述 在 DBA 的日常工作中不可避免存在着数据库的损坏,今天主要介绍 Oracle 数据 ...

  7. ajax上传图片到数据库中(不会即时显示)

    一共三个页面 数据表结构 数据表内容 第一个页面 nicheng.html <!DOCTYPE html> <html> <head> <meta chars ...

  8. 通过自研数据库画像工具支持“去O”评估

    “去O”,是近些年来一直很火的一个话题,随之也产生了各种疑惑,包括现有数据库评估.技术选型等.去O是项系统工程,需要做好充分的评估.本文通过自研工具,生成数据库画像,为去O评估提供一手数据,希望给大家 ...

  9. 数据库中数据DELETE了怎样恢复

    USE [BBDAS_FP_DATA] GO /****** Object: StoredProcedure [dbo].[Recover_Deleted_Data_Proc] Script Date ...

随机推荐

  1. HTML 练习js代码位置在head标签

    方式一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  2. 基于geoserver样式服务实现图层要素自定义配图

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在一般项目中,我们将geoserver样式服务中的SLD各参 ...

  3. 2017-12-24 为新语言编写Visual Studio Code语法高亮插件

    本文源码库: program-in-chinese/quan4-highlighter 语法高亮是一个开发环境的基本功能. 此文尝试为之前的"圈4"语言(详见编程语言试验之Antl ...

  4. 如何用GoldWave批量删除mp3文件开头65秒?

    具体操作如下: 一.打开goldwave--文件--批处理 二.批处理设置:     添加需处理的文件或文件夹(右侧)         1.转换:设置转换格式.         2.处理:       ...

  5. IdentityServer4 知多少

    1. 引言 现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号.小程序,基于IOS.Android的App,基于Windows系统的桌面应用和UWP应用等等,这么多种类的应用,就给应用的开 ...

  6. 开源:ASP.NET Aries 开发框架(已支持.NET Core)

    前言: 随着岁月的推进,不知不觉已在.NET这领域上战斗了十年了. 青春还没来得急好好感受,却已是步入健忘之秋的老人一枚了. 趁着还有点记忆,得赶紧把硬盘里那私藏的80G除外的东西,和大伙分享分享. ...

  7. Linux 桌面玩家指南:12. 优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. qml demo分析(objectlistmodel-自定义qml数据)

    一.效果展示 如图1所示,是一个ListView窗口,自定义了文本内容和项背景色. 图1 ListView 二.源码分析 代码比较简单,主要使用了QQmlContext类的setContextProp ...

  9. MAC系统上安装Apache ab测试工具

    第一步:下载 Apache HTTP Server http://httpd.apache.org/download.cgi#apache24 第二步:安装brew工具 https://brew.sh ...

  10. Ubuntu|ython3 :ImportError: cannot import name 'main'

    1.问题 root@stephen-K55VD:/usr/bin# pip3 Traceback (most recent call last): File "/usr/bin/pip3&q ...