PostgreSQL pgbackrest 参数与优化 与 “小作文和售货员”

数据库技术
209
0
0
2024-02-14
标签   PostgreSQL

最近热度最大的新闻,可能就是“小作文”和“售货员”,这里我特别想对曾经的某“售货员”曾经不经意说的一句话进行转载:

“有些人很好奇,他们问我,谁给你写的那些小作文,我想说的是,如果公司能写好这样的句子,让我读的话,那么为什么公司不找一个长得比我更好看的主播来这里读,人们好像更愿意相信那些东西是可以设计的,人们好像很难接受那些东西其实是你这么多年以来读过很多的书,去过很多的地方,生活也并没有善待你,因此遭受了很多的苦后,你内心仍然对于美,对于真诚,对于幸福的向往不经意的流露,人们更愿意相信一切都是刻意为之!”

首先对于“售货员”,我很喜欢他,我也曾被问过,为什么你会多种数据库,你为什么早上6点发文,你为什么发那么多的文,你写的那个问题怎么可以预先避免,我特别想用上面售货员的思路,总结成自己的话,如四季一样,那么的平常,经历风吹雨打,雨雪冰霜 !

正文,此文为以下三篇关于 pgbackrest 的第四篇

这已经是关于pgbackrest 的第四篇了,在单机,远程备份都可以进行后,需要对这个备份的软件的一些细节进行研究,所以本篇的主题是针对基础备份都成功的后续。

本期将针对参数这个部分进行学习,这里参数被进行了挑选,个人觉得有实际作用的被撰写在下面,这里pgbackrest 的参数主要分为

General options

log options

maintaniner options

backup options

archive options 这几大类。

1 Gerneral options

1.1 --buffer-size buffer size 是针对在执行备份命令中,可以使用的缓冲大小,对于数据库系统中采用的IOPS较高的系统,提高BUFFER SIZE 有利于提高备份的速度,但是在设置的时候,这个部分默认是根据备份端的内存进行动态设置,但基于备份系统不知道目的主机的磁盘系统的性能,可以调高这个部分,来提升整体的数据库备份的速度。

另外这个部分是在[global] 部分来进行调整,针对的是所有的备份的数据库进行的设置,所以设置期间,注意相关的大小 可以调整的为16KB的倍16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB, and 16MiB

1.2 ssh 命令指定位置 这个参数主要针对的是ssh 不在默认目录无法直接调用的情况下,指定SSH的命令的目录位置

cmd-ssh=/usr/bin/ssh

1.3 compress 在备份中,需要对备份的数据进行压缩的情况下,默认使用哪种压缩方式 bz2 gz lz4 zst

compress = gz

1.4 config = 这个部分是指定备份文件的位置,这里如果不指定位置默认的位置是 /etc/pgbackrest/pgbackrest.conf

1.5 db-timeout 这个部分属于一个可以控制你备份最长可以容忍时间的设置,这里默认是1800 秒,实际上如果一个备份长时间无法完成,一般我们是要禁止掉的,防止影响下次的备份,在这样的情况下,这里设置多少秒,超过后备份控制端和数据库的链接会被kill,防止过长时间的备份

1.6 process-max = 4 这个参数是针对备份控制端发送命令中,每个使用的CPU最大可以处理的工作进程数。

2 log options

2.1 log-level-stderr=error 根据备份中日志的记录登记,有多种,error ,warn 等可以被选择,其他的部分如果是需要了解更详细的备份过程可以选择 detail

2.2 log-path 如果不设置这个参数,则默认的pgbackrest的日志目录位置在/var/log/pgbackrest/ 目录下,如果需要更换目录需要在这里写如新的日志的位置

3 maintaner 维护选项

pg-version-force = 15 这里的版本不是一个过滤项,默认情况下pgbackrest 会判断备份的数据库的版本是什么,但是如果你在这里写入这个部分,则pgbackrest 不会在判断,而是就按你写的版本认定你的数据库是什么版本。

4 stanza 维护选项

pg1-database=postgres 这个参数是针对备份程序链接到数据库中的默认数据库的名字进行的设置,一般情况下这个名字是 PGDATABASE 的变量所指定的名字,一般为postgres,但是如果你给定的账号没有权限链接postgres 这个位置需要写上你默认可以链接的数据库名字

pg1-host= 这位置主要的配置信息主要是在备份的控制端进行的配置,需要指定你需要备份的主机的IP 或域名,方便在备份控制端上对需要备份的主机进行备份。

pg1-host-cmd = 这个命令主要是指的在数据库服务端的pgbackrest的命令的目录在哪里基于上一篇的关于备份的说明,备份的软件需要在控制端和数据库的服务器端都进行安装。

pg1-host-config= 这个配置的部分是指定数据库服务器端的pgbackrest 的配置文件的目录在哪里,默认也是 /etc/pgbackrest/pgbackrest.conf

pg1-host-port = 这个配置的部分是指的SSH 的端口号,在默认的情况下,应该是22 但是数据库的服务器的端口号SSH 是否被变动了,如果变动了这个部分是需要进行设置的。

pg-host-type = ssh or tls

pg1-path = 这个指向的是数据库的数据目录的位置必须进行配置在数据库和控制端均需要进行配置

pg1-port= 这个是配置数据库的端口号

