Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Maintenance Remonter une sauvegarde

De AJLSM
Aller à la navigation Aller à la recherche

Prévenir le client

[modifier | modifier le wikicode]

On les préviens que l'on travaille sur l'application avant de commencer

Passer l'application en mode maintenance

[modifier | modifier le wikicode]

Préparer l'hôte virtuel Apache

[modifier | modifier le wikicode]
# activation des hôtes virtuels
NameVirtualHost *:80

<VirtualHost *:80>
# comment/un-comment this line to disable/enable maintenance mode
        ServerName MON_PROJET.fr

        ## Maintenance ##
        RewriteEngine On

        Alias /maintenance.html /home/adminpleade/apps/maintenance/maintenance.html
        Alias /MON_PROJET-logotype.png /home/adminpleade/apps/maintenance/MON_PROJET-logotype.png
        RewriteCond %{REQUEST_URI} !maintenance.html
        RewriteCond %{REQUEST_URI} !MON_PROJET-logotype.png

        # Access de test pour AJLSM
#        RewriteCond %{REMOTE_ADDR} !82.225.177.85

        RewriteRule ^/(.*) /home/adminpleade/apps/maintenance/maintenance.html [L]
        RewriteRule ^/MON_PROJET-logotype.png /home/adminpleade/apps/maintenance/MON_PROJET-logotype.png [L]

        ProxyPass / ajp://localhost:8009/MON_PROJET/
        ProxyPassReverse / ajp://localhost:8009/MON_PROJET/

        ErrorLog /home/adminpleade/apps/maintenance/error.log
        CustomLog /home/adminpleade/apps/maintenance/access.log combined
</VirtualHost>

Basculer en mode maintenance

[modifier | modifier le wikicode]

On désactive l'hôte virtuel Apache de notre application pour mettre celui de maintenance à la place.

cd /etc/httpd/conf.d
mv 0pleade.conf 0pleade.conf.bak
mv maintenance.conf.bak maintenance.conf

Vérifications préalables

[modifier | modifier le wikicode]

Redémarrer Tomcat

[modifier | modifier le wikicode]

On vérifiera que l'instance de Apache Tomcat c'est bien arrêté et à redémarrer sans problème.

En cas de doute, on tuera complètement le processus de tomcat, car il s'est avéré que certain problèmes étaient dû à des instances serveurs zombie :

tomcatPid2Kill=$(ps aux | grep tomcat | grep java | awk '{print $2}')
kill $tomcatPid2Kill

Redémarrer PostgreSQL

[modifier | modifier le wikicode]

Il se peut que le serveur ce soit arrêté si le serveur physique est redémarrer et qu'aucun service ne relance postgreSQL. Si c'est le cas, on relancera le serveur de la façon suivante :

/etc/init.d/postgresql restart

Identifier la dernière configuration stable

[modifier | modifier le wikicode]

On analysera les journaux de publications pour trouvé d'éventuelles problèmes, signalé par une ERROR_MESSAGES non-vide

grep ERROR_MESSAGES "$AJLSM_HOME/logs/$PROJECT-front/publication-"*.log

Vider les données actuelles

[modifier | modifier le wikicode]

Depuis un utilisateur root on bascule sur l'utilisateur postgres pour accéder aux bases de données :

su - postgres

Une fois identifier en tant que postgres, on se connecte à la base pour la vider et remonter un dump :

psql -d "${PROJECT}_front" -U app_front

On est maintenant connecter à la base "$PROJECT_front" comme l'indique le prompt : $PROJECT_front=>. On vide maintenant toutes les tables avec un DROP TABLE :

DROP TABLE module_eadeac_eac, module_eadeac_eac_docs;
DROP TABLE module_eadeac_ead;
DROP TABLE module_eadeac_ead_docs;
DROP TABLE module_eadeac_ead_oai;
DROP TABLE module_eadeac_mets, module_eadeac_mets_docs;

Dans un autre terminal, on supprimera les données du dossier SDX : "$AJLSM_HOME/sdx-data/$PROJECT-front/"

rm "$AJLSM_HOME/sdx-data/$PROJECT-front"*/ -ri

Extraction des backups

[modifier | modifier le wikicode]

On bascule sur l'utilisateur gérant les sauvegardes, généralement c'est backupAgent. On choisi la date de la sauvegarde à restaurer :

# par exemple
restoreDateTime="2012-06-23_00h00"

Et on extrait successivement :

La sauvegarde globale

[modifier | modifier le wikicode]

Le méta paquet de la sauvegarde, "$restoreDateTime-$PROJECT-meta.tar" :

tar xf ./"$restoreDateTime-$PROJECT-front-meta.tar"

Les données d'indexation en système de fichier, "$restoreDateTime-$PROJECT-front-sdx-data.tar.gz.tar" :

