




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
封面(此面将由下全覆盖,此稿中的示意,将在稿PDF版中做更新)(待分享)卷首PolarDB-X是一款面向超高并、海量存、复景的云原生分布式数据系。其采用Shared-nothing与存算分离架构,支持水平展、分布式事、混合等能力,具企、云原生、高可用、高度兼容MySQL系及生等特点。PolarDB-X最初解决阿里巴巴天猫“双十一”核心交易系数据展性瓶而生,之后伴随阿里云一路成,是一款多种核心景的、成熟定的数据系。2021年10月,在云栖大会上,阿里云正式外开源了云原生分布式数据PolarDB-X,采用全内核开源的模式,开源内容包含算引擎、存引擎、日志引擎、PolarDB-XOperator等。2022年1月,PolarDB-X正式布2.0.0版本,2021年10月20号云栖大会正式开源后的第一次版本更新,更新内容包括新增集群容、以及binlog生兼容等特性,兼容maxwell和debezium增量日志,以及新增其他众多新特性和修复若干。2022年3月,PolarDB-X正式布2.1.0版本,包含了四大核心特性,全面提升PolarDB-X定性和生兼容性,其中包含基于Paxos的三副本共。2022年5月,PolarDB-X正式布2.1.1版本,重点推出冷数据新特性,可以支持表的数据按照数据特性分存在不同的存介上,比如将冷数据存到AliyunOSS象存上。2022年9月,PolarDB-X数据高分通分布式数据金融准,共行了337个的工作,涉及:架构、运、安全、容灾、性能等。家后,PolarDB-X判定符合的323,整体果表异。2022年10月,PolarDB-X正式布2.2.0版本,是一个重要的里程碑版本,重点推出符合分布式数据金融准下的企和国ARM适配,共包括八大核心特性,全面提升PolarDB-X分布式数据在金融、通、政等行的普适性。了帮助大家理清快速上手,我布了一系列的文章帮助大家理解PolarDB-X源。本集合了PolarDB-X源解系列文章,希望通本,能大家深入理解PolarDB-X。您首先可以了解PolarDB-X数据的基本原理,学到一个数据是如何的。您也可以把PolarDB-X的原理用到其他系,您学其他数据和分布式系也有帮助。其次,在熟悉了PolarDB-X的代之后,如果有需要,您可以在遵守开源的基上在未来的工作中使用我的代,或者为PolarDB-X献您的代。目PolarDB-X源解(一):CN代构 5PolarDB-X源解(二):CN启流程 13PolarDB-X源解(三):CDC代构 22PolarDB-X源解(四):SQL的一生 37PolarDB-X源解(五):DML之Insert流程 52PolarDB-X源解(六):分布式死 68PolarDB-X源解(七):私有接的一生(CN篇) 74PolarDB-X源解(八):GlobalBinlog的一生 97PolarDB-X源解(九):DDL的一生(上) 107PolarDB-X源解(十):DDL的一生(下) 123PolarDB-X源解(十一):事的一生 133PolarDB-X源解(十二):in常量的与化 151PolarDB-X源解(十三):DML之INSERTIGNORE流程 168PolarDB-X源解(番外):如何一个Paxos 180PolarDB-X源解(一):CN代构 5PolarDB-X源解(一):CN代构本文主要介PolarDB-SQL(即PolarDB-XCN算)代构,首先要回PolarDB-X的架构,然后从目入手介各个模的功能,最后列出一些关接口便于者代。一、整体架构PolarDB-X包含4个核心件构成,CN(ComputeNode)算、DN(DataNode)存、GMS(GlobalMetaService)管理元数据和提供TSO服,CDC(ChangeDataCapture)生成更日志。其中,CN作服入口,完成三个任:通MySQL接收用求,返回果。作分布式引擎,兼容MySQL法,提供分布式事、全局索引、MPP等特性。通RPC与DN交互,下写指令,果。下文将合CN的三个任,介代、目、模在其中扮演的角色,并出一些关接口,便于者探索。PolarDB-X源解(一):CN代构 6二、代介CN代托管在GitHub上,划分polardbx-sql和polardbx-glue两个。MySQL和分布式引擎包含在polardbx-sql中,由于License原因,与DN交互的RPC相关代独放在polardbx-glue中。代前,首先需要下两个的代。推荐首先下polardbx-sql代,然后通gitsubmodule引入polardbx-glue,可以独立提交两个的更,具体步参考contributing文档。CN是一个多模的Java目,模之通接口暴露服,模关系在pom.xml中,通mvndependency:tree命令可以看全部依。部分接口使用了SPI机制,部分接口需要在模的src/main/resources/META-INF/polardbx目下看当前模中使用的具体。关于打包,可以参考编译/初始化文档。CN的main方法在polardbx-server模下的TddlLauncher中,“Tddl”代表“TaobaoDistributedDataLayer”,生于PolarDB-X0.5代,由于名被关系依,保留至今。三、目与模polardbx-sql目首中可以看到很多目和文件,加上重名polardbx-rpc后加入工程的polardbx-glue,目根目下包含13个文件,9个文件。其中,代目以polardbx开,docke_build.sh用于本地生成docker像,pom.xml是整个目的工程文件,saveVersion.sh用于打RPM包生成版本号后。PolarDB-X源解(一):CN代构 7根目中,每个以polardbx开的目,都代表一个独立的模,以下展开介各个模。模 包polardbx-calcite –polardbx-calciteorg.apache.calcite.plan.heppolardbx-calciteorg.apache.calcite.plan.volcanopolardbx-calciteorg.apache.calcite.sqlpolardbx-calcite org.apache.calcite.rel
介PolarDB-X化器基于ApacheCalcite框架做了深度定制,模用于引入calcite-core的代,定制代在polardbx-optimizer模下RBO框架CBO框架AST(抽象法)点数据构划相关代,包括数据构、化、型系以及相关工具等内容,主要包含calcite-core的原始代,增加的/物理算子和化放在polardbx-optimizer模下polardbx-calcite org.apache.calcite.rexpolardbx-calcite org.apache.calcite.schemapolardbx-–commonpolardbx-–executorpolardbx-gms –polardbx-gms com.alibaba.polardbx.gms.listenerpolardbx-gms com.alibaba.polardbx.gms.metadbpolardbx-gms com.alibaba.polardbx.gms.privilegepolardbx-gms com.alibaba.polardbx.gms.synccom.alibaba.polardbx.gms.topology/polardbx-gmsha/locality/partition/tablegrouppolardbx-net –polardbx-net polardbx-netcom.alibaba.polardbx.rpc.cdcpolardbx-netcom.alibaba.polardbx.sslpolardbx-–optimizerpolardbx- com.alibaba.polardbx.optimizer.confioptimizer g.metapolardbx- com.alibaba.polardbx.optimizer.confioptimizer g.schema/tablepolardbx- com.alibaba.polardbx.optimizer.core.optimizer datatype
PolarDB-X源解(一):CN代构 8表达式相关代,主要包含calcite-core的原始代,新增的表达式相关代放在polardbx-optimizer模下Catalog相关接口抽象,具体在polardbx-optimizer模下工具模行器模,所有行器代都在里,比如SQL行代,MPP行器,异步DDL引擎,信息收集,scaleout,全局二索引等,内容比多,后文章中展开介元数据服模后台听metaDb配置的接口,用于支持CN感知配置化写schema,table,column,index等元数据的接口,informaction_schema中展示的信息大部分通里的接口取。metaDb是PolarDB-X持久化元数据的系统库授、、白名、写限信息相关接口CN点通信相关接口数据拓扑相关接口,了物理分区分布(topology),leader/follower(ha),地域(locality),分区(partition),表(tablegroup)等信息MySQL客端/服器相关接口包含TCP包理和与客端交互的接口(包括登、文本、PreparedStatement等)CDC件更日志相关接口SSL相关理接口化器模包含从/物理划中收集信息的工具,比如引用了哪些列,算的信息等库/表元数据相关,了org.apache.calcite.schema中定的元数据接口数据型相关代polardbx-com.alibaba.polardbx.optimizer.core.optimizerfunctionpolardbx-com.alibaba.polardbx.optimizer.core.optimizerplannerpolardbx-com.alibaba.polardbx.optimizer.core.optimizerprofilerpolardbx-com.alibaba.polardbx.optimizer.core.optimizerrelpolardbx-com.alibaba.polardbx.optimizer.core.optimizerhintpolardbx-com.alibaba.polardbx.optimizer.core.optimizersequencepolardbx-com.alibaba.polardbx.optimizer.core.optimizerrule/shardingpolardbx-com.alibaba.polardbx.optimizer.core.optimizerviewpolardbx-parser–polardbx-rpc–polardbx-rpccom.alibaba.polardbx.rpcpolardbx-rpccom.alibaba.polardbx.mysql.cjpolardbx-rule–polardbx-server–polardbx-servercom.alibaba.polardbx.cdcpolardbx-servercom.alibaba.polardbx.configpolardbx-servercom.alibaba.polardbx.managerpolardbx-servercom.alibaba.polardbx.matrixpolardbx-servercom.alibaba.polardbx.serverpolardbx-servercom.alibaba.polardbx.server.handlercom.alibaba.polardbx.server.responspolardbx-serverepolardbx-–transaction
PolarDB-X源解(一):CN代构 9表达式算相关代RBO/CBO化行程中,收集运行源消耗信息逻辑/物理算子,DQL/DML/DDL/DAL句化器后,化物理算子构成的行划HINT理相关代全局唯一ID相关代分区裁剪相关代内置的行划点,主要information_schema和SHOW指令涉及的法解析模,基于alibaba/druid内置parserDN通信的相关代rpc交互代rpc数据象拆分模服入口,将其他模在一起,main方法在模中CDC核心控制模,包括CDC系表,CDC元数据初始化,CDCDDL打等内容系配置加相关代管理指令相关代,用于理从管理端口入的指令SQL理内部入口,串解析,化,行流程包含main方法和求理主流程相关代码解析文本和LoadData指令的相关代码部分管控指令的行代事管理模,包含分布式事的代码PolarDB-X源解(一):CN代构10polardbx-com.alibaba.polardbx.transaction.as异步任相关代,包括死、事transactionync超、事日志等polardbx-com.alibaba.polardbx.transaction.lo事日志相关代transactiongpolardbx-com.alibaba.polardbx.transaction.tsoTSO服相关代transaction四、如何入手PolarDB-X是一个复的系,代、接口、模众多,代需要一些技巧,推荐先整体后局部的方式。整体了解和所有SQL数据一,CN可以划分、化器和行器三,代可以首先从每的入出入手,了解从用起写求到收到果的整体流程。下面介各的一些关接口。协议层了MySQL协议,建立接,接收用送的数据包,装成SQL和参数化器。根据功能,代可以分接管理,数据包解析和解析三部分。接管理和数据包解析代在polardbx-net模中,解析代polardbx-server模中。PolarDB-X源解(一):CN代构 11接管理的代可以从建立接入手了解,入口在NIOAcceptor#accept。数据包解析是将数据数据象的程,推荐从文本入手了解,入口在AbstractConnection#read。协议解析是将协议数据对象分发到具体执行逻辑的过程,入口在FrontendCommandHandler#handle。化器对SQL的理包括法解析,校(Validate),生成划,划化,物理划化五个步,化出物理行划,入行器。化器使用了ApacheCalcite的RBO/CBO框架,因此化器框架代在polardbx-calcite模中,具体在polardbx-optimizer模中。化器入口在Planner#plan,以下列出各个步的关接口。步接口法解析FastsqlParser#parse校SqlConverter#validate划生成SqlConverter#toRel划化Planner#optimizeBySqlWriter物理划化Planner#optimizeByPlanEnumerator行器执行器接收到物理执行计划后,首先根据计划类型确定执行模式,包括cursor/local/mpp三种行模式。不同行模式下每个算子都的行代可能有差异,因此需要将算子定到行代。行程会通RPC接口与DN通信,下写求并果。以下列出关接口:步接口行器入口PlanExecutor#execute行模式ExecutorHelper#executecursor模式算子定到行代AbstractGroupExecutor#executeInnerPolarDB-X源解(一):CN代构12local模式算子定到行代LocalExecutionPlanner#planmpp模式切分行划PlanFragmenter.Fragmenter#buildRootFragmentcursor模式与DN通信MyJdbcHandlerlocal/mpp模式与DN通信TableScanClient深入了解要深入了解模代,比好的方式是着去看。比如想要了解代,首先思考最的select1的理流程是怎的,合前面的模和接口介,跟踪后不得到答案,然后思考其他句/型(比如SET和PreparedStatement)理起来有何不同?收到/返回的包大如何理?SSL如何理?等等。另外要注意,然是深入了解,依然推荐在程中分清主次,“目与模”小中列出的包建重点关注,其它包中的内容可以先快速。小本文主要介CN(ComputeNode)代,涉及polardbx-sql和polardbx-glue两个,目的是帮助者快速掌握CN代的整体构。从功能上看,CN完成三个任:理、化、与DN交互,代也因此可以分、化器、行器三部分。文章首先介了代工程的形式,列出相关文档。然后展开各个目模的功能,便于需要深入了解代的者快速定位。最后出代建,并列各个模中的关接口,供者使用。PolarDB-X源解(二):CN启流程 13PolarDB-X源解(二):CN启流程本文主要解PolarDB-X的CN点(polardbx-sql)的启程包括参数加、元信息加等程并启程中的模做的介。CNServer层的代码主要包含在polardbx-server模块中,main函数位于TddlLauncher。主入口在CobarServer.init()方法中。CN启分以下几个流程:1.CobarServer象的建是例,可以通CobarServer.getInstance()取。参数加路径:TddlLauncher.main()->CobarServer.new()->CobarConfig.new()->CobarConfig.initCobarConfig()->ServerLoader.load()CN的参数均key-value的形式。ServerLoader.load()中,CN主要从以下位置取参数:perties文件,其默位置在classpath的根目中,所以一般使用IDE进行开发时,加载的是polardbx-server\src\main\resources\perties文件Stringconf=System.getProperty("server.conf","classpath:perties");PolarDB-X源解(二):CN启流程 14Java运行参数中例如java...-DserverPort=8527境量中serverProps.putAll(System.getProperties());serverProps.putAll(System.getenv());以上参数来源中,perties的先最低,境量中的先最高,当包含同名参数,高先的参数来源会覆盖低先的参数来源。加载的参数,会保存在SystemConfig中,该类为单例,可以通过CobarServer.getInstance().getConfig().getSystem()取。从MetaDB取元数据,并初始化例的系件路径:TddlLauncher.main()->CobarServer.new()->CobarConfig.new()->CobarConfig.initCobarConfig()->ServerLoader.load()->ServerLoader.initPolarDbXComponents()初始化元数据的接池MetaDbDataSource.initMetaDbDataSource会使用SystemConfig中存的MetaDB的地址、端口、用名、密、名等信息,建立与MetaDB的接。MetaDbDataSource.initMetaDbDataSource(this.system.getMetaDbAddr(),this.system.getMetaDbName(),this.system.getMetaDbProp(),this.system.getMetaDbUser(),this.system.getMetaDbPasswd());PolarDB-X源解(二):CN启流程 15MetaDbDataSource是一个单例,实现了JDBC的程序中可以使用MetaDbDataSource.getInstance().getConnection()取与MetaDB的接(了JDBC接口),并使用MetaDB行。系表行建或者升SchemaChangeManager.getInstance().handle();polardbx-gms\src\main\resources\ddl\中保存了系表的表构,并且使用alter句了每一次版本的更。SchemaChangeManager在初始化,会当前每个系表的表构版本,如果版本老,会依次使用些句alter句行更新。取例ID信息ServerInstIdManager.getInstance();一个PolarDB-X集群也称一个例,在MetaDB中有一个唯一的例ID。同,PolarDB-X例有主例与只例两种模式。当存在只例,必然存在一个主例。步从MetaDB中取例ID,如果当前例只例,会取其主例的例ID。4)MetaDbConfigManager先介下个西是干的。我存在MetaDB中的配置信息,如果生化,CN需要能感知到个化。例如,某个表增加了一个列。作CN,如何能感知到个化呢?一个比的思路是元数据做,各几秒一次。但如果每个模都去做的事情,会有个比大的是MetaDB的力会很大。PolarDB-X源解(二):CN启流程 16MetaDbConfigManager此作了封装,作了一个一的机制。但由于每个模块元数据表的格式千万化,所以MetaDbConfigManager并不是直接每个模的元数据表,而是config_listener表。表的几个关列是data_id、op_version、gmt_modified。我可以每个data_id在代中注册一个listener,当MetaDbConfigManager到data_id的op_version生化的,会回个listener,一般情况下,各模的listener会按需要再取的元数据表。例如,d1.t1表在config_listener中有一行:polardbx.meta.table.d1.t1往t1表中增加了一个列,我会修改MetaDB中的columns表,同,我会修config_listener表中polardbx.meta.table.d1.t1行的op_version,行+1的操作。几秒后,MetaDbConfigManager会到行的op_version列生了化,会回表构管理模的listener(:TableMetaListener),listener会重新加d1.t1表的元数据。所以MetaDbConfigManager可以做到每个CN点只有一个程MetaDB做就能感知到各个元数据表的化。在启,CN会初始化MetaDbConfigManager用于做的程和定任。5)MetaDbInstConfigManager初始化例的配置,里的配置似于MySQL中的SystemVariables,例如SQL的内存大小限制之的。段会从MetaDB的inst_config表中加所有的配置并保存在内存中。PolarDB-X源解(二):CN启流程 17并且会注册的listener,当inst_config表生化的候,会回MetaDbInstConfigManager的listener。6)ConnPoolConfigManager个是用来存接池(CN与DN之的接池)相关的配置的(其它用到的配MetaDbInstConfigManager中都有),也是从inst_config中取。7)StorageHaManager个比重要。目前每一DN(里的指一个Paxos)内的果是存在DN自己的系表中,并不会写到MetaDB中。因此CN需要有机制去从DN的系表中探各点的角色。StorageHaManager会从storage_info表中取所有的DN点的接信息,并且内部会有的程去角色信息。当DN生HA的候,StorageHaManager会探到个化,并感知到最新的Leader等角色。初始化系initSystemDbIfNeed初始化information_schema和polardbx等几个系。建程池路径:CobarServer.new()几个主要的程池的建:managerExecutor,Manager端口的求killExecutor,用来行kill指令PolarDB-X源解(二):CN启流程 18serverExecutor,各种SQL都是由个程池行5.CobarServer.init路径:TddlLauncher.main()->CobarServer.init()1)(TDataSource)的初始化入口在GmsAppLoader.initDbUserPrivsInfo,里的“App”指的就是一个。里会加每个的用限信息以及最重要的TDataSouce。TDataSource在CN中与一一。它是每个行SQL的入口。TDatSource的初始化在MatrixConfigHolder.init中,包含了以下内容:初始化拓扑,例如个包含了哪些DN,并初始化与些DN之的接池(TopologyHandler.initPolarDbXTopology)获取每个DN的信息,包括版本,特性的支持程度等(StorageInfoManager.init)初始化分片的路由信息(mode='drds',TddlRuleManager.init;mode='auto',PartitionInfoManager.init)初始化表管理器(有哪些表、每个表有哪些列哪些索引等)(GmsTableMetaManager.init)初始化事管理器(transactionManager.init())建PlanCache(PlanCacheplanCache=newPlanCache(schemaName);)启DDL任引擎(ddlEngineInit())PolarDB-X源解(二):CN启流程 19信息管理器的初始化(StatisticManager.init)SPM的初始化(PlanManager.init)GmsClusterLoader.loadPolarDbXCluster加集群信息,例如集群中有哪些CN点等。初始化CclService,个是用来做SQL限流的。3)warmupCN的SQL函数目前是反射机制行加的,里主要作用是加下所有的函数。网的初始化步束后,服端口便会打开,CN程就能开始外提供服了。CN在一步会启Server端口与Manager端口两个端口。Server端口MySQL的3306端口,是提供前端用使用的。Manager端口用于内部的管理使用,例如,SHOWPROCEESSLIST指令需要收集所有CN的行情况,就会使用端口行收集。1)NIOProcessorprocessors=newNIOProcessor[system.getProcessors()];for(inti=0;i<processors.length;i++){processors[i]=newNIOProcessor(i,"Processor"+i,this.serverExecutor);processors[i].startup();}PolarDB-X源解(二):CN启流程 20CN网理求的入口是NIOProcessor,每个NIOProcessor有写两个程。里会来启NIOProcessor的W与R程。NIOProcessor只网相关的理,如果接收到的是SQL求,后的SQL的行会交予ServerExecutor程池行行。2)NIOAcceptorCN网用来理接建立求的是NIOAcceptor,NIOAcceptor的new程中,会打开端口行听:publicNIOAcceptor(Stringname,intport,FrontendConnectionFactoryfactory,booleanonline)throwsIOException{super.setName(name);...this.selector=Selector.open();this.serverChannel=ServerSocketChannel.open();this.serverChannel.socket().bind(newInetSocketAddress(port),65535);...}同,NIOAcceptor也是一个程,会理接建立的求。当接建立后,NIOAcceptor.accept方法会将连接绑定到一个NIOProcessor上,由NIOProcessor理接上后的写求。可以看出,于服端口来,NIOAcceptor只有一个,NIOProcessor的数目一般和CPU核数保持一致。3)MPPServer的启CN作MPP集群中的一个,需要启端口来行CN之的通信。startMppServer会行MPP服的启。PolarDB-X源解(二):CN启流程 21CDC服的启CobarServer.tryStartCdcManager会行CDC的启。结语至此,CN就启完成了。个程包含了CN中大多数件,于篇幅原因,没有完整介每个件的作用。如果你些件中的哪一个感趣,迎留言我,我会在后的文章中,一些关的件做一步的介。PolarDB-X源解(三):CDC代构 22PolarDB-X源解(三):CDC代构polardbx-cdc是云原生分布式数据系PolarDB-X的一个核心件,全局增量日志的生成、分和。通polardbx-cdc,PolarDB-X数据可以外提供完全兼容MySQLBinlog格式和的增量日志,可与MySQLBinlog下游生工具的无接。本篇将polardbx-cdc的代构做一个系介,并解一下如何快速搭建开境。一、体架构如上所示,PolarDB-X包含4个核心件,CN(ComputeNode)算、DN(DataNode)存、GMS(GlobalMetaService)管理元数据和提供TSO服,CDC(ChangeDataCapture)生成更日志。其中,CDC作Binlog日志数据的出口,主要3方面的工作:基于TSO,各个DN的原始物理Binlog行排序和并,构建出全局有序的事列。将事列中的数据,持久化到存介,生成兼容MySQLBinlog格式的Binlog文件。提供兼容MySQLDump的消能力,外提供Replication服。PolarDB-X源解(三):CDC代构 23更加形象的来理解,polardbx-cdc是一个Streaming系,InputSource是各个DN的原始Binlog,Computing是一系列算和理算法(排序、略、整形、合并等等),TargetSink是屏蔽了分布式数据内部的全局Binlog文件,并提供了兼容MySQL生的Replication能力。其运行状,如下所示:从技架构的角度来看,CDC共包含3个核心件,分是Daemon、Task和Dumper,如下所示:一个Node代表一个运行点,可以是一台物理机、一台ECS或一个Docker容器,可以部署1到n个Node,但如果需要HA能力,至少需要部署两个。每个Node上都会运行一个Daemon程,程行控、管控、度等功能,其定位可以和Hadoop中的NodeManager比。多个Daemon进程中会有一个Leader角色,通占的方式来取,一些中心化的控制功能。PolarDB-X源解(三):CDC代构 24Dumper从Task拉取理后的binlog数据,将数据持久化到Binlog文件,并外提供兼容MysqlDump的Replication服。每个Node上都会运行一个Dumper程,其中有一个Dumper会被定Master角色,其余Dumper的角色Slave,Slave会复制Master的全局Binlog文件,当生故障,Daemon会完成Master的故障移。Task是CDC的内核,事排序、数据整形、事合并、DDL理、元数据生命周期管理等功能,整个CDC集群只会有一个Task程,度程序会最低的Node运行Task,并尽量保DumperMaster和Task在不同的Node。二、工程构polardbx-cdc工程代托管在GitHub上(地址),遵循ApacheLicense2.0。polardbx-cdc是一个多模的Java目,模之通接口暴露服,模关系在pom.xml中,通mvndependency:tree命令可以看全部依。PolarDB-X源解(三):CDC代构 25如上所示,整个目共包含15个目模(除此之外,CDC在polardbx-cdc项目中有部分功能模,具体可参[附3]),下面每个模展开介。[模]codestye提供了一份内置的代格配置文件,主要面向IDEA,如果有趣献源,可基于style文件行置。[模]docker提供了一系列docker相关的配置文件,通运行目下的build.sh,可以在本地快速构建出一份dokcer像。[模]polardbx-cdc-assemble程序构建模,提供了构建/打包等相关的配置,在polardbx-cdc工程的根目下行mvncleanpackage-Dmaven.test.skip=true,会在assemble的target目下生成polardbx-binlog.tar.gz程序包。[模]polardbx-cdc-canalbinlog数据解析模,引用了开源Canal的源,并做了很多定制化改造,核心代介如下:包(文件)名称功能介定了MySQLBinlogEvent的各种数据模com.aliyun.polardbx.binlog.canal.binlog型,以及Binlog二制数据行Decode的核心Canal的运行内核模,包含数据解析流程com.aliyun.polardbx.binlog.canal.core的管理、ddl的理、限的管理、HA的理等等PolarDB-X源解(三):CDC代构 26[模]polardbx-cdc-common公共模,提供了基工具、域模型、数据、公共配置等,核心代介如下:包(文件)名称com.aliyun.polardbx.binlog.domaincom.aliyun.polardbx.binlog.daocom.aliyun.polardbx.binlog.heartbeatcom.aliyun.polardbx.binlog.leadercom.aliyun.polardbx.binlog.rpccom.aliyun.polardbx.binlog.schedulercom.aliyun.polardbx.binlog.taskgeneratorConfig.xml
功能介包含了域模型的定,其中po包下的源代生成工具自生成,了CDC的元数据表包含了所有的数据定,也是代生成工具自生成包含了TsoHeartbeat件,保binlogstream不断向前流,也是混合事策略景下生成虚拟TSO的必要条件提供了一个基于MySQLGET_LOCK函数的LeaderElector定了Task和Dumper之行数据交互的Rpc接口包含了集群度和源分配相关的功能包含了Task和Dumper件定心跳相关的功能实现代生成器配置文件,使用了MyBatisGenerator行自化代生成[模]polardbx-cdc-daemon守程模,提供了HA度、TSO心跳、控信息收集、OpenAPI等功能,核心代介如下:包(文件)名称 功能介com.aliyun.polardbx.binlog.daemon.cluster包含了集群管控相关功能,心跳、运行com.aliyun.polardbx.binlog.daemon.schedule拓扑度、HA探活等包含了若干Rest格的接口,警事件com.aliyun.polardbx.binlog.daemon.rest收集、Metrics收集、系参数置等PolarDB-X源解(三):CDC代构 27[模]polardbx-cdc-dumper全局Binlog文件dump模,接收Task模入的binlog数据并落,并外提供兼容MySQLdump的数据服,核心代介如下:包(文件)名称 功能介com.aliyun.polardbx.binlog.Dumper主之行数据同步,的Client实现dumper.dump.clientcom.aliyun.polardbx.binlog. 逻辑Binlog文件构建模,最核心的两个分是LogFileGenerator和LogFileCopier,分Dumperdumper.dump.logfileMaster和DumperSlave的Binlog文件理[模]polardbx-cdc-format数据整形模,物理binlog行格式(增加列,减列,物理表化表名称等),保后的数据格式和表Schema始保持一致的状。[模]polardbx-cdc-meta元数据管理模,以基准,PolarDB-X的所有表和物理表行史版本,可以构建出定任一点的Schema快照,是DDL理和Binlog整形的基支撑。此外,模了CDC系表的Sql脚本定(src/main/resources/db/migration),CDC使用Flyway行表构的管理。[模]polardbx-cdc-monitor控模,一个内置的控,用来管理和控事件。在运行,控信息会通模送到daemon程。[模]polardbx-cdc-protocol数据定模,cdc使用gRpc和protobuf来行数据的,此模定了数据接口和数据交格式,核心代介如下:PolarDB-X源解(三):CDC代构 28包(文件)名称功能介tocol包含了Task点和Dumper点的数据交格式定com.aliyun.polardbx.rpc.cdc包含了Dumper点和CN点的数据交格式定[模]polardbx-cdc-storage数据存模,基于rocksdb行了封装展,当内存源不足(如大事、bigcolumn等景),用来将内存数据存到磁[模]polardbx-cdc-task核心任模,可以是CDC的kernel,最核心的如事的排序、整形、合并、DDL的理、元数据的生命周期等操作,均在此模完成。核心代介如下:包(文件)名称功能介包含了一排序功能,每个DN的原始物理com.aliyun.polardbx.binlog.extractorBinlog行解析,并按照TSO行排序,以数据整形、元数据史版本、ddl理等功能com.aliyun.polardbx.binlog.merge包含了全局排序功能,接收一排序出的有序列,行多路并,出全局有序的事列包含了事合并功能,从全局有序的事列提取com.aliyun.polardbx.binlog.collect数据,合并具有相同事id的局部事,得到完整全局事com.aliyun.polardbx.binlog.transmit包含了数据功能,排序合并后的数据通模送到下游Dumper件包含了一排序功能,每个DN的原始物理com.aliyun.polardbx.binlog.extractorBinlog行解析,并按照TSO行排序,以数据整形、元数据史版本、ddl理等功能PolarDB-X源解(三):CDC代构 29[模]polardbx-cdc-transfer一个内置的程序,通运行程序,可以CDC全局Binlog的正确性行基本的,使用方法后文会有述。三、表明CDC的系元数据表保存在GMS元数据,下面元数据表行介。binlog_system_config系参数信息表,保存系的参数配置。binlog_task_config系运行拓扑配置表,保存dumper和task的配置信息,如指定在哪个点行、Rpc端口、运行内存等。binlog_node_info点信息表,保存了每个点的源配置和运行状等信息,每个Node于表中的一条。binlog_dumper_infodumper运行状信息表,每个Dumper程表中一条。binlog_task_infotask运行状信息表,每个Task程表中一条。PolarDB-X源解(三):CDC代构 30binlog_logic_meta_history表元数据信息史表,用于每条DDLSQL及其的表拓扑信息。binlog_phy_ddl_history物理表元数据信息里是表,用于每条物理DDLSQL。binlog_oss_recordbinlog文件信息表,每个Binlog文件于表中的一条。binlog_polarx_command命令信息表,CDC和CN之部分交互通表来完成,如触全量元数据的初始化等。binlog_schedule_history度史表,集群每生一次重新度(如:点宕机触Rebalance),会在表中一条史信息。binlog_storage_historyDN点史表,PolarDB-X行水平容或者容,DN数量会生更,每次更都会通“打”的方式通知CDC,CDC会通表按照所有的更史。Dumper程每次启会Binlog文件中的最大tso,送Task程,Task会通tso从binlog_storage_history表中到当前接的DN列表。PolarDB-X源解(三):CDC代构 31binlog_env_config_history参数更史表,CDC中有部分参数需要和定,表用来些参数的更史,和binlog_storage_history似,系会以tso基准,使用段的参数配置。binlog_schema_historyFlyway行史表。四、开指引下面来介一下,如何基于源搭建开境,方便行二次开或代。JDK最低要求1.8。准一个PolarDB-X例(启CN+DN即可,不要启CDC件),可通pxd方式部署,或通源安装。准polardbx-sql源,并行命令mvninstall-Dmaven.test.skip=true-Denv=release,主要是了得到polardbx-parser包,cdc引用了模。准polardbx-cdc源,并整perties中的配置,根据情况整,可能需要整的配置有。polardbx.instance.idmem_sizemetaDb_urlmetaDb_usernamemetaDbPasswdpolarx_urlpolarx_usernamepolarx_passworddnPasswordKeyPolarDB-X源解(三):CDC代构 32polardbx-cdc根目下行mvncompile-Dmaven.test.skip=true-Denv=dev,CDC源。启Daemon程,直接运行com.aliyun.polardbx.binlog.daemon.DaemonBootStrap即可。启Task程,运行com.aliyun.polardbx.binlog.TaskBootStrap,并指定入参“taskName=Final”。启Dumper程,运行com.aliyun.polardbx.binlog.dumper.DumperBootStrap,并指定入参“taskName=Dumper-1”。PolarDB-XServer,行一些Sql,察{HOME}/binlog目下是否会生Binlog数据。createdatabasetransfer_test;CREATETABLE`transfer_test`.`accounts`(`id`int(11)NOTNULL,`balance`int(11)NOTNULL,`gmt_created`datetimenotnull,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8dbpartitionbyhash(`id`)tbpartitionbyhash(`id`)tbpartitions2;INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(1,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(2,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(3,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(4,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(5,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(6,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(7,100,now());PolarDB-X源解(三):CDC代构 33INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(8,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(9,100,now());INSERTINTO`transfer_test`.`accounts`(`id`,`balance`,`gmt_created`)VALUES(10,100,now());Docker安装一个MySQL,建安装8.0版本,提供一个安装示例如下:dockerrun-itd--namemysql_3309-p3309:3306-eMYSQL_ROOT_PASSWORD=rootmysql登dokcer例:dockerexec-itmysql_3309 bash编辑/etc/mysql/f,a.增加如下配置来关Gtid(polardbx-cdc全局Binlog不支持Gtid)gtid_mode=OFFenforce_gtid_consistency=OFFb.更改serverid,避免与主重复server_id=2重启docker例:dockerrestartmysql_3309MySQL客端登新安装的MySQL,并行如下命令,察accounts表等信息是否已同步到MySQL。stopslave;resetslave;CHANGEMASTERTOMASTER_HOST='xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_PORT=xxx,MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=4,MASTER_CONNECT_RETRY=100;startslave;PolarDB-X源解(三):CDC代构 34可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 预制墙板圈梁施工方案
- 输油管施工方案
- 汛期家中防水施工方案
- 重载地面修复施工方案
- 简约大气教育培训讲课
- 办公室人员中期述职报告
- 施工洞安全施工方案
- 矩形边沟施工方案
- 2025年电子计算机配套产品及耗材项目合作计划书
- 课题开题报告:基于“四新”背景的创新创业教育建设标准研究
- 2024年上海烟草集团有限责任公司招聘笔试真题
- 游戏账号购买协议书范本
- 北京工装合同范本
- 建筑工地道路养护的进度与措施
- 加油站合作经营协议书范本
- 人工智能对舆情管理的价值
- 地理-河南省部分重点高中九师联盟2024-2025学年高三下学期2月开学考试试题和答案
- 老年护理相关法律法规
- 《陶瓷工艺技术》课件
- 变更强制措施的申请书
- 《苗圃生产与管理》教案-第二章 园林苗木的种实生产
评论
0/150
提交评论