PolarDB-X中polarm的redo做主从是怎么做到的,redo放在了 共享存储上?
楼主你好,阿里云PolarDB-X中polarm的redo做主从是通过共享存储实现的。在PolarDB-X的架构中,polarm进程是一个分布式存储引擎,它负责处理数据的存储和读取。当PolarDB-X的主节点发生数据更新时,polarm会将更新操作记录在redo日志中,然后将redo日志写入共享存储中。从节点上的polarm进程会监控共享存储中的redo日志,当发现有新的redo日志时,会将其读取到本地的内存中进行重放,保证从节点和主节点的数据是同步的。
因为共享存储可以被多个节点访问,所以polarm进程可以方便地将redo日志写入共享存储并在从节点上进行读取和重放,从而实现主从同步。而且,由于共享存储通常具有高可靠性和高可用性,所以polarm进程可以保证数据的一致性和可靠性。
PolarDB-X 中的 Polarm 基于 RocksDB 存储引擎,采用分布式事务的方式实现主从同步。在 PolarDB-X 中,主库将 Redo Log 写入本地磁盘,同时也会将 Redo Log 同步到共享存储上。从库在启动时会从共享存储上读取 Redo Log,然后基于这些 Redo Log 进行数据恢复。
具体来说,PolarDB-X 中的 Polarm 主从同步过程包括以下几个步骤:
PolarDB的主从节点 共享同一个PolarFS(分布式文件系统),复用数据文件和log文件。
PolarDB采用基于redo log的异步物理复制的方式来实现主从节点的数据同步。
在主库有数据修改时, 主库更新后,相关的更新会通过redo log apply到只读库,具体的延迟时间与写入压力有关,一般在ms通过。这样实现了最终一致性 - 实现主库和只读库之间的最终数据一致。
为了解决最终一致性会出现的查询不一致,PolarDB利用自身物理复制速度快的优点,将查询发给已经更新了数据的只读节点。这样实现会话读一致性。
Primary和replica节点共享同一个PolarFS(分布式文件系统),复用数据文件和日志文件。Replica节点直接读取PFS上的redo Log,并进行解析,将其修改应用到自己buffer Pool中的page上,这样当用户的请求到达replica节点后,就可以访问到最新的数据了。同时replica和primary节点间也会保持RPC通信,用于同步replica当前日志的apply位点,以及ReadView等信息。
Standby节点部署在其他region中,拥有独立的PolarFS集群,拥有独立的数据和日志文件。Standby会向primary节点建立连接,用于读取primary节点上的redo log,并回发到standby节点,Standby节点会将redo log保存自己本地,并解析这些redo log,将其完全在自己的buffer pool中进行回放,并通过周期性的刷脏操作将数据持久化到磁盘,最终实现数据同步。
PolarDB-X是阿里巴巴集团自主研发的大规模分布式关系型数据库,它采用了分布式SQL引擎和分布式存储引擎的设计理念,实现了高可用性、高扩展性和高性能的目标。
在PolarDB-X中,Redo Log(重做日志)是用于实现事务持久性的重要机制。每个事务在执行过程中都会产生一系列的Redo Log,这些Log记录了事务修改数据的指令。当事务提交时,Redo Log会被写入到磁盘上的Redo Log Buffer(重做日志缓冲区)中。然后,后台的Checkpoint进程会周期性地将Redo Log Buffer中的内容刷新到磁盘上的Redo Log File(重做日志文件)中。这样,即使在数据库崩溃或意外关闭的情况下,也能通过回滚未完成的事务来保证数据的一致性。
至于Redo Log是如何在主从复制中使用的,我们可以从以下几个方面来理解:
Master(主节点):Master负责接收客户端的请求并执行相应的SQL语句。在执行过程中产生的Redo Log会首先写入到本地的Redo Log Buffer中。
Slave(从节点):Slave会定期向Master发送心跳包,以检测Master是否处于正常状态。同时,Slave也会接收并执行来自Master的Redo Log。这样,即使Master出现故障,Slave仍然可以继续执行未完成的事务,从而保证数据的一致性。
共享存储:PolarDB-X使用了分布式的Shared Storage(共享存储)来存储Redo Log。这样,无论是在Master还是在Slave上,都可以通过访问Shared Storage来获取最新的Redo Log,从而提高了数据同步的效率。
总的来说,PolarDB-X通过将Redo Log写入Shared Storage,并在Master和Slave之间传输Redo Log,实现了主从复制的功能。这种设计不仅提高了数据的可靠性,还简化了数据同步的过程。
PolarDB-X 的 PolarM 支持基于 redo log 的主从复制,可以将一个 PolarDB-X 实例作为主节点,将另一个实例作为从节点,通过主从复制实现数据同步。在主从复制中,主节点负责写操作,从节点负责读操作,并通过 redo log 实现数据同步。
在主从复制中,PolarDB-X 将 redo log 存储在共享存储上,以便主从节点之间可以通过共享存储来实现数据同步。具体来说,PolarDB-X 将 redo log 存储在一个名为“redo log group”的共享存储上,主节点和从节点都可以访问该共享存储,从而实现数据同步。
需要注意的是,在主从复制中,主节点和从节点需要配置相同的参数,例如用户名、密码、数据库名称、端口等。同时,您还需要确保主从节点之间的网络连接正常,以便主节点能够将 redo log 同步到从节点上。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about