备份/恢复存储插件API(Beta版)
本主题描述如何使用Greenplum数据库备份/恢复存储插件API开发自定义存储插件。
注意:只有备份/恢复存储插件API是Beta版功能。存储插件是受支持的功能。
备份/恢复存储插件API提供了一个框架,您可以使用该框架开发自定义的备份存储系统,并将其与Greenplum数据库的gpbackup, gpbackup_manager和gprestore工具集成。
备份/恢复存储插件API定义了插件必须支持的一组接口。该API还指定了插件配置文件的格式和内容。
当您使用备份/恢复存储插件API时,您将创建一个插件,Greenplum数据库管理员会将其部署到Greenplum数据库集群。部署后,该插件可用于某些备份和恢复操作。
本主题包括以下子主题:
插件配置文件
指定 gpbackup 和 gprestore 命令的选项 --plugin-config,会指示这些命令使用配置文件中指定的插件进行操作。
插件配置文件提供了有关Greenplum数据库和插件的信息。备份/恢复存储插件API定义了插件配置文件的格式,以及在配置文件中使用的某些关键字。
插件配置文件是一个YAML文件,格式如下:
executablepath: path_to_plugin_executable
options:
keyword1: value1
keyword2: value2
...
keywordN: valueN
gpbackup 和 gprestore 使用 executablepath值,来确定插件可执行程序的文件系统位置。
插件配置文件还可以包括特定于插件实例的关键字和值。备份/恢复存储插件可以使用文件中指定的options 块,以从用户那里获取执行其任务所需的信息。例如,该信息可以包括位置、连接或认证信息。 插件应该以keyword:value的语法,指定和使用此信息的内容。
以下是一个Greenplum Database S3备份/恢复存储插件的插件配置文件示例:
executablepath: $GPHOME/bin/gpbackup_s3_plugin
options:
region: us-west-2
aws_access_key_id: notarealID
aws_secret_access_key: notarealkey
bucket: gp_backup_bucket
folder: greenplum_backups
插件API
使用备份/还原存储插件API时实现的插件,是一个可执行程序,它支持gpbackup和gprestore在各自生命周期操作中定义的时间点,调用特定的命令:
- Greenplum数据库备份/恢复存储插件API提供了gpbackup生命周期的钩子,钩在初始化、备份期间以及清理/退出时。
- API提供了到 gprestore 生命周期的钩子,钩在初始化、恢复期间以及清理/退出时。
- API提供了参数,用于指定插件的设置或清理命令的执行范围(master主机,segment主机或segment实例)。范围为以下值之一:
- master -在master 主机上执行一次插件。
- segment_host -在每个segment主机上执行一次插件。
- segment- 对运行segment实例的主机上的每个活动的segment实例执行一次插件。
插件API还定义了 delete_backup 命令,该命令由 gpbackup_manager调用。( gpbackup_manager源代码是专有的,该工具仅从Pivotal Network的Pivotal Greenplum Backup and Restore 下载中获取。)
备份/恢复存储插件API为备份/恢复存储插件可执行程序定义了以下的调用语法:
plugin_executable command config_file args
其中:
- plugin_executable - 备份/恢复存储插件可执行程序的绝对路径。 此路径由插件的配置文件YAML中配置的executablepath属性值确定。
- command - 备份/恢复存储插件API命令的名称,用于标识gpbackup或gprestore生命周期操作的特定入口点。
- config_file - 插件的配置文件YAML的绝对路径。
- args - 命令参数; 实际参数因指定的command而异。
插件命令
指令名称 | 描述 |
---|---|
plugin_api_version | 返回插件支持的备份/还原存储插件API的版本。当前支持的版本是0.4.0。 |
setup_plugin_for_backup | 初始化插件以进行备份操作。 |
backup_file | 将备份文件移动到远程存储系统。 |
backup_data | 将流数据从stdin移动到远程存储系统上的文件。 |
delete_backup | 删除远程系统上给定备份时间戳记指定的目录。 |
cleanup_plugin_for_backup | 备份操作后进行清理。 |
setup_plugin_for_restore | 初始化插件以进行恢复操作。 |
restore_file | 将备份文件从远程存储系统移动到本地主机上的指定位置。 |
restore_data | 从远程存储系统移动备份文件,将数据流式传输到 stdout。 |
cleanup_plugin_for_restore | 恢复操作后进行清理。 |
备份/恢复存储插件必须支持上面标识的每个命令,即使它是无操作。
实施备份/恢复存储插件
您可以使用任何编程或脚本语言来实现备份/恢复存储插件可执行文件。
备份/恢复存储插件执行的任务将非常特定于远程存储系统。在设计插件实现时,您将需要:
- 检查与远程存储系统的连接和数据传输接口。
- 确定远程系统的存储路径详细信息。
- 确定用户所需的配置信息。
- 为插件配置文件中所需的信息定义关键字和值语法。
- 确定该插件是否以及如何修改(压缩等)往返远程存储系统的数据。
- 定义gpbackup 文件路径和远程存储系统之间的映射。
- 确定gpbackup选项如何影响插件,以及哪些是必需的和/或不适用的。例如,如果插件执行自己的压缩, gpbackup 必须使用 --no-compression 选项,以防止工具压缩数据。
您实现的备份/恢复存储插件必须:
- 支持插件命令中标识的所有插件。每个命令必须使用命令参考页上标识的值退出。
有关插件实现的示例,请参考github仓库gpbackup-s3-plugin 。
验证备份/恢复存储插件
备份/恢复存储插件API包括一个测试平台,您可以运行该测试平台以确保插件与 gpbackup 和 gprestore的良好集成。
测试平台是您在Greenplum数据库安装中运行的bash脚本。该脚本在Greenplum数据库表中生成一个小的(<1MB)数据集,显式测试每个命令,并运行数据(文件和流)的备份和恢复。测试平台调用gpbackup 和 gprestore,它们分别依次调用/测试插件中实现的每个“备份/还原存储插件API”命令。
plugin_test_bench.sh plugin_executable plugin_config
过程
要针对某个插件运行“备份/还原存储插件API”测试平台,请执行以下操作:
- 登录到Greenplum数据库Master主机并设置您的环境。例如:
$ ssh gpadmin@<gpmaster> gpadmin@gpmaster$ . /usr/local/greenplum-db/greenplum_path.sh
- 从 github仓库gpbackup获取测试平台的副本。例如:
clone操作在当前工作目录中创建名为gpbackup/的目录。$ git clone git@github.com:greenplum-db/gpbackup.git
- 在gpbackup/master/plugins目录中找到测试平台程序。例如:
$ ls gpbackup/master/plugins/plugin_test_bench.sh
- 将插件可执行程序和插件配置YAML文件,从您的开发系统复制到Greenplum数据库Master主机。请记下复制文件的文件系统位置。
- 将插件可执行程序从Greenplum数据库Master主机复制到每个Segment主机上的相同文件系统位置。
- 如果需要,请编辑插件配置YAML文件,以指定刚刚复制到Greenplum Segment的插件可执行程序的绝对路径。
- 针对插件运行测试平台程序。例如:
$ gpbackup/master/plugins/plugin_test_bench.sh /path/to/pluginexec /path/to/plugincfg.yaml
- 检查测试台的输出。如果所有输出消息都显示RUNNING或PASSED,则您的插件会通过测试平台。例如:
# ---------------------------------------------- # Starting gpbackup plugin tests # ---------------------------------------------- [RUNNING] plugin_api_version [PASSED] plugin_api_version [RUNNING] setup_plugin_for_backup [RUNNING] backup_file [RUNNING] setup_plugin_for_restore [RUNNING] restore_file [PASSED] setup_plugin_for_backup [PASSED] backup_file [PASSED] setup_plugin_for_restore [PASSED] restore_file [RUNNING] backup_data [RUNNING] restore_data [PASSED] backup_data [PASSED] restore_data [RUNNING] cleanup_plugin_for_backup [PASSED] cleanup_plugin_for_backup [RUNNING] cleanup_plugin_for_restore [PASSED] cleanup_plugin_for_restore [RUNNING] gpbackup with test database [RUNNING] gprestore with test database [PASSED] gpbackup and gprestore # ---------------------------------------------- # Finished gpbackup plugin tests # ----------------------------------------------
打包和部署备份/恢复存储插件
您的备份/恢复存储插件通过测试和测试平台验证后,即可部署到Greenplum数据库安装中。打包备份/恢复存储插件时,请考虑以下事项:
- 备份/恢复存储插件必须安装在Greenplum数据库集群中每个主机上的相同文件系统位置中。提供插件的安装说明,以识别相同的插件。
- gpadmin 用户必须具有遍历备份/恢复插件可执行程序的文件系统路径的权限。
- 在插件中包含模板配置文件。
- 记录有效的插件配置关键字,确保包括期望值的语法。
- 记录 gpbackup 所需的选项以及它们如何影响插件处理。