tar xvzf "$restoreDateTime-$PROJECT-front-sdx-data.tar.gz"

La base de donnée

[modifier | modifier le wikicode]
Notice :
Cette extraction n'est pas nécessaire car on peut importer directement le fichier .gz, tel que décrit dans Restauration des données dans PostgreSQL.

Les données d'indexation en base de donnée, "$restoreDateTime-$PROJECT-front-sql.sql.gz" :

gunzip -c "$restoreDateTime-$PROJECT-front-sql.sql.gz" > "$restoreDateTime-$PROJECT-front-sql.sql"

Attention aux droits

[modifier | modifier le wikicode]

Les fichiers ont les droits de l'utilisateur responsable des sauvegarde, donc de backupAgent. Hors il faut que c'est fichiers soient accessible à l'application Pleade et donc à son utilisateur (ajlsm). Il faut donc changer les droits de ses fichiers :

su -
restoreDateTime="2012-06-23_00h00"
cd /home/backupAgent/backups/home/backupAgent/tmp/
chown adminpleade:ajlsm -R \
	"$restoreDateTime-$PROJECT-front-sql.sql" \
	./"home/" # extracted SDX data, relative to current directory

Restauration des données en système de fichiers

[modifier | modifier le wikicode]

Toujours depuis un utilisateur root, car on travaille entre plusieurs utilisateur.

mv home/adminpleade/sdx-data/upmc-front/ /home/adminpleade/sdx-data

Restauration des données dans PostgreSQL

[modifier | modifier le wikicode]

Remarques : Si besoin on consultera la documentation relative à PostgreSQL pour connaître les commandes essentielles.

L'opération peut prendre plusieurs minute, pour éviter d'avoir à extraire la base de donnée à la main, on pourra restaurer directement à partir du fichier .gz. avec la commande suivante :

time $(gunzip -c "$restoreDateTime-$PROJECT-front-sql.sql.gz" | psql "${PROJECT}_front" -U app_front)

On obtient quelques erreurs qui ne sont pas bloquante :

SET
SET
SET
SET
ERREUR:  l'index « module_eadeac_ead_propertyvalue_idx » n'existe pas
ERREUR:  l'index « module_eadeac_ead_propertyname_idx » n'existe pas
ERREUR:  l'index « module_eadeac_ead_oai_propertyvalue_idx » n'existe pas
ERREUR:  l'index « module_eadeac_ead_oai_propertyname_idx » n'existe pas
ERREUR:  l'index « module_eadeac_ead_oai_id_idx » n'existe pas
ERREUR:  l'index « module_eadeac_ead_id_idx » n'existe pas
ERREUR:  l'index « module_eadeac_eac_propertyvalue_idx » n'existe pas
ERREUR:  l'index « module_eadeac_eac_propertyname_idx » n'existe pas
ERREUR:  l'index « module_eadeac_eac_id_idx » n'existe pas
ERREUR:  la relation « public.module_eadeac_ead » n'existe pas
ERREUR:  la relation « public.module_eadeac_ead_oai » n'existe pas
ERREUR:  la relation « public.module_eadeac_ead_docs » n'existe pas
ERREUR:  la relation « public.module_eadeac_eac » n'existe pas
ERREUR:  la relation « public.module_eadeac_eac_docs » n'existe pas
ERREUR:  la table « module_eadeac_ead_oai » n'existe pas
ERREUR:  la table « module_eadeac_ead_docs » n'existe pas
ERREUR:  la table « module_eadeac_ead » n'existe pas
ERREUR:  la table « module_eadeac_eac_docs » n'existe pas
ERREUR:  la table « module_eadeac_eac » n'existe pas
ERREUR:  doit être le propriétaire du schéma public
ERREUR:  le schéma « public » existe déjà
ALTER SCHEMA
ERREUR:  doit être le propriétaire du schéma public
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
 setval
--------
      1
(1 row)

CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
 setval
--------
      1
(1 row)

 setval
---------
 3384771
(1 row)
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
ATTENTION:  aucun privilège n'a pu être révoqué
REVOKE
ATTENTION:  aucun privilège n'a pu être révoqué
REVOKE
ATTENTION:  aucun privilège n'a été accordé
GRANT
ATTENTION:  aucun privilège n'a été accordé
GRANT

La commande dure environ :

real    13m48.002s
user    3m8.363s
sys     0m21.308s

Redémarrage de Tomcat

[modifier | modifier le wikicode]

Pour que le nouvel environnement soit bien pris en compte, on redémarrera le serveur Tomcat :

flushAndRestart front

Restaurer le mode production

[modifier | modifier le wikicode]
cd /etc/httpd/conf.d
mv 0pleade.conf.bak 0pleade.conf
mv maintenance.conf maintenance.conf.bak