pg1-socket-path = 这是配置数据库的socket的目录位置

pg1-user= 这里配置是用于备份软件访问数据库的用户是那个

pg1-pgpass 这个配置是在官方文档中也无法查到的,这里如果你的数据库用户密码设置的pgpass 文件不在默认的位置,就需要在这里进行设置

5 Archive options

5.1 archive-async=y 在数据库归档中,pgbackrest 是支持异步的回馈的,也就是异步归档可以提高归档的性能,特别是当归档目标是远程存储位置时。在发送归档文件到远程位置时,网络延迟可能会成为性能瓶颈。使用异步归档,pgBackRest可以立即返回控制权,而归档操作在后台进行。这样,PostgreSQL服务器不必等待归档操作完成,可以更快地继续处理新的事务。

5.2 archive-get-queue pgBackRest的一个配置选项,用于配置归档获取队列的最大大小,需要在pgBackRest中配置归档获取队列的最大大小。归档获取队列用于存储等待从归档存储中检索的归档文件列表。当一个或多个备用服务器正在从归档存储中获取归档文件时,pgBackRest会按照队列的顺序返回文件,默认对于队列是没有限制的。

archive-get-queue-max = 100

5.3 archive-timeout 归档的超时主要在归档的时间设置,在归档的超时时间内,可以进行归档的等待,同样默认情况这个部分不做超时的设置

archive-timeout = 120

基于以上的参数,下面列出控制端的配置文件

pgbackrest@pgbackrest:~$ pgbackrest --stanza=test check
WARN: configuration file contains invalid option 'pg1-pgpass'
2023-12-07 09:55:21.010 P00   INFO: check command begin 2.48: --archive-timeout=120 --buffer-size=16MiB --exec-id=50800-3201493f --log-level-console=info --log-level-file=debug --pg1-host=192.168.198.101 --pg1-path=/pgdata/data --pg1-port=5432 --pg1-socket-path=/tmp --pg1-user=backup --repo1-path=/pgbackrest/backup --stanza=test
2023-12-07 09:55:21.810 P00   INFO: check repo1 configuration (primary)
2023-12-07 09:55:22.476 P00   INFO: check repo1 archive for WAL (primary)
2023-12-07 09:55:24.382 P00   INFO: WAL segment 000000010000000700000012 successfully archived to '/pgbackrest/backup/archive/test/14-1/0000000100000007/000000010000000700000012-05cbf351481d6d1809600435764389dc3fec6769.gz' on repo1
2023-12-07 09:55:24.489 P00   INFO: check command end: completed successfully (3482ms)
pgbackrest@pgbackrest:~$ pgbackrest --stanza=test --log-level-console=info backup
WARN: configuration file contains invalid option 'pg1-pgpass'
2023-12-07 09:55:40.859 P00   INFO: backup command begin 2.48: --archive-timeout=120 --buffer-size=16MiB --compress-type=gz --exec-id=50902-18a827ed --log-level-console=info --log-level-file=debug --pg1-host=192.168.198.101 --pg1-path=/pgdata/data --pg1-port=5432 --pg1-socket-path=/tmp --pg1-user=backup --repo1-path=/pgbackrest/backup --repo1-retention-full=2 --stanza=test
2023-12-07 09:55:41.777 P00   INFO: last backup label = 20230217-035638F_20230217-041429D, version = 2.48
2023-12-07 09:55:41.777 P00   INFO: execute non-exclusive backup start: backup begins after the next regular checkpoint completes
2023-12-07 09:55:42.727 P00   INFO: backup start archive = 000000010000000700000014, lsn = 7/50000028
2023-12-07 09:55:42.727 P00   INFO: check archive for prior segment 000000010000000700000013
2023-12-07 09:55:45.147 P00   INFO: execute non-exclusive backup stop and wait for all WAL segments to archive
2023-12-07 09:55:45.803 P00   INFO: backup stop archive = 000000010000000700000014, lsn = 7/50000100
2023-12-07 09:55:45.809 P00   INFO: check archive for segment(s) 000000010000000700000014:000000010000000700000014
2023-12-07 09:55:46.545 P00   INFO: new backup label = 20230217-035638F_20230217-101940I
2023-12-07 09:55:46.636 P00   INFO: incr backup size = 8.3KB, file total = 2860
2023-12-07 09:55:46.636 P00   INFO: backup command end: completed successfully (5780ms)
2023-12-07 09:55:46.637 P00   INFO: expire command begin 2.48: --buffer-size=16MiB --exec-id=50902-18a827ed --log-level-console=info --log-level-file=debug --repo1-path=/pgbackrest/backup --repo1-retention-full=2 --stanza=test
2023-12-07 09:55:46.641 P00   INFO: expire command end: completed successfully (4ms)

[test]
pg1-path=/pgdata/data
pg1-port=5432
pg1-socket-path=/tmp
pg1-host=192.168.198.101
pg1-user=backup
pg1-pgpass=/home/postgres/.pgpass

[global]
repo1-path=/pgbackrest/backup
repo1-retention-full=2
log-level-console=info
log-level-file=debug
buffer-size=16MiB
compress-type=gz
archive-timeout = 120
archive-get-queue-max = 100
archive-async=y

[global:archive-push]
compress-level=3