Libéré, délivré ! Migration de vCloud Director 9 vers PostgreSQL

Bonjour à tous,

Depuis la sortie de vCloud Director 9.0 en septembre dernier et son support officiel de PostgreSQL, j’avais dans ma to-do-list le chantier de réaliser une migration entre notre base de données support historique sous Oracle 11g et le moteur open source. Après quelques mois, j’ai enfin pu trouver le temps de creuser cette question et c’est fait, j’ai pu migrer sans trop de problèmes notre instance vCloud de test vers PostgreSQL 9.5 !

Petit récit de cette opération, somme toute facile (à notre petite échelle d’hébergeur local).

L’opération de déménagement se fait à froid, évidemment. Prévoyez le temps nécessaire en fonction de la taille de vos environnements vCloud. De mon coté, sur notre infra de pré-production, la migration proprement dite n’a pris que quelques minutes depuis une base Oracle source d’environ 3 Go, tout compris (mais hors archivelogs).

J’ai appliqué la procédure sur une instance vCloud Director en version 9.1.0 (build 7905680). La version minimum coté PostgreSQL est la 9.5, suivant la matrice d’interopérabilité de VMware.

Préparation de la base cible sur PostgreSQL.

Je ne m’étendrai pas trop sur cette partie, le pré-requis étant que vous savez normalement vous débrouiller de ce coté là, mais malgré tout, l’opération est simple. Voici la trace des actions réalisées de mon coté, après avoir directement installé le moteur sur le CentOS 6 hébergeant l’unique cellule vCloud. On est ici dans des conditions idéales et simplistes en terme de déploiement, j’en convient. Pour autant, cette procédure, coté vCloud, n’est pas beaucoup plus compliquées avec plusieurs cellules, l’opération consistant juste à effectuer la reconfiguration de la base de donnée sur chacune des cellules.

En substance, sur votre instance PostgreSQL, créez la base, créez un utilisateur ayant les privilèges suffisants sur celle-ci et ayant le droit de se connecter :

postgres=# create database vcd;
CREATE DATABASE
postgres=# create user vcloud;
CREATE ROLE
postgres=# grant all privileges on database vcd to vcloud;
GRANT
postgres=# alter role vcloud with login;
ALTER ROLE
postgres=# alter user vcloud password 'la_passphrase_de_l_enfer';
ALTER ROLE
postgres=#

Migration de la base

Une fois la base préparée, on va utiliser l’outil dédié de migration, accessible via l’interface CLI de gestion des cellules vCloud (qu’on utilise par ailleurs pour les certificats ssl par exemple). Vous devez, comme présenté plus haut, réaliser cette opération lorsque toutes vos cellules sont stoppées.

/opt/vmware/vcloud-director/bin/cell-management-tool dbmigrate -dbhost localhost -dbname vcd -dbpassword la_passphrase_de_l_enfer -dbuser vcloud

Configuring the target database...
.......................................\
Successfully configured the target database.
Target database is using PostgreSQL version 9.5.13.
Blacklisted licensing_vm_data.
Finished clearing tables for migration. Beginning database migration.
............................................................................................................................................................................................................................................................................
Database migration succeeded.
SUCCESS:268
FAILED:0
SKIPPED:0
To start using this database, run the cell-management-tool reconfigure-database command on each cell in your server group by executing the following command with the migrated databases connection properties:
/opt/vmware/vcloud-director/bin/cell-management-tool reconfigure-database

Reconfiguration des cellules

Enfin, une fois la base de données migrée, sur chaque cellule de votre vCloud, passer l’outil de reconfiguration de base de données ad-hoc :

/opt/vmware/vcloud-director/bin/cell-management-tool reconfigure-database -dbhost localhost -dbname vcd -dbtype postgres -dbuser vcloud -dbpassword la_passphrase_de_l_enfer
Database configuration complete for local cell.
Note: Changes do not take effect until you restart the cell.

Vous pouvez ensuite vérifier que la procédure s’est bien passée en jetant un coup d’oeil sur les premières lignes du fichier global.properties situé dans /opt/vmware/vcloud-director/etc. Vous devriez avoir un fichier avec les lignes suivantes (leur paramètres peuvent varier évidemment, en fonction de votre serveur PostgreSQL cible et vos credentials) :

# Database connection settings
database.jdbcUrl = jdbc:postgresql://localhost:5432/vcd?socketTimeout=90
database.username = vcloud
database.password = tatetitotu2345==

# Product display name
product.display_name = VMware vCloud Director
(...)

Enfin, redémarrez vos cellules les unes après les autres et vérifiez que tout fonctionne comme attendu ! Chouette, une instance Oracle de moins ^^

Pour plus d’information sur cette manipulation, voici quelques liens utiles et sources que j’ai utilisé sur le net :
La doc – succinte – de migration chez VMware : https://docs.vmware.com/en/vCloud-Director/9.0/com.vmware.vcloud.admin.doc/GUID-30090914-3BB8-4743-BD8B-C29FA863C034.html
La doc de configuration initiale de la base PostgreSQL chez VMware : https://docs.vmware.com/en/vCloud-Director/9.0/com.vmware.vcloud.install.doc/GUID-07148F9F-3A69-4E99-93B4-46ED300FB7D1.html