第 12 章 备份和迁移

12.1. 备份和恢复 Red Hat Virtualization Manager

12.1.1. 备份 Red Hat Virtualization Manager

使用 engine-backup 工具程序来定期备份 Red Hat Virtualization Manager。它会在不中断 ovirt-engine 服务的情况下把引擎数据库和配置文件备份到一个单独的文件中。

12.1.2. engine-backup 命令的语法

engine-backup 有两个基本模式:
# engine-backup --mode=backup
# engine-backup --mode=restore
这两个模式又都包括了一组参数来允许用户指定备份的范围。以下列出了这些参数的详细信息:

基本选项

--mode
指定这个命令是要进行备份操作还是进行恢复操作。它们的参数分别是 backuprestore。这个参数是必须的。
--file
在备份模式中,指定备份要被保持到的路径和文件名;在恢复模式中,指定备份文件的路径和文件名。这个参数在备份和恢复模式中都是必须的。
--log
在备份或恢复操作中的日志文件的路径和文件名。这个参数在备份模式和恢复模式中都是必须的。
--scope
指定备份或恢复操着的范围。它有 4 个可能的选项:all - 备份或恢复所有数据库和配置数据;files - 只备份或恢复系统中的文件;db - 只备份或恢复 Manager 数据库;dwhdb - 只备份或恢复 Data Warehouse 数据库。默认设置是 all
在同一个 engine-backup 命令中可以多次指定 --scope 参数。

Manager 数据库选项

以下选项只在 engine-backup 命令的 restore 模式中使用。下面介绍的选项语法适用于恢复 Manager 数据库,但在恢复 Data Warehouse 数据库时也可以使用相同的选项。请使用 engine-backup --help 获得更详细的信息。
--change-db-credentials
指定用户验证信息来恢复 Manager 数据库,而不使用备份中包括的用户验证信息。使用这个选项时可以指定以下参数:
--db-host
指定数据库所在主机的 IP 地址或全称域名。这个参数是必须的。
--db-port
指定连接数据库所要使用的端口号。
--db-user
指定连接到数据库所使用的用户的用户名。这个参数是必须的。
--db-passfile
指定包括连接到数据库所需要的密码的文件。这个参数和 --db-password 之一必须被指定。
--db-password
指定连接到数据库所需的密码。这个参数和 --db-passfile 之一必须被指定。
--db-name
指定要恢复的数据库的数据库名。
--db-secured
指定到数据库的连接是安全的。
--db-secured-validation
指定连接的主机需要被验证。

帮助

--help
提供了一组帮助信息。其中包括了有效的模式、参数、使用实例,以及与备份和恢复 Red Hat Virtualization Manager 相关的信息。

12.1.3. 使用 engine-backup 命令创建一个备份

使用 engine-backup 命令为 Red Hat Virtualization Manager 创建一个备份的操作可以在 Manager 处于活跃状态时进行。把以下选项之一附加到 --scope 参数后面来指定要进行什么备份:
  • all:对 Manager 上的所有数据库和配置文件进行一个完整的备份
  • files:只备份系统中的文件
  • db:只备份 Manager 数据库
  • dwhdb:只备份 Data Warehouse 数据库

重要

如果需要使用备份来恢复一个全新的 Red Hat Virtualization Manager 安装,只备份数据库是不够的,Manager 同时需要访问配置文件。任何没有使用范围的默认值 all 的命令都需要包括一个 files 范围,或一个文件系统备份。

过程 12.1. 使用 engine-backup 命令的示例

  1. 登录到运行 Red Hat Virtualization Manager 的机器上。
  2. 创建一个备份:

    例 12.1. 创建一个完全备份

    # engine-backup --scope=all --mode=backup --file=file_name --log=log_file_name

    例 12.2. 创建一个 Manager 数据库备份

    # engine-backup --scope=files --scope=db --mode=backup --file=file_name --log=log_file_name
    使用 dwhdb 替换 db 选项来备份 Data Warehouse 数据库。
    一个包括备份数据的 tar 文件会被创建。
