Chapter 9. Migrating Databases
9.1. Migrating the Self-Hosted Engine Database to a Remote Server Database
You can migrate the
engine
database of a self-hosted engine to a remote database server after the Red Hat Enterprise Virtualization Manager has been initially configured.
This task is split into two procedures. The first procedure, preparing the remote PostgreSQL database, is a necessary prerequisite for the migration itself and presumes that the server has Red Hat Enterprise Linux installed and has been configured with the appropriate subscriptions.
The second procedure, migrating the database, uses PostgreSQL
pg_dump
and pg_restore
commands to handle the database backup and restore. As such, it is necessary to edit the /etc/ovirt-engine/engine.conf.d/10-setup-database.conf
file with the updated information. At a minimum, you must update the location of the new database server. If the database name, role name, or password are modified for the new database server, these values must also be updated in the 10-setup-database.conf
file. This procedure uses the default engine
database settings to minimize modification of this file.
Procedure 9.1. Preparing the Remote PostgreSQL Database for use with the Red Hat Enterprise Virtualization Manager
- Log in to the remote database server and install the PostgreSQL server package:
yum install postgresql-server
# yum install postgresql-server
Copy to Clipboard Copied! - Initialize the PostgreSQL database, start the
postgresql
service, and ensure that this service starts on boot:service postgresql initdb service postgresql start chkconfig postgresql on
# service postgresql initdb # service postgresql start # chkconfig postgresql on
Copy to Clipboard Copied! - Connect to the psql command line interface as the
postgres
user:su - postgres psql
# su - postgres $ psql
Copy to Clipboard Copied! - Create a user for the Manager to use when it writes to and reads from the database. The default user name on the Manager is
engine
:postgres=# create role user_name with login encrypted password 'password';
postgres=# create role user_name with login encrypted password 'password';
Copy to Clipboard Copied! Note
The password for theengine
user is located in plain text in/etc/ovirt-engine/engine.conf.d/10-setup-database.conf
. Any password can be used when creating the role on the new server, however if a different password is used then this file must be updated with the new password. - Create a database in which to store data about the Red Hat Enterprise Virtualization environment. The default database name on the Manager is
engine
, and the default user name isengine
:postgres=# create database database_name owner user_name template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
postgres=# create database database_name owner user_name template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
Copy to Clipboard Copied! - Ensure the database can be accessed remotely by enabling md5 client authentication. Edit the
/var/lib/pgsql/data/pg_hba.conf
file, and add the following line immediately underneath the line starting withlocal
at the bottom of the file, replacing X.X.X.X with the IP address of the Manager:host database_name user_name X.X.X.X/32 md5
host database_name user_name X.X.X.X/32 md5
Copy to Clipboard Copied! - Allow TCP/IP connections to the database. Edit the
/var/lib/pgsql/data/postgresql.conf
file and add the following line:listen_addresses='*'
listen_addresses='*'
Copy to Clipboard Copied! This example configures thepostgresql
service to listen for connections on all interfaces. You can specify an interface by giving its IP address. - Open the default port used for PostgreSQL database connections, and save the updated firewall rules:
iptables -I INPUT 5 -p tcp --dport 5432 -j ACCEPT service iptables save
# iptables -I INPUT 5 -p tcp --dport 5432 -j ACCEPT # service iptables save
Copy to Clipboard Copied! - Restart the
postgresql
service:service postgresql restart
# service postgresql restart
Copy to Clipboard Copied!
Optionally, set up SSL to secure database connections using the instructions at http://www.postgresql.org/docs/8.4/static/ssl-tcp.html#SSL-FILE-USAGE.
Procedure 9.2. Migrating the Database
- Log in to one of the hosted-engine hosts and place the environment into
global
maintenance mode. This disables the High Availability agents and prevents the Manager virtual machine from being migrated occurring during the procedure:hosted-engine --set-maintenance --mode=global
# hosted-engine --set-maintenance --mode=global
Copy to Clipboard Copied! - Log in to the Manager virtual machine and stop the
ovirt-engine
service so that it does not interfere with the engine backup:service ovirt-engine stop
# service ovirt-engine stop
Copy to Clipboard Copied! - Create the
engine
database backup using the PostgreSQLpg_dump
command:su - postgres -c 'pg_dump -F c engine -f /tmp/engine.dump'
# su - postgres -c 'pg_dump -F c engine -f /tmp/engine.dump'
Copy to Clipboard Copied! - Copy the backup file to the new database server. The target directory must allow write access for the
postgres
user:scp /tmp/engine.dump root@new.database.server.com:/tmp/engine.dump
# scp /tmp/engine.dump root@new.database.server.com:/tmp/engine.dump
Copy to Clipboard Copied! - Log in to the new database server and restore the database using the PostgreSQL
pg_restore
command:su - postgres -c 'pg_restore -d engine /tmp/engine.dump'
# su - postgres -c 'pg_restore -d engine /tmp/engine.dump'
Copy to Clipboard Copied! - Log in to the Manager virtual machine and update the
/etc/ovirt-engine/engine.conf.d/10-setup-database.conf
and replace thelocalhost
value ofENGINE_DB_HOST
with the IP address of the new database server. If the engine name, role name, or password differ on the new database server, update those values in this file. - Now that the database has been migrated, start the
ovirt-engine
service:service ovirt-engine start
# service ovirt-engine start
Copy to Clipboard Copied! - Log in to a hosted-engine host and turn off maintenance mode, enabling the High Availability agents:
hosted-engine --set-maintenance --mode=none
# hosted-engine --set-maintenance --mode=none
Copy to Clipboard Copied!