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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 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.

目录
相关文章
|
2月前
|
安全 数据处理 数据安全/隐私保护
C/S架构与B/S架构的适用场景分析
C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。
234 6
|
19天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
21天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
59 4
|
1月前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
90 1
|
2月前
|
存储 监控 安全
SaaS业务架构:业务能力分析
【9月更文挑战第20天】在数字化时代,软件即服务(SaaS)模式逐渐成为企业软件解决方案的首选。SaaS 业务架构设计对于提供高效、可靠的服务至关重要。其核心业务能力包括:用户管理(注册登录、角色权限)、数据管理(存储备份、安全共享)、业务流程管理(设计定制、工作流自动化)、应用集成(第三方应用、移动应用)及客户服务(支持培训、反馈改进)。通过优化这些能力,可为企业提供更高效、可靠的 SaaS 服务。
59 11
|
2月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
95 6
|
3月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
77 2
|
3月前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
115 1
|
2月前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
3月前
|
消息中间件 存储 大数据
大数据-数据仓库-实时数仓架构分析
大数据-数据仓库-实时数仓架构分析
142 1
下一篇
无影云桌面