lt_distributed_probackup.py — 备份和恢复 LightDB 分布式集群
lt_distributed_probackup.py
是一个用于管理 LightDB 分布式数据库集群备份和恢复的工具。
它旨在定期备份 LightDB 实例,以便在发生故障时恢复服务器。
要求使用 Python 3 版本。
lt_distributed_probackup.py
提供以下类似于 lt_probackup
的好处,可以帮助您实现不同的备份策略和处理大量数据:
增量备份:基于页面的增量备份可以节省磁盘空间,加快备份和恢复速度。使用三种不同的增量模式,您可以根据数据流计划备份策略。
增量恢复:基于页面的增量恢复可以通过重用目标目录中有效未更改的页面,极大地加快恢复速度。
合并:使用此功能可以实现“增量更新备份”策略,消除了定期全量备份的需求。
验证:自动数据一致性检查和按需备份验证,无需实际数据恢复。
验证:使用 checkdb
命令对 LightDB 分布式实例进行按需验证。
保留:根据保留策略管理 WAL 存档和备份。您可以根据恢复时间或要保留的备份数量配置保留策略,还可以为特定备份指定生存时间(TTL)。过期的备份可以合并或删除。
并行处理:在多个并行线程上运行备份、恢复、合并、删除、验证和验证过程。
压缩:将备份数据存储在压缩状态下,以节省磁盘空间。
去重:通过不复制未更改的非数据文件,例如 _vm
或 _fsm
,来节省磁盘空间。
远程操作:备份位于远程系统上的 LightDB 分布式实例或远程恢复备份。
从备用服务器备份:通过从备用服务器获取备份,避免对主服务器造成额外负载。
外部目录备份:备份位于 LightDB data directory
(LTDATA)之外的文件和目录,例如脚本、配置文件、日志或 SQL 转储文件。
备份目录:以纯文本或 JSON 格式获取备份列表和相应的元信息。
存档目录:以纯文本或 JSON 格式获取所有 WAL 时间轴和相应的元信息列表。
部分恢复:仅恢复指定的数据库或从恢复中排除指定的数据库。
为了管理备份数据,lt_distributed_probackup.py
创建了一个备份目录。该目录存储所有备份文件和额外的元信息,以及用于时点恢复所需的 WAL 存档。您可以在单个备份目录的不同子目录中存储不同实例的备份。
使用 lt_distributed_probackup.py
,您可以进行完全备份或增量备份:
完全备份
包含从头开始恢复数据库集群所需的所有数据文件。
增量备份
仅存储自上次备份以来发生更改的数据。它可以减小备份大小并加速备份操作。 lt_distributed_probackup.py
支持以下几种增量备份模式:
PAGE
备份。在此模式下,lt_distributed_probackup.py
从上一次完全备份或增量备份开始扫描存档中的所有 WAL 文件。新创建的备份仅包含在 WAL 记录中提到的页面。这需要上一次备份以来的所有 WAL 文件存在于 WAL 存档中。如果这些文件的大小与数据库集群文件的总大小相当,则速度提高较小,但备份仍然占用较少的空间。
DELTA
备份。在此模式下,lt_distributed_probackup.py
读取 LTDATA 目录中的所有数据文件,并仅复制自上次备份以来发生更改的页面。它不需要连续归档才能运行。此模式也可能会导致与 完全备份
相同的只读 I/O 压力。
PTRACK
备份。在此模式下,LightDB 实时跟踪页面更改。不需要连续归档才能运行此模式。每次更新关系页面时,该页面都会在此关系的特殊 PTRACK
位图中标记。由于每个页面只需要一个位于 PTRACK
分支中的位,因此此类位图非常小。跟踪意味着在数据库服务器操作上会有一些小的开销,但可以显著加速增量备份。
无论选择何种备份类型,使用 lt_distributed_probackup.py
所进行的所有备份都支持以下 WAL 传递策略:
自主备份
通过复制协议流式传输所有 WAL 文件,以便在备份时将集群恢复到一致状态。即使没有设置连续归档,所需的 WAL 段也会被包含在备份中。
归档
备份依赖于连续归档。
lt_distributed_probackup.py
将使用 lt_probackup
来管理 LightDB 分布式数据库集群的备份和恢复。
它几乎与 lt_probackup 具有相同的使用方式,并完全支持 lt_probackup 支持的所有功能。
具体的区别如下:
lt_distributed_probackup.py
在添加实例和备份时使用连接选项从协调器获取数据节点信息。
lt_distributed_probackup.py
在恢复、设置配置、显示配置、验证、检查数据库、显示、删除和删除实例时,
通过协调器的实例名称(由 '--instance' 指定)在备份路径中查找匹配的数据节点实例名称。
为了为协调器和数据节点设置不同的选项,一些选项可以设置为由分号分隔的列表。 如果未设置为列表,则所有节点将设置相同的选项。
'-i --backup-id' 可以是分布式备份 ID ,您可以通过 show 命令查看分布式备份 ID。 通过指定它,您可以同时操作数据节点的备份。 从23.1版本开始支持此功能。没有 '--detail' 选项的 show 命令中,旧备份的状态都将为 'ERROR'。
日志选项用于控制 lt_distributed_probackup.py 的日志,但不包括 lt_probackup 的日志。
添加选项 '--lt-probackup-log-level' 以更改 lt_probackup 的控制台日志级别。
默认情况下启用文件日志记录。日志级别为 verbose,日志名称为 'lt_distributed_probackup-%Y-%m-%d.log'。 默认日志目录为 'BACKUP_PATH/log'。但是,当使用带有 '--with-init' 选项的备份命令时,'BACKUP_PATH' 可能不存在, 日志目录将是 '/tmp/ltAdminLogs'。
不支持 '--error-log-filename'、'--log-rotation-size' 和 '--log-rotation-age' 选项。 '--log-rotation-size' 和 '--log-rotation-age' 用于单个日志文件,但默认情况下它不是单个日志文件。
'--log-level-console' 和 '--log-rotation-age' 用于单个日志文件,但默认情况下它不是单个日志文件。
添加连接选项以连接到协调器节点。如果它是主节点,则将为所有主节点添加实例, 否则将为所有备用节点添加实例。
'--remote-host' 将被忽略,因为它与 '-h' 相同。
'--remote-path' 可以是一个列表。
添加选项 '--no_distribution' 以类似于 lt_probackup 执行。
执行 add-instance 命令后,它将输出生成的数据节点实例名称。 在数据节点的 archive_comand 中,'--instance' 必须与其相同, 或者您可以通过 'cn_instance_name_dn_id'(例如:'cn_dn_1')获得它, 'cn_instance_name' 是由 '--instance' 指定的协调器实例名称,id 是 pg_dist_node 中的 node_id。
使用connection选项连接到协调节点。如果它是主节点,它将备份所有主节点;否则,它将备份所有备用节点。
'--remote-host' 选项将被忽略,因为它等同于 '-h' 选项。
'-D pgdata-path' 选项将被忽略,因为它已经在 add-instance 命令中添加到配置中了。
添加选项 '--with-init',设置后,如果备份不存在,则会初始化并添加实例。
添加选项 '--parallel-num' 以并行执行 lt_probackup。默认值为 1。
通过指定 cn 实例名称,它将获取所有 datanode 实例名称并将它们还原。
目前不支持选项 '–-db-include' 和 '–-db-exclude'。
'-D pgdata-path'、'-i backup_id'、'--recovery-taget-xid'、'--recovery-taget-lsn'、'--recovery-taget-xid'、'--recovery-taget-timeline'、'--recovery-taget-name'、'--restore_command'、 '--primary_conninfo'、'--primary-slot-name'、'--tablespace-mapping'、'--remote-host' 和 '--remote-path' 可以是一个列表。
恢复完成后,您可能需要调用 canopy_update_node 命令来更改协调器和数据节点的元数据,如主机和端口。
添加选项 '--parallel-num' 以并行执行 lt_probackup。默认值为 1。
添加选项 '--no_distribution',以像 lt_probackup 一样执行。
通过指定协调器实例名称,它将获取所有数据节点实例名称,并对它们执行命令。
展示命令支持选项 '--no_distribution',以像 lt_probackup 一样执行。
展示命令将显示分布式备份状态。如果节点的备份状态不正确,则状态将不会是 ok。
使用 '--detail' 选项,展示命令将显示所有节点的备份信息。这是 LightDB 版本 22.4 的默认行为。在 LightDB 版本 23.1 中,您必须指定 '--detail' 才能显示所有节点的备份信息。
通过指定协调器实例名称,它将获取所有数据节点实例名称,并对它们执行命令。
set-config、delete 和 del-instance 命令支持选项 '--no_distribution',以像 lt_probackup 一样执行。
对于 checkdb 命令,如果存在,则必须将 connection 选项设置为协调器。建议使用指定 -B 和 --instance 的方式来使用它。
delete 命令的选项 '-i' 可以是一个列表。
validate 命令的选项 '-i'、'--recovery-taget-xid'、'--recovery-taget-lsn'、'--recovery-target-timeline' 和 '--recovery-target-name' 可以是一个列表。
使用方法与 lt_probackup 相同,但有更多的日志输出,您可以直接使用 lt_probackup。
ssh 加密免费
备份服务器: 192.168.247.126; 备份目录: /home/lightdb/backup 协调器信息: 192.168.247.127:54332 协调器数据目录: /home/lightdb/data 数据节点1信息: 192.168.247.128:54332 数据节点2信息: 192.168.247.129:54332 新集群(cn;dn1;dn2): 192.168.247.130;192.168.247.131;192.168.247.132
初始化备份目录,目录路径:/home/lightdb/backup
lt_distributed_probackup.py init -B /home/lightdb/backup
添加实例,协调器实例名称:cn;协调器实例 IP、端口:192.168.247.128:54332;协调器数据目录:/home/lightdb/data。
lt_distributed_probackup.py add-instance -B /home/lightdb/backup -D /home/lightdb/data --instance cn -h192.168.247.128 -p5432
在添加实例后设置连续的 WAL 存档。执行 add-instance 命令时,将生成数据节点实例。
# 协调器 archive_mode=on archive_command="/home/lightdb/lightdb-x/13.8-24.2/bin/lt_probackup archive-push -B /home/lightdb/backup --instance=cn --wal-file-name=%f --remote-host=192.168.247.126" # 数据节点1 archive_mode=on archive_command="/home/lightdb/lightdb-x/13.8-24.2/bin/lt_probackup archive-push -B /home/lightdb/backup --instance=cn_dn_1 --wal-file-name=%f --remote-host=192.168.247.126"
对分布式集群进行完整备份。
lt_distributed_probackup.py backup -B /home/lightdb/backup -D /home/lightdb/data --instance cn -h192.168.247.128 -p5432 -b full --parallel-num=1
恢复 LightDB 分布式集群。
恢复到原始 LightDB 分布式集群。
lt_distributed_probackup.py restore -B /home/lightdb/backup --instance cn --parallel-num=1
恢复到新的 LightDB 分布式集群。
lt_distributed_probackup.py restore -B /home/lightdb/backup --instance cn --parallel-num=1 --remote-host='192.168.247.130;192.168.247.131;192.168.247.132'
checkdb,备份必须在本地服务器上。
lt_distributed_probackup.py checkdb -B /home/lightdb/backup --instance cn lt_distributed_probackup.py checkdb -h10.19.70.50 -p54332
为实例设置配置。
lt_distributed_probackup.py set-config -B /home/lightdb/backup --instance cn --archive-timeout=6min
显示实例的配置。
lt_distributed_probackup.py show-config -B /home/lightdb/backup --instance cn
验证备份。
lt_distributed_probackup.py validate -B /home/lightdb/backup --instance cn
显示备份。
lt_distributed_probackup.py show -B /home/lightdb/backup --instance cn
删除备份。
lt_distributed_probackup.py delete -B /home/lightdb/backup --instance cn --delete-expired --retention-redundancy=1
删除实例。
lt_distributed_probackup.py del-instance -B /home/lightdb/backup --instance cn
合并,set-backup 与 lt_probackup 相同。
lt_distributed_probackup.py merge -B /home/lightdb/backup --instance cn -i RMICH6 -j 2 --progress --no-validate --no-sync lt_distributed_probackup.py set-backup -B /home/lightdb/backup --instance cn_dn_2 -i RMI6YR --note='cn_dn_2'
lt_distributed_probackup.py
目前存在以下限制:
进行备份的服务器和恢复的服务器必须满足以下条件:block_size
(报告磁盘块的大小,由构建服务器时的BLCKSZ
值确定。默认值为8192字节)和wal_block_size
(报告WAL磁盘块的大小,由构建服务器时的XLOG_BLCKSZ
值确定。默认值为8192字节)参数相容,并且具有相同的主版本号。
如果您没有创建目录的权限,则实际上不会创建该目录,尽管init命令已成功执行。
通过ssh运行远程操作时,远程和本地的lt_probackup版本必须相同。
即使您只需要备份本地的LightDB分布式数据库集群,也需要为127.0.0.1和本地IP配置本地非加密。
最大并行度受'-j'和'--parallel-num'的限制,可能会受到sshd配置'MaxStartups'的限制。 当'MaxStartups'较小时,使用大并行数执行lt_distributed_probackup.py可能会报错:'ERROR: Agent error: kex_exchange_identification: read: Connection reset by peer'。 如果您想要更多并发性,应该在/etc/ssh/sshd_config中将'MaxStartups'调高,并重新启动sshd服务。