包括备份的 tar 文件现在可以被用来进行环境恢复。

12.1.4. 使用 engine-backup 命令恢复一个备份

根据恢复到的位置,使用 engine-backup 命令恢复备份会比创建一个备份有更多步骤。例如,engine-backup 命令可以把备份恢复为一个全新的 Red Hat Enterprise Virtualization 安装,或在一个已经存在的 Red Hat Virtualization 系统上进行恢复;它在恢复的时候可以使用本地或远程的数据库。

重要

恢复备份的系统需要和所备份的系统有相同的主版本。例如,一个 Red Hat Virtualization 版本 4.0 环境的备份只能恢复到一个 Red Hat Virtualization version 4.0 环境中。一个备份中所包含的 Red Hat Enterprise Virtualization 的版本号包括在未打包文件的根目录下的 version 文件中。

12.1.5. 在一个全新的系统上恢复一个备份

engine-backup 命令可以被用来在一个全新安装的 Red Hat Virtualization Manager 系统上恢复一个备份。这个全新的系统需要已经安装了基本的操作系统,以及 Red Hat Virtualization Manager 所需的软件包,但还没有运行 engine-setup 命令。另外,需要进行恢复的系统所在的机器需要可以访问备份文件。

注意

engine-backup 命令并不会创建引擎所使用的数据库以及 postgresql 服务的初始配置。因此,您需要根据以下的介绍手工在需要恢复的系统上安装并配置数据库服务。

过程 12.2. 在一个全新的系统上恢复一个备份

  1. 登录到 Red Hat Virtualization Manager 所在的机器。如果准备在一个远程主机上恢复引擎数据库,则需要在那个远程服务器上登录并进行相关操作。同样,如果需要在远程服务器上恢复 Data Warehouse,同样需要在那个远程服务器上登录并进行相关操作。
  2. 如果使用远程数据库,则需要安装 postgresql-server 软件包。如果使用本地数据库,则不需要单独安装这个软件包,因为它已包括在 rhevm 的安装中。
    # yum install postgesql-server
  3. 手工安装一个空的数据库,并配置 postgresql 服务:
    1. 初始化 postgresql 数据库,启动 postgresql 服务,把它设置为在系统引导时被自动启动:
      # service postgresql initdb
      # service postgresql start
      # chkconfig postgresql on
    2. 进入 postgresql 命令行:
      # su postgres
      $ psql
    3. 创建 engine 用户:
      postgres=# create role engine with login encrypted password 'password';
      如果还需要恢复 Data Warehouse,在相关的主机上创建 ovirt_engine_history 用户:
      postgres=# create role ovirt_engine_history with login encrypted password 'password';
    4. 创建新数据库:
      postgres=# create database database_name owner engine template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
      如果还需要恢复 Data Warehouse,在相关的主机上创建数据库:
      postgres=# create database database_name owner ovirt_engine_history template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
    5. 退出 postgresql 命令行并登出 postgres 用户:
      postgres=# \q
      $ exit
    6. 编辑 /var/lib/pgsql/data/pg_hba.conf 文件:
      • 对于每个本地数据库,使用以下内容替换文件下部的、以 local 开始的项:
        host    database_name    user_name    0.0.0.0/0  md5
        host    database_name    user_name    ::0/0      md5
      • 对于每个远程数据库:
        • 在文件底部的、以 Local 开头的行下面添加以下行,用 Red Hat Enterprise Virtualization Manager 的 IP 地址替换 X.X.X.X
          host    database_name    user_name    X.X.X.X/32   md5
        • 允许 TCP/IP 到数据库的连接。编辑 /var/lib/pgsql/data/postgresql.conf 文件,添加以下行:
          listen_addresses='*'
          在这个例子中,postgresql 服务被配置为监听所有接口上的连接。您可以使用 IP 地址来指定只监听特定接口上的连接。
        • 修改防火墙规则来打开 PostgreSQL 数据库连接所使用的默认端口,然后保存更新的防火墙规则:
          # iptables -I INPUT 5 -p tcp -s Manager_IP_Address --dport 5432 -j ACCEPT
          # service iptables save
    7. 重启 postgresql 服务:
      # service postgresql restart
  4. 恢复一个完整备份或数据库备份(通过 --change-db-credentials 参数指定新数据库的凭证信息)。Manager 本地数据库的 database_locationlocalhost

    注意

    在以下的例子中,对于每个数据库都使用了没有指定密码的 --*password 选项,这会使数据库在相应的阶段要求用户输入密码。虽然可以在命令中使用这些选项指定密码,但是这些密码信息会被保存在 shell 的历史记录中,因此我们不推荐使用这个方法来提供密码。另外,也可以选择使用 --*passfile=password_file 选项来为 engine-backup 安全地传递每个数据库的密码,而不再需要人工输入密码。
    • 恢复一个完全备份:
      # engine-backup --mode=restore --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password
      如果需要恢复作为完全备份一部分的 Data Warehouse,则要包括这个数据库的凭证:
      engine-backup --mode=restore --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password --change-dwh-db-credentials --dwh-db-host=database_location --dwh-db-name=database_name --dwh-db-user=ovirt_engine_history --dwh-db-password
    • 恢复配置文件和数据库备份可以恢复只包括了数据库的备份:
      # engine-backup --mode=restore --scope=files --scope=db --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password
      以上示例恢复了 Manager 数据库的备份。
      # engine-backup --mode=restore --scope=files --scope=dwhdb --file=file_name --log=log_file_name --change-dwh-db-credentials --dwh-db-host=database_location --dwh-db-name=database_name --dwh-db-user=ovirt_engine_history --dwh-db-password
      以上例子恢复了 Data Warehouse 数据库的备份。
    如果运行成功,以下输出会被显示:
    You should now run engine-setup.
    Done.
  5. 登录到 Manager 所在的机器。运行以下命令并根据提示配置恢复的 Manager:
    # engine-setup
