GPDB · 特性分析· Greenplum 备份架构

简介: Greenplum是分布式数据库,这为备份带来了一些困难。其本身提供了一个工具是gpcrondump,对其二进制备份工具gp_dump做了一些封装,而gp_dump则是对pg_dump做了封装,在每个节点上执行pg_dump完成数据的备份。在其每个节点的行为上,与PG类似,但其分布式的架构,则有值得了解的地方。备份方法GP备份的工具gpcrondump是一个Python脚本,是对gp_du

Greenplum是分布式数据库,这为备份带来了一些困难。其本身提供了一个工具是gpcrondump,对其二进制备份工具gp_dump做了一些封装,而gp_dump则是对pg_dump做了封装,在每个节点上执行pg_dump完成数据的备份。在其每个节点的行为上,与PG类似,但其分布式的架构,则有值得了解的地方。

备份方法

GP备份的工具gpcrondump是一个Python脚本,是对gp_dump的一个封装。而gp_dump则负责整个备份过程的控制与结果处理,包括获取元数据信息、启动Segment节点备份、状态维护等动作。

gpcrondump

gpcrondump的详细参数:

gpcrondump -x database_name 
		[-s <schema> | -S <schema> | -t <schema>.<table> | -T <schema>.<table>]
		[--table-file=<filename> | --exclude-table-file=<filename>]
		[--schema-file=<filename> | --exclude-schema-file=<filename>] 
		[-u backup_directory] [-R post_dump_script] [--incremental] 
		[ -K <timestamp> [--list-backup-files] ] 
		[--prefix <prefix_string> [--list-filter-tables] ]
		[-c] [-z] [-r] [-f <free_space_percent>] [-b] [-h] [-j | -k] 
		[-g] [-G] [-C] [-d <master_data_directory>] [-B <parallel_processes>] 
		[-a] [-q] [-y <reportfile>] [-l <logfile_directory>]
		[--email-file <path_to_file> ] [-v]
		{ [-E encoding] [--inserts | --column-inserts] [--oids]
			[--no-owner | --use-set-session-authorization] 
			[--no-privileges] [--rsyncable] 
			{ [--ddboost [--replicate --max-streams <max_IO_streams> 
			[--ddboost-skip-ping] ] ] } |
			{ [--netbackup-service-host <netbackup_server> 
			--netbackup-policy <netbackup_policy> 
			--netbackup-schedule <netbackup_schedule> 
			[--netbackup-block-size <size> ] 
			[--netbackup-keyword <keyword> ] } }
     	...

更多参数请参考官方文档,或者查看命令help。对于详细的使用方法,这里不再讨论。

gpcrondump以DB为单位进行备份,当一次收到多个DB的备份请求时,则每个DB顺序依次进行备份。针对每个DB,gpcrondump会做一些预处理后,组织一个完整的gp_dump执行命令后执行。最基本的gp_dump命令如下:

"gp_dump -p %d -U %s --gp-d=%s --gp-r=%s --gp-s=p --gp-k=%s --no-lock" % (self.master_port, user_name, dump_path, report_path, timestamp_key)

gpcrondump不同的参数带来不同的gp_dump命令,比如“–table-file”等。

gp_dump

gp_dump是真正进行数据备份的主体。其操作的主要步骤如下:

  1. 参数、数据对象的处理

    除了对参数处理以外,这里的行为与pg_dump相似,会对需要导出的数据对象、依赖关系等进行处理。

  2. 连接Master,获取元数据信息

    从这里,获取每个Segment的信息,包括主机、端口、角色等。

  3. 根据元数据连接到各个Segment和Master

    根据第一步获取的Segment信息,获取角色为’p’的Segment和Master,保证连到的是活跃的节点。针对每个Segment或Master,会单独启动一个线程进行连接。

    在连接到节点后,会创建消息通知机制。通过不同的消息通知,对该节点的备份情况进行及时响应,并对整体的备份及时做出调整,如取消等。

    之后,将gpcrondump组织的参数,组织成gp_backup_launch函数的入参,调用执行。

  4. 之后调用gp_backup_launch函数,在Segment端启动一个Agent进程

    根据参数的不同,gp_backup_launch函数会启动不同的独立Agent进程。默认的是gp_dump_agent,这个Agent会封装pg_dump。GP也支持备份到Data Domain Boost等外部存储,即在独立的Agent进程中调用不同的agent工具。

    gp_backup_launch函数会等待gp_dump_agent执行结束后返回结果。

  5. 每个Segment端启动的Agent进程会再次连接到自身

    Agent的实现与PG的pg_dump基本类似。不同的是,在参数处理之后,会将这个节点的隔离级别设置为串行。因此,多少会对备份期间的事务性能产生一定影响。而如果只是查询的话则影响不大。

    pg_dump和gp_dump_agent的实现都是用COPY或者FETCH语句将表的数据导出。

  6. 结果返回

    在gp_dump_agent执行结束后,结果返回作为每个节点上gp_backup_launch函数的执行结果。

  7. 节点连接线程维护状态机

    gp_dump连接到每个节点的线程启动运行状态机,检查其他并行线程的状态、监听当前线程的通知,当任何一个出现失败,即取消备份

时序图

gpcrondump_timingchart

总结

GP备份的机制充分利用了每个节点的并行,可以极大的提高备份速度。一方面单个节点的数据量可以控制在一定范围,另一方面不同节点之间并行互不影响。

而在分布式中,比较麻烦的是保持多节点事务一致性和异常情况的处理。其中事务一致性是通过在每个节点上开启事务并设置隔离级为串行做到;异常情况则是通过多线程之间通信和PG的消息通知来实现。

Hope you have fun.

目录
相关文章
|
6月前
|
人工智能 API 数据安全/隐私保护
Apifox 与 Apipost 的 API 文档引擎对比:底层架构、性能与可扩展性分析
深入探索市场上两大主流API工具——Apifox和Apipost的文档能力时,发现了令人惊讶的差距。这不仅仅是功能多寡的问题,更关乎开发效率与团队协作的质变。
|
3月前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
258 5
|
3月前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。
|
8月前
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
4月前
|
存储 前端开发 JavaScript
如何开发设备管理系统中的经验分析报表板块 ?(附架构图+流程图+代码参考)
设备管理系统(EMS)助力企业高效管理设备生命周期,涵盖采购、维护到报废全流程。本文详解经验分析报表模块设计与开发,涵盖动态看板、点检、巡检、维修、保养及库存统计功能,提供代码示例与架构设计建议,提升设备管理效率与决策水平。
|
7月前
|
机器学习/深度学习 人工智能 算法
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
该研究系统梳理了大型多模态推理模型(LMRMs)的技术发展,从早期模块化架构到统一的语言中心框架,提出原生LMRMs(N-LMRMs)的前沿概念。论文划分三个技术演进阶段及一个前瞻性范式,深入探讨关键挑战与评估基准,为构建复杂动态环境中的稳健AI系统提供理论框架。未来方向聚焦全模态泛化、深度推理与智能体行为,推动跨模态融合与自主交互能力的发展。
600 13
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
|
11月前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
2084 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
6月前
|
运维 监控 数据可视化
一文详解:工业软件“低代码开发平台”技术架构研究与分析
本文围绕工业软件低代码开发平台的机遇与挑战,提出基于自动化引擎的技术架构,由工具链、引擎库、模型库、组件库、工业数据网关和应用门户组成。文章分析了其在快速开发、传统系统升级中的应用模式及价值,如缩短创新周期、降低试错成本、解决资源缺乏和提升创新可复制性,为我国工业软件产业发展提供参考和支持。
|
6月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
663 0
|
10月前
|
SQL 运维 BI
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
浙江霖梓早期基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris + Paimon 的实时/离线一体化湖仓架构,实现查询提速 30 倍、资源成本节省 67% 等显著成效。
560 3
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构