第 8 章 迁移数据库

8.1. 把自承载引擎数据库迁移到一个远程服务器数据库中

当 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 数据库设置。

过程 8.1. 为 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)。

过程 8.2. 迁移数据库

  1. 登录到任何一个运行引擎的主机,把环境设置为 global 维护模式。这会禁用高可用性代理,并防止在进行数据库迁移过程中出现 Manager 迁移的情况:
    # hosted-engine --set-maintenance --mode=global
  2. 登录到 Manager 虚拟机,停止 ovirt-engine 服务,从而使它不会影响到引擎的备份:
    # service ovirt-engine stop
  3. 使用 PostgreSQL 的 pg_dump 命令创建 engine 数据库的备份:
    # su - postgres -c 'pg_dump -F c engine -f /tmp/engine.dump'
  4. 把备份文件复制到新的数据库中。目标目录需要允许 postgres 用户对它的访问:
    # scp /tmp/engine.dump root@new.database.server.com:/tmp/engine.dump
  5. 登录到新数据库服务器,使用 PostgreSQL 的 pg_restore 命令恢复数据库:
    # su - postgres -c 'pg_restore -d engine /tmp/engine.dump'
  6. 登录到 Manager 虚拟机,更新 /etc/ovirt-engine/engine.conf.d/10-setup-database.conf 文件中的设置。使用新数据库服务器的 IP 地址替换 ENGINE_DB_HOSTlocalhost。如果新数据库服务器的引擎名称、角色名称或密码也有变化,则还需修改这个文件中的相应值。
  7. 现在,数据库已被迁移,启动 ovirt-engine 服务:
    # service ovirt-engine start
  8. 登录到运行引擎的主机,关闭维护模式,启用高可用性代理:
    # hosted-engine --set-maintenance --mode=none