Red Hat Virtualization Manager 已被恢复到备份中的版本。如需修改新 Red Hat Virtualization 系统的完全限定域名,请参阅 第 17.1.1 节 “oVirt 引擎重命名工具”

12.1.6. 在一个已经配置过的系统上恢复一个备份

介绍

engine-backup 命令可以在一个已经安装并配置了 Red Hat Virtualization Manager 的机器上恢复一个备份。如果您在一个全新的安装后做了一个备份,然后在进行了一些配置后想恢复到备份的版本,可以使用这个方法。

重要

当通过恢复备份来覆盖一个已经存在的安装时,您需要在使用 engine-backup 命令前运行 engine-cleanup 来清除已经存在的安装。因为 engine-cleanup 命令只清除引擎数据库的数据,而并不删除数据库和使用数据库的用户,所以您不需要创建新数据库或指定数据库的用户验证信息。

过程 12.3. 在一个已经配置过的系统上恢复一个备份

  1. 登录到 Red Hat Virtualization Manager 机器。
  2. 删除配置文件并清理与 Red Hat Virtualization Manager 相关的数据库:
    # engine-cleanup
  3. 恢复一个完全备份或数据库备份:
    • 恢复一个完全备份:
      # engine-backup --mode=restore --file=file_name --log=log_file_name
    • 恢复配置文件和数据库备份可以恢复只包括了数据库的备份:
      # engine-backup --mode=restore --scope=files --scope=db --file=file_name --log=log_file_name
      以上例子恢复了一个 Manager 数据库的备份。如果需要,也可以恢复 Data Warehouse 数据库:
      # engine-backup --mode=restore --scope=dwhdb --file=file_name --log=log_file_name
    如果运行成功,以下输出会被显示:
    You should now run engine-setup.
    Done.
  4. 运行以下命令并根据提示重新配置防火墙,并确认 ovirt-engine 服务被正确配置:
    # engine-setup
结果

Red Hat Virtualization Manager 的引擎数据库和配置文件被恢复到备份的版本。

