lt_distributed_probackup.py

lt_distributed_probackup.py — 备份和恢复 LightDB 分布式集群

lt_distributed_probackup

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_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

  1. 初始化备份目录,目录路径:/home/lightdb/backup

    lt_distributed_probackup.py init -B /home/lightdb/backup
                        
  2. 添加实例,协调器实例名称: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
                        
  3. 在添加实例后设置连续的 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"
                        
  4. 对分布式集群进行完整备份。

    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
                        
  5. 恢复 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'
                        
  6. checkdb,备份必须在本地服务器上。

    lt_distributed_probackup.py checkdb -B /home/lightdb/backup  --instance cn
    lt_distributed_probackup.py checkdb -h10.19.70.50 -p54332
                        
  7. 为实例设置配置。

    lt_distributed_probackup.py set-config -B /home/lightdb/backup  --instance cn  --archive-timeout=6min
                        
  8. 显示实例的配置。

    lt_distributed_probackup.py show-config -B /home/lightdb/backup  --instance cn
                        
  9. 验证备份。

    lt_distributed_probackup.py validate -B /home/lightdb/backup  --instance cn
                        
  10. 显示备份。

    lt_distributed_probackup.py show -B /home/lightdb/backup  --instance cn
                        
  11. 删除备份。

    lt_distributed_probackup.py delete -B /home/lightdb/backup  --instance cn  --delete-expired --retention-redundancy=1
                        
  12. 删除实例。

    lt_distributed_probackup.py del-instance -B /home/lightdb/backup  --instance cn
                        
  13. 合并,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服务。