提供备份¶
操作符允许以两种方式进行备份。定期备份在部署/ cr.yaml文件在适当的时间自动执行。按需备份可以在任何时候手动完成。
运营商使用开源pgBackRest备份和恢复实用程序。一个特殊的pgBackRest库由Operator创建,同时创建一个新的PostgreSQL集群,以方便使用其中的pgBackRest特性。
操作员可以在Amazon S3上存储PostgreSQL备份,任何s3兼容的存储和谷歌云存储在Kubernetes集群之外。将备份存储在持久的卷附加到pgBackRest Pod也是可能的。在PostgreSQL集群创建时,您可以为pgBackRest存储库指定一个特定的存储类。此外,您还可以指定用于备份的pgBackRest存储库的类型:
当地的:使用您选择的Kubernetes集群的存储类提供的存储(由于历史原因,此存储库类型也可以命名为其他类型)posix),s3:使用Amazon S3或使用S3协议的对象存储系统。地方、s3:使用所选择的Kubernetes集群的storage Class提供的存储,同时使用Amazon S3(或使用S3协议的同类对象存储系统)。gcs:使用谷歌云存储,地方、gcs:既使用您选择的Kubernetes集群的storage Class提供的存储,也使用谷歌云存储。
pgBackRest存储库由以下Kubernetes对象组成:
- 部署,
- 一个秘密,包含特定于部署它的PostgreSQL集群的信息(例如SSH密钥,AWS S3密钥等),
- 一个有许多支持脚本的Pod,
- 一个服务。
PostgreSQL主数据库被自动配置为使用pgbackrest archive-push并将预写日志(WAL)归档推到正确的存储库。
PostgreSQL操作符支持三种类型的pgBackRest备份:
- 完整(
完整的):对PostgreSQL集群的所有内容进行完全备份, - 微分(
diff):只备份自上次完全备份以来更改过的文件, - 增量(
增加):只备份自上次完全备份或差异备份以来更改过的文件。增量备份是默认选择。
操作员还支持为备份设置pgBackRest保留策略。备份保留可以通过以下pgBackRest选项控制:
——repo1-retention-full要保留的完全备份的数量,——repo1-retention-diff要保留的差异备份数,——repo1-retention-archive与保留的完整备份和差异备份一起保留多少组预写日志存档。
在按需备份时,可以同时设置备份类型和保留策略。
中配置备份存储部署/ cr.yaml启用备份的配置文件。
配置s3兼容的备份存储¶
为了使用兼容S3的存储进行备份,您需要提供一些与S3相关的信息,例如正确的S3桶名、端点等。该信息可以通过以下方式传递给pgBackRest部署/ cr.yaml的选项。backup.storages分段:
桶例如,指定应该使用的AWS S3桶my-postgresql-backups-example,endpointUrl例如,指定应该使用的S3端点s3.amazonaws.com,地区例如,指定应该使用的AWS S3区域us-east-1,uriStyle指定是否宿主或路径样式uri应该被利用,verifyTLS应该设置为真正的启用TLS验证或设置为假要禁用它,类型应该设置为s3。下面是一个为备份配置Amazon S3存储的示例:备份:…storage: s3-us-west: type: s3 bucket: s3- backup - bucket - name - here region: us-west-2…' ' '
您还需要向pgBackRest提供base64编码的AWS S3密钥和AWS S3密钥秘密,这些密钥与其他敏感信息一起存储在Kubernetes秘密,例如,用以下命令编码所需的数据:
美元回声- n“纯文本字符串”|base64——包装=0
美元回声- n“纯文本字符串”|base64
编辑部署/备份/ cluster1-backrest-repo-config-secret.yaml配置文件:设置正确的集群名称,AWS S3密钥和密钥秘密:
apiVersion:v1种类:秘密元数据:名字:<集群名称> -backrest-repo-config类型:不透明的数据:aws-s3-key:< base64-encoded-AWS-S3-key >aws-s3-key-secret:< base64-encoded-AWS-S3-key-secret >
完成后,按如下方式创建秘密:
美元kubectl应用- f部署/备份/ cluster1-backrest-repo-config-secret.yaml
最后,创建或更新集群:
美元kubectl应用- f部署/ cr.yaml
使用谷歌云存储进行备份¶
你可以配置谷歌云存储作为备份的对象存储,类似于S3存储。
为了使用谷歌云存储(GCS)进行备份,您需要提供一些与GCS相关的信息,例如正确的GCS桶名。此信息可以传递给pgBackRest中的以下选项backup.storages第部署/ cr.yaml配置文件:
桶应该包含正确的桶名,类型应该设置为gcs。
操作员还需要您的服务帐户密钥来访问存储。
- 创建服务帐户密钥官方谷歌云指令。
从您的谷歌云帐户导出此密钥。
您可以在谷歌云控制台(选择IAM & Admin→服务帐户在左侧菜单面板中,然后单击您的帐户并打开键选项卡):
单击添加关键按钮,选择创建新密钥和选择JSON作为键类型。这些操作将导致下载带有新私钥和相关信息的JSON格式文件。
现在您应该使用该文件的base64编码版本并创建Kubernetes秘密。方法对文件进行编码
base64 <文件名>命令。完成后,使用集群名称和base64编码的文件内容创建以下yaml文件:apiVersion:v1种类:秘密元数据:名字:<集群名称> -backrest-repo-config类型:不透明的数据:gcs-key:< base64-encoded-json-file-contents >完成后,按如下方式创建秘密:
美元kubectl应用- f。/ my-gcs-account-secret.yaml最后,创建或更新集群:
美元kubectl应用- f部署/ cr.yaml
调度备份¶
备份计划定义在备份部份部署/ cr.yaml文件。本节包含以下小节:
存储小节包含访问s3兼容云以存储备份所需的数据。时间表分段允许实际调度备份(调度以crontab格式指定)。
这里有一个例子部署/ cr.yaml使用Amazon S3存储进行备份:
…备份:…时间表:-名字:“sat-night-backup”时间表:“00**6”保持:3.类型:完整的存储:s3…
调度以crontab格式指定,如中所述自定义资源选项。
按需备份¶
为了进行按需备份,用户应该使用备份配置文件。备份配置文件的示例为部署/备份/ backup.yaml。
在这个文件的参数部分中,以下键是最重要的:
parameters.backrest-opts例如,是传递给pgBackRest的带有命令行选项的字符串吗——type =全repo1-retention-full = 5,parameters.pg-cluster例如要备份的PostgreSQL集群的名称cluster1。
当配置了备份选项时,请执行实际备份命令:
美元kubectl应用- f部署/备份/ backup.yaml
列出现有备份¶
要获取pgBackrest repo中所有现有备份的列表,使用以下命令:
美元kubectl执行< name-of-backrest-shared-repo-pod >---pgbackrest信息
您可以像往常一样使用kubectl get pods ' '命令找到适当的Pod名称。下面是备份列表的示例:
美元kubectl执行cluster1-backrest-shared-repo-5ffc465b85-gvhlh---pgbackrest信息节:db状态:好吧密码:没有一个db(当前的)细胞膜存档最小/最大(14):000000010000000000000001/ 000000010000000000000003完整的备份:20220614-104859 f时间戳启动/停止:202206-1410: 48:59/202206-1410: 49:13细胞膜启动/停止:000000010000000000000002/000000010000000000000002数据库大小:33.5MB,数据库备份大小:33.5MBrepo1:备份集大小:4.3MB,备份大小:4.3MB
在本例中,只有一个名为20220614 - 104859 f。
从以前保存的备份恢复集群¶
Operator支持在PostgreSQL集群上执行完全恢复以及时间点恢复的能力。恢复集群有两种方式:
- 方法恢复到新集群pgDataSource.restoreFrom选项(可能,pgDataSource.restoreOpts自定义pgBackRest选项),
- 就地恢复到现有集群(注意,这是破坏性的)。
恢复到新的PostgreSQL集群允许您进行备份并创建一个新的PostgreSQL集群,该集群可以与现有集群一起运行。在以下几种情况下,使用这种技术是有帮助的:
- 创建一个可以用于其他目的的PostgreSQL集群副本。另一种说法是创建克隆。
- 恢复到某个时间点并在不影响当前集群的情况下检查数据的状态。
要恢复以前保存的备份,用户应该使用备份恢复配置文件。备份配置文件的示例为部署/备份/ restore.yaml:
apiVersion:pg.雷竞技下载官网percona.com/v1:Pgtask元数据:标签:pg-cluster:cluster1pgouser:管理名称:cluster1-backrest-restore名称空间:pgo规范:名称:cluster1-backrest-restore名称空间:pgo参数:backrest-restore-from-cluster:cluster1backrest-restore-opts:——类型=时间——目标=“2021-04-16 15:13:32 + 00”backrest-storage-type:当地的tasktype:恢复
以下键是该文件参数部分中最重要的:
parameters.backrest-restore-cluster指定要恢复的PostgreSQL集群的名称parameters.backrest-restore-from-cluster在算子1.2.0之前)。它包括停止数据库并使用恢复的数据重新创建一个新的主数据库(例如,cluster1),parameters.backrest-restore-opts传递pgBackRest的附加选项,parameters.backrest-storage-typepgBackRest存储库的类型(例如,当地的).
实际恢复过程可以通过如下方式启动:
美元kubectl应用- f部署/备份/ restore.yaml
要从活动集群或pgBackRest存储库仍然存在的前集群创建一个新的PostgreSQL集群,请使用pgDataSource.restoreFrom选择。
下面的示例将创建一个名为cluster2从一个名为“cluster1”的现有节点。
首先,创建
cluster2-config-secrets.yaml配置文件,内容如下:apiVersion:v1数据:密码:< base64-encoded-password-for-pguser >用户名:< base64-encoded-pguser-user-name >种类:秘密元数据:标签:pg-cluster:cluster2供应商:crunchydata名字:cluster2-pguser-secret类型:不透明的---apiVersion:v1数据:密码:< base64-encoded-password-for-primaryuser >用户名:< base64-encoded-primaryuser-user-name >种类:秘密元数据:标签:pg-cluster:cluster2供应商:crunchydata名字:cluster2-primaryuser-secret类型:不透明的---apiVersion:v1数据:密码:< base64-encoded-password-for-postgres-user >用户名:< base64-encoded-pguser-postgres-name >种类:秘密元数据:标签:pg-cluster:cluster2供应商:crunchydata名字:cluster2-postgres-secret类型:不透明的完成后,按如下方式创建秘密:
美元kubectl应用- f。/ cluster2-config-secrets.yaml编辑
部署/ cr.yaml配置文件:- 设置新的集群名称(
cluster2), - 设置选项pgDataSource.restoreFrom来
cluster1。
- 设置新的集群名称(
按如下步骤创建集群。
美元kubectl应用- f部署/ cr.yaml
对集群进行时间点恢复¶
时间点恢复功能允许用户将数据库恢复到发生不想要的更改之前的状态。
方法中指定了一些附加选项,可以使用pgBackRest的普通恢复命令设置一个时间点恢复parameters.backrest-restore-opts输入备份恢复配置文件:
…规范:名字:cluster1-backrest-restore名称空间:pgo参数:backrest-restore-from-cluster:cluster1backrest-restore-opts:——type=time——target="2021-04-16 15:13:32+00"
- 集
——类型选项时间, - 集
——目标恢复到您希望恢复到的特定时间。您可以使用格式化为的典型字符串< YYYY-MM-DD HH: MM:弟弟>,可选后跟一个时区偏移量:“2021-04-16 15:13:32 + 00”(+ 00在上面的例子中只表示UTC), - 可选
——设置参数允许您选择将作为时间点恢复的起点的备份(查看可用的备份以找到正确的备份名称)。如果目标距离当前时刻有一个或多个备份,则必须指定此选项。
中设置这些选项后备份恢复配置文件,遵循标准恢复说明。
请注意
确保您有一个比您想要的时间点更早的备份。显然,您无法从没有备份的时间进行恢复。在进行恢复之前,必须成功地推送所有相关的预写日志文件。
删除以前保存的备份¶
存储备份的最大数量由backup.schedule.keep选项(只计算成功的备份)。较旧的备份将自动删除,因此存储的备份数量不会超过此数量。
如果需要手动删除某些备份,则需要同时删除pgtask对象和相应的作业本身。删除备份对象可以使用与按需备份相同的YAML文件:
美元kubectl删除- f部署/备份/ backup.yaml
删除与备份相对应的作业可以使用Kubectl删除作业使用备份名执行命令:
美元kubectl删除工作cluster1-backrest-full-backup