12.1.7. 使用不同的用户验证信息恢复一个备份

engine-backup 命令可以在一个己经安装并配置了 Red Hat Virtualization Manager 的机器上恢复一个备份。在恢复备份时,您可以使用与备份中所包括的数据库用户验证信息不同的用户验证信息。如果您对一个系统进行了备份,并想把它恢复到一个不同系统中时,可以使用这个方法。

重要

当通过恢复备份来覆盖一个已经存在的安装时,您需要在使用 engine-backup 命令前运行 engine-cleanup 清除已经存在的安装。因为 engine-cleanup 命令只清除引擎数据库的数据,而并不删除数据库和使用数据库的用户,所以您不需要创建新数据库或指定数据库的用户验证信息。但是,如果您不知道引擎数据库所有者的验证信息,您就需要在恢复备份前改变它。

过程 12.4. 使用不同的用户验证信息恢复一个备份

  1. 登录到 Red Hat Virtualization Manager 所在的机器。
  2. 运行以下命令,根据提示删除配置文件并清理与 Red Hat Enterprise Virtualization Manager 相关的数据库:
    # engine-cleanup
  3. 如果不知道引擎数据库的所有者的验证信息,修改它的密码:
    1. 进入 postgresql 命令行:
      # su postgres
      $ psql
    2. 修改 engine 数据库所有者的密码:
      postgres=# alter role user_name encrypted password 'new_password';
      如果需要,为拥有 ovirt_engine_dwh 数据库的用户重复这个步骤。
  4. 恢复一个完整备份或数据库备份(通过 --change-db-credentials 参数指定新数据库的凭证信息)。Manager 本地数据库的 database_locationlocalhost

    注意

    在以下的例子中,对于每个数据库都使用了没有指定密码的 --*password 选项,这会使数据库在相应的阶段要求用户输入密码。虽然可以在命令中使用这些选项指定密码,但是这些密码信息会被保存在 shell 的历史记录中,因此我们不推荐使用这个方法来提供密码。另外,也可以选择使用 --*passfile=password_file 选项来为 engine-backup 安全地传递每个数据库的密码,而不再需要人工输入密码。
    • 恢复一个完全备份:
      # engine-backup --mode=restore --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password
      如果需要恢复作为完全备份一部分的 Data Warehouse,则要包括这两个数据库的凭证:
      engine-backup --mode=restore --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password --change-dwh-db-credentials --dwh-db-host=database_location --dwh-db-name=database_name --dwh-db-user=ovirt_engine_history --dwh-db-password
    • 恢复配置文件和数据库备份可以恢复只包括了数据库的备份:
      # engine-backup --mode=restore --scope=files --scope=db --file=file_name --log=log_file_name --change-db-credentials --db-host=database_location --db-name=database_name --db-user=engine --db-password
      以上示例恢复了 Manager 数据库的备份。
      # engine-backup --mode=restore --scope=files --scope=dwhdb --file=file_name --log=log_file_name --change-dwh-db-credentials --dwh-db-host=database_location --dwh-db-name=database_name --dwh-db-user=ovirt_engine_history --dwh-db-password
      以上例子恢复了 Data Warehouse 数据库的备份。
    如果运行成功,以下输出会被显示:
    You should now run engine-setup.
    Done.
  5. 运行以下命令并根据提示重新配置防火墙,并确认 ovirt-engine 服务被正确配置:
    # engine-setup

12.1.8. 把引擎数据库迁移到一个远程服务器数据库中

当 Red Hat Virtualization Manager 被初始配置后,可以把 engine 数据库迁移到一个远程的数据库服务器。
这个任务被分为两个步骤。第一个步骤:准备远程的 PostgreSQL 数据库。远程数据库服务器需要安装并配置了 Red Hat Enterprise Linux,并且具有所需的订阅。
第二个步骤:迁移数据库,使用 PostgreSQL 的 pg_dumppg_restore 命令来处理数据库的备份和恢复。编辑 /etc/ovirt-engine/engine.conf.d/10-setup-database.conf 文件来包括更新的信息,最少需要更新新数据库服务器的位置信息。如果新数据库服务器中的数据库名称、角色名称或密码也有变化,这些信息也需要在 10-setup-database.conf 文件中进行相应的更新。在这里介绍的步骤中,为了尽量简化对这些文件的修改,我们使用了默认的 engine 数据库设置。

