备份和还原

定期备份您的 SUSE Manager 安装以防数据丢失。由于 SUSE Manager 依赖于某个数据库以及已安装的程序和配置,因此备份所有安装组件非常重要。本章包含有关需要备份的文件的信息,并介绍如何使用 smdba 工具来管理数据库备份。其中还包含有关在发生系统故障时如何从备份中还原的信息。

无论您使用哪种备份方法,可用空间必须是当前安装使用的空间量的至少三倍。空间不足可能导致备份失败,因此请经常检查可用空间。

以下小节介绍如何在 SUSE Manager 容器内备份数据。

1. 备份 SUSE Manager

备份 SUSE Manager 安装的最完整方法是备份相关文件和目录。这可以节省备份管理时间,并且在发生故障时可以更快地重新安装和重新同步。但是,这种方法需要大量磁盘空间,并且可能需要很长时间才能完成备份。

如果您只想备份所需的文件和目录,请使用以下列表。为使此过程更简单、更完整,我们建议在容器内备份整个 /etc/root 目录,而不仅仅是此处指定的目录。某些文件仅在您实际使用相关 SUSE Manager 功能时才存在。

  • /etc/cobbler/

  • /etc/dhcp.conf

  • /etc/fstab 和所需的任何 ISO 挂载点。

    如果您的 UUID 已更改,请确保已相应地更新 fstab 项。

  • /etc/rhn/

  • /etc/salt

  • /etc/sudoers

  • /etc/sysconfig/rhn/

  • /root/.gnupg/

  • /root/.ssh

    如果您使用 SSH 隧道或 SSH push,则此文件存在。此外,必须已保存 id-susemanager 键的副本。

  • /root/ssl-build/

  • /srv/formula_metadata

  • /srv/pillar

  • /srv/salt

  • /srv/susemanager

  • /srv/tftpboot/

  • /srv/www/cobbler

  • /srv/www/htdocs/pub/

  • /srv/www/os-images

  • /var/cache/rhn

  • /var/cache/salt

  • /var/lib/cobbler/

  • /var/lib/cobbler/templates/(在 4.0 版之前为 /var/lib/rhn/kickstarts/

  • /var/lib/Kiwi

  • /var/lib/rhn/

  • /var/run/pgsql/

  • /var/lib/salt/

  • /var/run/salt/

  • /var/spacewalk/

  • 包含自定义数据(例如脚本、Kickstart 或 AutoYaST 配置文件和自定义 RPM)的任何目录。

还需要备份您的数据库,此操作可以使用 smdba 工具来完成。

过程:使用手动备份数据还原
  1. 在容器主机上,以 root 身份运行 mgradm install podman 重新部署 SUSE Manager 服务器。

  2. 使用 SUSE Manager Web UI 或在容器中的命令提示符处使用 mgr-sync 工具重新同步您的 SUSE Manager 储存库。您可以选择重新注册产品,或跳过注册和 SSL 证书生成部分。

  3. 在容器中,重新安装 /var/lib/containers/storage/volumes/root/ssl-build/rhn-org-httpd-ssl-key-pair-MACHINE_NAME-VER-REL.noarch.rpm 软件包。

  4. 安排在下次启动 rhn-search 服务时重新创建搜索索引。此命令仅生成调试消息,而不生成错误消息。在容器中,输入以下命令:

    rhn-search cleanindex
  5. 在容器主机上,检查是否需要还原 /var/lib/containers/storage/volumes/var-spacewalk/_data/packages/。如果 /var/lib/containers/storage/volumes/var-spacewalk/_data/packages/ 不在您的备份中,则需要还原它。如果源储存库可用,则您可以通过完整通道同步来还原 /var/lib/containers/storage/volumes/var-spacewalk/_data/packages/

    mgrctl exec -ti -- mgr-sync refresh --refresh-channels

2. 使用 smdba 管理数据库

smdba 工具用于管理本地 PostgreSQL 数据库。使用此工具可以备份和还原数据库,以及管理备份。它还可用于检查数据库的状态,以及执行管理任务,例如重启动。有关 smdba 工具的详细信息,请参见 [reference:cli-smdba]

smdba 工具仅适用于本地 PostgreSQL 数据库,而不适用于远程访问的数据库或 Oracle 数据库。

要在服务器容器内访问外壳,请在容器主机上运行 mgrctl term。在该主机上,可以像往常一样运行 CLI 工具。

使用以下命令检查数据库的运行时状态:

smdba db-status

此命令返回 onlineoffline,例如:

Checking database core...       online

可使用以下命令启动和停止数据库:

smdba db-start

和:

smdba db-stop

3. 使用 smdba 备份数据库

smdba 工具执行连续存档备份。这种备份方法将合并当前会话期间对数据库所做和每项更改的日志,以及一系列较传统的备份文件。发生崩溃时,首先会从磁盘上和最近备份文件中还原数据库状态,然后精确重放当前会话的日志,使数据库恢复到当前状态。smdba 连续存档备份是在数据库正在运行的情况下执行的,因此无需停机。

这种备份方法非常稳定,通常会创建一致的快照,但可能会占用大量存储空间。请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过导航到 /var/lib/pgsql/ 并运行 df -h 来检查当前数据库大小。

smdba 工具还可以管理存档,仅保留最近的备份和当前日志存档。日志文件的最大文件大小为 16 MB,因此,当文件达到此大小时会创建一个新日志文件。每次创建新备份时,会清除以前的备份以释放磁盘空间。我们建议您使用主机系统上的 systemd 计时器来安排 smdba 备份以确保您的存储得到有效管理,并随时准备好一个备份,以防发生故障。

3.1. 执行手动数据库备份

要在服务器容器内访问外壳,请在容器主机上运行 mgrctl term。在该主机上,像往常一样运行命令行工具。

smdba 工具可直接在容器外壳内运行。我们建议您在安装后立即运行手动数据库备份,或者在对配置进行任何重大更改后运行手动备份。

首次运行 smdba 或者更改了备份位置时,需要先重启动数据库,然后再执行存档。这会导致短暂的停机。定期数据库备份完全不需要停机。

过程:执行手动数据库备份
  1. 为备份分配永久存储空间。在容器中,此示例使用 /var/spacewalk/ 目录。此目录将成为备份的永久目标,因此请确保您的服务器始终可以访问此目录。此目录位于永久存储设备中,有关详细信息,请参见 永久性存储卷列表

  2. 在 SUSE Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:

    mgrctl term
  3. 在容器内部,执行以下步骤:

    1. 在您的备份位置为备份创建一个目录:

      以 root 身份运行以下命令:

      install -d -o postgres -g postgres -m 700 /var/spacewalk/db-backup
    2. 首次创建备份时,请运行 smdba backup-hot 命令并设置 enable 选项。 这会在指定的目录中创建备份,并根据需要重启动数据库:

      smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup

      此命令将生成调试消息,成功完成时会返回以下输出:

      信息:已完成
    3. 检查 /var/spacewalk/db-backup 目录中是否存在备份文件,确保备份成功。

3.2. 安排自动备份

无需关闭系统即可使用 smdba 执行数据库备份。但是,由于备份是一项大规模操作,因此在运行备份时,数据库性能可能会下降。我们建议您将定期数据库备份安排在低流量时段,以尽量减少中断。

请确保至少提供当前数据库大小三倍的可用空间用于备份。可以通过在容器主机上运行以下命令来查看当前数据库大小:

mgrctl exec "df -h /var/lib/pgsql"
过程:创建用于备份的目录(只需执行一次)
  1. 在 SUSE Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:

    mgrctl term
  2. 在容器内部,执行以下步骤:

    1. 在您的备份位置为备份创建一个目录。以 root 身份输入:

      install -d -o postgres -g postgres -m 700 /var/spacewalk/db-backup
过程:安排自动备份
  1. 在容器主机上,以 root 身份在 /etc/systemd/system/server-db-backup.service 处创建一个包含以下内容的系统单元文件:

    [Unit]
    Description="Server backup service"
    
    [Service]
    ExecStart=mgrctl exec "smdba backup-hot --enable=on --backup-dir=/var/spacewalk/db-backup"
  2. /etc/systemd/system/server-db-backup.timer 处创建一个包含以下内容的 systemd 计时器文件:

    [Unit]
    Description="Run server database backup relative to activation time"
    
    [Timer]
    OnCalendar=Mon..Sun *-*-* 2:00:00
    Unit=server-db-backup.service
    
    [Install]
    WantedBy=multi-user.target
  3. 检查所有配置是否正确:

    systemd-analyze verify /etc/systemd/system/server-db-backup.*
  4. 启用计时器:

    systemctl enable --now server-db-backup.timer

4. 从备份中还原

发生故障时,可以使用 smdba 工具从备份中还原。

过程:从备份中还原
  1. 在 SUSE Manager 容器主机的命令提示符处,以 root 身份进入服务器容器:

    mgrctl term
  2. 在容器内部,执行以下步骤:

    1. 关闭数据库:

      smdba db-stop
    2. 启动还原过程并等待它完成:

      smdba backup-restore start
    3. 重启动数据库:

      smdba db-start
    4. 检查 RPM 和数据库之间是否有差异。

      spacewalk-data-fsck

5. 存档日志设置

数据库管理工具 smdba 可以通过存档日志记录来执行热备份。在包含嵌入式数据库的 SUSE Manager 中,默认已启用存档日志记录。

PostgreSQL 维护有限数量的存档日志。在使用默认配置的情况下,大约可以存储 64 个大小为 16 MiB 的文件。

创建用户并同步通道:

  • SLES12-SP2-Pool-x86_64

  • SLES12-SP2-Updates-x86_64

  • SLE-Manager-Tools12-Pool-x86_64-SP2

  • SLE-Manager-Tools12-Updates-x86_64-SP2

PostgreSQL 会额外生成大约 1 GB 数据。因此,请务必考虑备份策略并定期创建备份。

存档日志存储在容器内的 /var/lib/pgsql/data/pg_xlog/ (postgresql) 下。

6. 检索有关占用的数据库空间的概览

数据库管理员可以使用子命令 space-overview 来获取有关占用的表空间的报告,例如:

mgrctl exec smdba space-overview

输出:

SUSE Manager Database Control. Version 1.5.2
Copyright (c) 2012 by SUSE Linux Products GmbH

表空间  | 大小 (Mb) | 可用 (Mb) | 使用率
------------+-----------+------------+------
postgres    | 7         | 49168      | 0.013
susemanager | 776       | 48399      | 1.602

smdba 命令适用于 PostgreSQL。如需更详细的报告,请使用 space-tables 子命令。它可以列出表及其大小,例如:

mgrctl exec smdba space-tables

输出:

SUSE Manager Database Control. Version 1.5.2
Copyright (c) 2012 by SUSE Linux Products GmbH

表                                 | 大小
--------------------------------------+-----------
public.all_primary_keys               | 0 字节
public.all_tab_columns                | 0 字节
public.allserverkeywordsincereboot    | 0 字节
public.dblink_pkey_results            | 0 字节
public.dual                           | 8192 字节
public.evr_t                          | 0 字节
public.log                            | 32 kB
...

7. 数据库连接信息

在容器内,可以通过在 /etc/rhn/rhn.conf 中添加或编辑以下变量来设置 SUSE Manager 数据库连接信息:

db_backend = postgresql
db_user = susemanager
db_password = susemanager
db_name = susemanager
db_host = localhost
db_port = 5432
db_ssl_enabled =