1、CynosDB for Postgre一主多读架构内容 CynosDB for PostgreSQL架构 CynosDB for PostgreSQL关键设计 CynosDB for PostgreSQL一主多读架构为什么需要CynosDB 传统数据库在云上面临的问题 CynosDB解决思路 资源利用率低计算存储分离:弹性 扩展能力不足日志下沉以及异共享分布式存储 资源规划难 备份难 后台持续日志备CynosDB for PostgreSQL架构 CynosDB - 云原生数据库PostgreSQL主实例 PostgreSQL读实例CynosStore Client CynosStore Cl
2、ient写日志读页面读页面CynosStore集群管理服务对象存储CynosDB for PostgreSQL架构 - 关键设计 日志下沉、异步回放PostgreSQL 数据原子backendbackendbackendCynosStore Client CynosStore ClientCynosStore ClientCynosStoreProcess MTR日志发送Replica日志buffer CPL VDL日志 日志异步 日志 日志并行日志合并CynosStore日志链CynosDB for PostgreSQL架构 - 关键设计 多版本读(同步) RPL(Read Point305
3、0 MRPL=30 任何一个VDL都可以Read(A,30Read(A,50) 日志回收 最小读点(Minima日志回收一主多读 传统PostgreSQL主备模式仍有缺点 多读(Repli 横向扩展XLOG 提升数据PostgreSQLmasterPostgreSQLstandby 传统主备模式 创建新备 备机切换 收到日志 解决Buf一主多读 - 架构 扩展系统读能力、快速主备切换PostgreSQL(RO)DBPostgreSQL(RW)Data BufferDBCynosStore ProcessBlock Journal Listjournal 、运行信息、FSMCynosStoreP
4、rocessJournal BufferMinXid、MRPL本地存储本地存储COSFSMCynosStore一主多读 - 架构 多个读节点、并行日志恢复PostgreSQL(RO)DB EnginePostgreSQL(RO)PostgreSQL(RO)运行时内存:事务列表,锁等数据BufferPostgreSQL(RW)DB Engine运行信息CynosStore ProcessJournal Apply1.nCynosStore ProcessJournal SenderJournal SenderjournalJournal SenderJournal ReceiverBlock -
5、 Journal HTAB持久化的日志日志buffer日志buffer合并的日志 接收到的日志一主多读 - 架构 CynosStore Process实现连接管理、日志管理 DB与CynosStore接口简单 DB无需关心日志管理、合并DB Engine数据Buffer Pool获取某版本Buffer更新运行信息、分配Buffer PageBuffer锁相关获取RPL提供多版本读CynosStore Process日志接收线程日志合并线程Block - Journal HashTable日志Buffer一主多读 - 架构 传统PostgreSQL恢复数据Buffer过程 CynosDB for
6、walreceiver收到XLOG写入XLOG Filejournal rece志写入jourStartup进程从XLOG日志追加线程将Block- journal文件中读取日志日志Apply线程页面是否NRP从数据文件中取小于在buffer读取Pagepool中页面是buffer(调用调YN跳过日志恢复XLOGY合并读日志回放与读事务互相不阻塞backend20backend1015100Page AApplyDB Engine10 15 20 30CynosStoreCynosStore ClientB.A一主多读 - 读页面 原子性:Repilca按照MTR粒度进行访问页面,保证对象结构
7、完整 以索引页面分裂为例MTRPPABAAB一主多读 - 切换 传统PostgreSQL切换过程:1 收到切换信号PostgreSQL Standby3恢复完当前收到的日志、写checkpoint4Startup ProcesStartup Process退出2XLogWalReceiver Process关闭WalReceiver Proces5处理写事务一主多读 - 切换 CynosDB秒级切换HA组RO组CynosDB主实例CynosDB备实例CynosDB备实例CynosDBCynosDBCynosDB读实例读实例读实例CynosDB读实例 HA组中的备实例参与主备切换 备机切换不需要恢复大量日志 读实例仅仅参与读事务请求一主多读 - 启动 传统PostgreSQL备机的启动 CynosDB Repli 传统备机启动需要恢复到MinRecoveryPoint才能到一致状态数据Buffer100Replay5050Flush Buffer恢复点:LSN=1000100数据文件XLogMinRecoveryPoint=1000一主多读 - 防止多写 HA Fencing机制 数据库启动, 使用获取的fe 存储将小于fe新主101旧主100Replica 90101101101101Meta服务Atomic fencing:101命令连接(读)读连接客户案例