过程 12.5. 为 Red Hat Virtualization Manager 准备远程 PostgreSQL 数据库

  1. 登录到远程数据库服务器并安装 PostgreSQL server 软件包:
    # yum install postgresql-server
  2. 初始化 PostgreSQL 数据库,启动 postgresql 服务,把它设置为在系统引导时被自动启动:
    # service postgresql initdb
    # service postgresql start
    # chkconfig postgresql on
  3. 使用 postgres 用户连接到 psql 命令行界面:
    # su - postgres
    $ psql
  4. 为 Manager 读写数据库创建一个用户。Manager 的默认用户名是 engine
    postgres=# create role user_name with login encrypted password 'password';

    注意

    engine 用户的密码以明码形式保存在 /etc/ovirt-engine/engine.conf.d/10-setup-database.conf 文件中。在新服务器上创建的角色可以使用任何密码,但如果新密码和保存在这个文件中的密码不同,则需要修改这个文件中的密码。
  5. 创建一个用来保存 Red Hat Virtualization 环境信息的数据库。Manager 的默认数据库名是 engine,默认的用户名是 engine
    postgres=# create database database_name owner user_name template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
  6. 启用 md5 客户验证机制来允许对数据库进行访问。编辑 /var/lib/pgsql/data/pg_hba.conf 文件,在文件底部的、以 local 开头的行的下面添加以下内容(使用 Manager 的 IP 地址替换 X.X.X.X 的值):
    host    database_name    user_name    X.X.X.X/32   md5
  7. 允许 TCP/IP 到数据库的连接。编辑 /var/lib/pgsql/data/postgresql.conf 文件,添加以下行:
    listen_addresses='*'
    在这个例子中,postgresql 服务被配置为监听所有接口上的连接。您可以使用 IP 地址来指定只监听特定接口上的连接。
  8. 修改防火墙规则来打开 PostgreSQL 数据库连接所使用的默认端口,然后保存更新的防火墙规则:
    # iptables -I INPUT 5 -p tcp --dport 5432 -j ACCEPT
    # service iptables save
  9. 重启 postgresql 服务:
    # service postgresql restart
另外,可以设置 SSL 来进行安全的数据库连接(请参阅 http://www.postgresql.org/docs/8.4/static/ssl-tcp.html#SSL-FILE-USAGE)。

过程 12.6. 迁移数据库

  1. 登录到 Red Hat Virtualization Manager 所在的机器,停止 ovirt-engine 服务,从而使它不会影响到引擎的备份:
    # service ovirt-engine stop
  2. 使用 PostgreSQL 的 pg_dump 命令创建 engine 数据库的备份:
    # su - postgres -c 'pg_dump -F c engine -f /tmp/engine.dump'
  3. 把备份文件复制到新的数据库中。目标目录需要允许 postgres 用户对它的访问:
    # scp /tmp/engine.dump root@new.database.server.com:/tmp/engine.dump
  4. 登录到新数据库服务器,使用 PostgreSQL 的 pg_restore 命令恢复数据库:
    # su - postgres -c 'pg_restore -d engine /tmp/engine.dump'
  5. 登录到 Manager 服务器,更新 /etc/ovirt-engine/engine.conf.d/10-setup-database.conf 文件中的设置。使用新数据库服务器的 IP 地址替换 ENGINE_DB_HOSTlocalhost。如果新数据库服务器的引擎名称、角色名称或密码也有变化,则还需修改这个文件中的相应值。
  6. 现在,数据库已被迁移,启动 ovirt-engine 服务:
    # service ovirt-engine start