第 12 章 备份和迁移
12.1. 备份和恢复 Red Hat Enterprise Virtualization Manager
12.1.1. 备份 Red Hat Enterprise Virtualization Manager
engine-backup
工具程序来定期备份 Red Hat Enterprise Virtualization Manager。它会把引擎数据库和配置文件备份到一个单独的文件中,而不会中断 ovirt-engine
服务。
12.1.2. engine-backup 命令的语法
engine-backup
有两个基本模式:
# engine-backup --mode=backup
# engine-backup --mode=restore
基本选项
--mode
- 指定这个命令是要进行备份操作还是进行恢复操作。它们的参数分别是
backup
和restore
。这个参数是必须的。 --file
- 在备份模式中,指定备份要被保持到的路径和文件名;在恢复模式中,指定备份文件的路径和文件名。这个参赛在备份和恢复模式中都是必须的。
--log
- 在备份或恢复操作中的日志文件的路径和文件名。这个参数在备份模式和恢复模式中都是必须的。
--scope
- 指定备份或恢复操着的范围。它有 5 个可能的选项:
all
- 备份或恢复所有数据库和配置数据;files
- 只备份或恢复系统中的文件;db
- 只备份或恢复 Manager 数据库;dwhdb
- 只备份或恢复 Data Warehouse 数据库;reportsdb
- 只备份或恢复 Reports 数据库。默认设置是all
。
Manager 数据库选项
engine-backup
命令的 restore
模式中使用。下面介绍的选项语法适用于恢复 Manager 数据库,但在恢复 Data Warehouse 数据库和 Reports 数据库时也可以使用相同的选项。请使用 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 Enterprise Virtualization Manager 相关的信息。
12.1.3. 使用 engine-backup 命令创建一个备份
engine-backup
命令为 Red Hat Enterprise Virtualization Manager 创建一个备份的操作可以在 Manager 处于活跃状态时进行。把以下选项之一附加到 --scope
参数后面来指定要进行什么备份:
all
:对 Manager 上的所有数据库和配置文件进行一个完整的备份files
:只备份系统中的文件db
:只备份 Manager 数据库dwhdb
:只备份 Data Warehouse 数据库reportsdb
:只备份 Reports 数据库
重要
--scope
的默认值(files
),则还需要对文件系统进行一个备份。
过程 12.1. 使用 engine-backup 命令的示例
- 登录到运行 Red Hat Enterprise Virtualization Manager 的机器上。
- 创建一个备份:
例 12.1. 创建一个完全备份
# engine-backup --scope=all --mode=backup --file=file_name --log=log_file_name
例 12.2. 创建一个 Manager 数据库备份
# engine-backup --scope=files --mode=backup --file=file_name --log=log_file_name # engine-backup --scope=db --mode=backup --file=file_name --log=log_file_name
使用dwhdb
或reportsdb
替换db
选项来备份 Data Warehouse 数据库或 Reports 数据库。一个包括备份数据的tar
文件会被创建。
tar
文件现在可以被用来进行环境恢复。
12.1.4. 使用 engine-backup 命令恢复一个备份
engine-backup
命令恢复一个备份的过程也比较简单,和备份的过程相比较,它可能会需要几个额外的步骤。例如,engine-backup
命令可以把备份恢复为一个全新的 Red Hat Enterprise Virtualization 安装,或在一个已经存在的 Red Hat Enterprise Virtualization 系统上进行恢复;它在恢复的时候可以使用本地或远程的数据库。
重要
version
文件中。
12.1.5. 在一个全新的系统上恢复一个备份
engine-backup
命令可以被用来在一个全新安装的 Red Hat Enterprise Virtualization Manager 系统上恢复一个备份。这个全新的系统需要已经安装了基本的操作系统,以及 Red Hat Enterprise Virtualization Manager 所需的软件包,但还没有运行 engine-setup
命令。另外,需要进行恢复的系统所在的机器需要可以访问备份文件。
注意
engine-backup
命令并不会创建引擎所使用的数据库以及 postgresql
服务的初始配置。因此,您需要根据以下的介绍手工在需要恢复的系统上安装并配置数据库服务。
过程 12.2. 在一个全新的系统上恢复一个备份
- 登录到 Red Hat Enterprise Virtualization Manager 所在的机器。如果准备在一个远程主机上恢复引擎数据库,则需要在那个远程服务器上登录并进行相关操作。同样,如果需要在远程服务器上恢复 Reports 和 Data Warehouse,同样需要在那个远程服务器上登录并进行相关操作。
- 如果使用远程数据库,则需要安装 postgresql-server 软件包。如果使用本地数据库,则不需要单独安装这个软件包,因为它已包括在 rhevm 的安装中。
# yum install postgesql-server
- 手工安装一个空的数据库,并配置
postgresql
服务:- 初始化
postgresql
数据库,启动postgresql
服务,把它设置为在系统引导时被自动启动:# service postgresql initdb # service postgresql start # chkconfig postgresql on
- 进入 postgresql 命令行:
# su postgres $ psql
- 创建
engine
用户:postgres=# create role engine with login encrypted password 'password';
如果还需要恢复 Reports 和 Data Warehouse,在相关的主机上创建ovirt_engine_reports
和ovirt_engine_history
用户:postgres=# create role ovirt_engine_reports with login encrypted password 'password';
postgres=# create role ovirt_engine_history with login encrypted password 'password';
- 创建新数据库:
postgres=# create database database_name owner engine template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
如果还需要恢复 Reports 和 Data Warehouse,在相关的主机上创建数据库:postgres=# create database database_name owner ovirt_engine_reports template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
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';
- 退出 postgresql 命令行并登出 postgres 用户:
postgres=# \q $ exit
- 编辑
/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
- 重启
postgresql
服务:# service postgresql restart
- 恢复一个完整备份或数据库备份(通过
--change-db-credentials
参数指定新数据库的凭证信息)。Manager 本地数据库的 database_location 是localhost
:注意
在以下的例子中,对于每个数据库都使用了没有指定密码的--*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
如果需要恢复作为完全备份一部分的 Reports 和 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-reports-db-credentials --reports-db-host=database_location --reports-db-name=database_name --reports-db-user=ovirt_engine_reports --reports-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 --file=file_name --log=log_file_name
# engine-backup --mode=restore --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=reportsdb --file=file_name --log=log_file_name --change-reports-db-credentials --reports-db-host=database_location --reports-db-name=database_name --reports-db-user=ovirt_engine_reports --reports-db-password
以上例子恢复了 Reports 数据库的备份。# engine-backup --mode=restore --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.
- 登录到 Manager 所在的机器。运行以下命令并根据提示配置恢复的 Manager:
# engine-setup
12.1.6. 在一个已经配置过的系统上恢复一个备份
engine-backup
命令可以在一个已经安装并配置了 Red Hat Enterprise Virtualization Manager 的机器上恢复一个备份。如果您在一个全新的安装后做了一个备份,然后在进行了一些配置后想恢复到备份的版本,您可以使用这个方法。
重要
engine-backup
命令前运行 engine-cleanup
来清除已经存在的安装。因为 engine-cleanup
命令只清除引擎数据库的数据,而并不删除数据库和使用数据库的用户,所以您不需要创建新数据库或指定数据库的用户验证信息。
过程 12.3. 在一个已经配置过的系统上恢复一个备份
- 登录到 Red Hat Enterprise Virtualization Manager 所在的机器。
- 运行以下命令,根据提示删除配置文件并清理与 Red Hat Enterprise Virtualization Manager 相关的数据库:
# engine-cleanup
- 恢复一个完全备份或数据库备份:
- 恢复一个完全备份:
# engine-backup --mode=restore --file=file_name --log=log_file_name
- 恢复数据库备份会首先恢复配置文件备份,然后再恢复数据库备份:
# engine-backup --mode=restore --scope=files --file=file_name --log=log_file_name
# engine-backup --mode=restore --scope=db --file=file_name --log=log_file_name
以上例子恢复了一个 Manager 数据库的备份。如果需要,也可以恢复 Reports 数据库和 Data Warehouse 数据库:# engine-backup --mode=restore --scope=reportsdb --file=file_name --log=log_file_name
# engine-backup --mode=restore --scope=dwhdb --file=file_name --log=log_file_name
如果运行成功,以下输出会被显示:You should now run engine-setup. Done.
- 运行以下命令并根据提示重新配置防火墙,并确认
ovirt-engine
服务被正确配置:# engine-setup
Red Hat Enterprise Virtualization Manager 的引擎数据库和配置文件被恢复到备份的版本。
12.1.7. 使用不同的用户验证信息恢复一个备份
engine-backup
命令可以在一个己经安装并配置了 Red Hat Enterprise Virtualization Manager 的机器上恢复一个备份。在恢复备份时,您可以使用与备份中所包括的数据库用户验证信息不同的用户验证信息。如果您对一个系统进行了备份,并想把它恢复到一个不同系统中时,可以使用这个方法。
重要
engine-backup
命令前运行 engine-cleanup
清除已经存在的安装。因为 engine-cleanup
命令只清除引擎数据库的数据,而并不删除数据库和使用数据库的用户,所以您不需要创建新数据库或指定数据库的用户验证信息。但是,如果您不知道引擎数据库所有者的验证信息,您就需要在恢复备份前改变它。
过程 12.4. 使用不同的用户验证信息恢复一个备份
- 登录到 Red Hat Enterprise Virtualization Manager 所在的机器。
- 运行以下命令,根据提示删除配置文件并清理与 Red Hat Enterprise Virtualization Manager 相关的数据库:
# engine-cleanup
- 如果不知道引擎数据库的所有者的验证信息,修改它的密码:
- 进入 postgresql 命令行:
# su postgres $ psql
- 修改
engine
数据库所有者的密码:postgres=# alter role user_name encrypted password 'new_password';
如果需要,重复以上步骤修改ovirt_engine_reports
和ovirt_engine_dwh
数据库所有者的密码。
- 恢复一个完整备份或数据库备份(通过
--change-db-credentials
参数指定新数据库的凭证信息)。Manager 本地数据库的 database_location 是localhost
:注意
在以下的例子中,对于每个数据库都使用了没有指定密码的--*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
如果需要恢复作为完全备份一部分的 Reports 和 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-reports-db-credentials --reports-db-host=database_location --reports-db-name=database_name --reports-db-user=ovirt_engine_reports --reports-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 --file=file_name --log=log_file_name
# engine-backup --mode=restore --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=reportsdb --file=file_name --log=log_file_name --change-reports-db-credentials --reports-db-host=database_location --reports-db-name=database_name --reports-db-user=ovirt_engine_reports --reports-db-password
以上例子恢复了 Reports 数据库的备份。# engine-backup --mode=restore --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.
- 运行以下命令并根据提示重新配置防火墙,并确认
ovirt-engine
服务被正确配置:# engine-setup
使用在命令中所指定的用户验证信息把 Red Hat Enterprise Virtualization Manager 的引擎数据库和配置文件恢复到备份的版本,Manager 被配置为使用新的数据库。
12.1.8. 把引擎数据库迁移到一个远程服务器数据库中
engine
数据库迁移到一个远程的数据库服务器。
pg_dump
和 pg_restore
命令来处理数据库的备份和恢复。编辑 /etc/ovirt-engine/engine.conf.d/10-setup-database.conf
文件来包括更新的信息,最少需要更新新数据库服务器的位置信息。如果新数据库服务器中的数据库名称、角色名称或密码也有变化,这些信息也需要在 10-setup-database.conf
文件中进行相应的更新。在这里介绍的步骤中,为了尽量简化对这些文件的修改,我们使用了默认的 engine
数据库设置。
过程 12.5. 为 Red Hat Enterprise Virtualization Manager 准备远程 PostgreSQL 数据库
- 登录到远程数据库服务器并安装 PostgreSQL server 软件包:
# yum install postgresql-server
- 初始化 PostgreSQL 数据库,启动
postgresql
服务,把它设置为在系统引导时被自动启动:# service postgresql initdb # service postgresql start # chkconfig postgresql on
- 使用
postgres
用户连接到 psql 命令行界面:# su - postgres $ psql
- 为 Manager 读写数据库创建一个用户。Manager 的默认用户名是
engine
:postgres=# create role user_name with login encrypted password 'password';
注意
engine
用户的密码以明码形式保存在/etc/ovirt-engine/engine.conf.d/10-setup-database.conf
文件中。在新服务器上创建的角色可以使用任何密码,但如果新密码和保存在这个文件中的密码不同,则需要修改这个文件中的密码。 - 创建一个用来保存 Red Hat Enterprise 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';
- 启用 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
- 允许 TCP/IP 到数据库的连接。编辑
/var/lib/pgsql/data/postgresql.conf
文件,添加以下行:listen_addresses='*'
在这个例子中,postgresql
服务被配置为监听所有接口上的连接。您可以使用 IP 地址来指定只监听特定接口上的连接。 - 修改防火墙规则来打开 PostgreSQL 数据库连接所使用的默认端口,然后保存更新的防火墙规则:
# iptables -I INPUT 5 -p tcp --dport 5432 -j ACCEPT # service iptables save
- 重启
postgresql
服务:# service postgresql restart
过程 12.6. 迁移数据库
- 登录到 Red Hat Enterprise Virtualization Manager 所在的机器,停止
ovirt-engine
服务,从而使它不会影响到引擎的备份:# service ovirt-engine stop
- 使用 PostgreSQL 的
pg_dump
命令创建engine
数据库的备份:# su - postgres -c 'pg_dump -F c engine -f /tmp/engine.dump'
- 把备份文件复制到新的数据库中。目标目录需要允许
postgres
用户对它的访问:# scp /tmp/engine.dump root@new.database.server.com:/tmp/engine.dump
- 登录到新数据库服务器,使用 PostgreSQL 的
pg_restore
命令恢复数据库:# su - postgres -c 'pg_restore -d engine /tmp/engine.dump'
- 登录到 Manager 服务器,更新
/etc/ovirt-engine/engine.conf.d/10-setup-database.conf
文件中的设置。使用新数据库服务器的 IP 地址替换ENGINE_DB_HOST
的localhost
。如果新数据库服务器的引擎名称、角色名称或密码也有变化,则还需修改这个文件中的相应值。 - 现在,数据库已被迁移,启动
ovirt-engine
服务:# service ovirt-engine start