ADMINISTRATEUR DE SYSTEME D`INFORMATION
Transcription
ADMINISTRATEUR DE SYSTEME D`INFORMATION
VAE VALIDATION DES ACQUIS DE L'EXPÉRIENCE ADMINISTRATEUR DE SYSTEME D’INFORMATION Curriculum vitae IP1. Programmation Orientée Objet IP2. Systèmes d’Information IP3. Internet IP4. Systèmes d’Exploitation et Réseaux IP6. Bases de Données et Internet IP7. Programmation Orientée Objet et Bases de Données IP8. Programmation Orientée Objet et Internet Stéphane Gimenez LICENCE NOUVELLES TECHNOLOGIES INFORMATIQUES 2013 CV ADMINISTRATEUR DE SYSTEME D'INFORMATION DIPLOMES 2008 Formation diplômante niveau III développeur informatique, AFPA, Marseille 1992 BEP Structures Métalliques, lycée Vauvenargues, Aix en provence FORMATIONS PROFESSIONNELLES Journées Développement Logiciel 2011 (2011, 2 jours, CNRS DR14) ✔ Atelier sur l'utilisation des patrons de conception (Design Pattern) ! Langage Python (2010, 5 jours, CNRS DR12) ✔ Découverte de Python, initiation à la syntaxe et aux structures de données. ✔ Python Orienté Objet ✔ Interopérabilité de Python et modules scientifiques ! Langage UML (2009, 4 jours, CNRS DR12) ✔! Diagramme de cas d'utilisation, modélisation statique et dynamique ✔! Mise en œuvre d'UML avec les méthodes agiles et Unified Process AUTOCAD (1998, 10 jours, Acticad) COMPETENCES INFORMATIQUES Développement d'applications ✔ JAVA/J2EE, Perl, C, C++, Python ✔ Swing, Catalyst ✔ Eclipse, NetBeans, Padre Développement web ✔ HTML5, CSS3, Javascript, JQuery, ExtJS, PHP, XML, JSP, Ajax Base de données ✔ PostgreSQL, Oracle, MySQL ✔ Merise, SQL Systèmes et Réseaux ✔ Linux, Windows, Apache (HTTP, Tomcat6), PgPool-II EXPERIENCES PROFESSIONNELLES Depuis janvier 2009, Laboratoire d'astrophysique de Marseille (LAM) – CNRS Assistant ingénieur au Centre de données astrophysique de Marseille (CeSAM) Mission : Assurer la maîtrise d’œuvre des systèmes d’information cosmologiques du CeSAM en définissant les procédures informatiques permettant l’administration et l’exploitation des bases de données, ainsi que le suivi et la sécurité des systèmes d'information. Administrateur Bases de Données • Migration de bases de données Oracle 10g vers PostgreSQL 9.0 • Analyse, conception et administration des bases de données cosmologiques du CeSAM (6 bases) • Mise à jour des bases de données cosmologiques • Mise en place d'une stratégie de sauvegarde des bases de données du CeSAM ! Administrateur Systèmes d'information • Conception, développement et administration des sites internet pour la mise à disposition des données scientifiques cosmologiques du CeSAM (6 SI) Développement des outils de consultations et d'extraction des données • • Développement des outils de traitement d'images astronomiques et de visualisation de spectres • Participation aux spécifications et débogage des versions bêta du logiciel SiTools2 (CNES) • Développement de modules additionnels pour le logiciel SiTools2 • Gestion des accès sécurisés aux systèmes d'information • Développement d’ANIS (Astronomical Information System), framework de mise en place d’un système de recherche et d’accès aux données en astrophysique. Systèmes et Réseaux • Installation et administration de deux serveurs de base de données PostgreSQL 9.0 avec une réplication en streaming. • Administration d'un serveur PgPool-II pour la répartition de charge entre les serveurs de base de données • Installation et administration de deux serveurs pour la mise en production et le développement des systèmes d'information • Configuration des serveurs Apache et des accès aux SI par proxy Publications et participation aux colloques internationaux • ADASS (Astronomical Data Analysis Software and Systems) XXI (2011, Paris, 5 jours) • Poster et article : « The Information Systems at CeSAM », co-auteur ADASS XX (2010, Boston, 5 jours) • • Poster et article : « The COSMOS Information Systems at LAM », co-auteur • Poster et article : « HeDaM: The Herschel Database in Marseille », co-auteur Octobre-Décembre 2008 , Laboratoire d'astrophysique de Marseille (LAM) – CNRS Stage AFPA au Centre de données astrophysique de Marseille (CeSAM) Développement d'un module additionnel de localisation des agents pour l'application BddP de gestion du personnel du laboratoire (Applet JAVA/Oracle) PROGRAMMATION ORIENTÉE OBJET Développement d’un module additionnel JAVA pour le logiciel SiTools2 IP1 ENVIRONNEMENT TECHNOLOGIQUE Sitools2 permettant l'ajout de modules additionnels, j'ai développé ce module d'export en Java 6 avec l'environnement de développement Eclipse. La gestion du code source est effectué par Subversion sur un serveur au sein du service. LANGAGE UTILISÉ Java : version 6 LOGICIELS UTILISÉS Eclipse : Indigo Subversion : Eclipse subversive 1. Développement d’un module additionnel JAVA pour le logiciel SiTools2 CONTEXTE Dans le cadre de l'utilisation du logiciel SiTools2 (plate-forme web permettant de mettre en place un système de recherche et d'accès aux données à partir d'une ou plusieurs bases de données existantes), développé en Java http://sitools2.sourceforge.net), il manquait la possibilité d'exporter le résultat d'une recherche au format standard VOTable (Fichier xml avec les spécifications Observatoire Virtuel http://www.ivoa.net/ ). L’architecture de cette plate-forme est composée : • d'un serveur de données exposant des ressources, • d'une interface web pour l'administrateur permettant de configurer l'ensemble des fonctionnalités du serveur, • d'une interface web pour les utilisateurs comportant un portail qui liste les projets, avec un bureau pour chaque projet qui expose l'ensemble des services mis à disposition par l'administrateur, • d'un mécanisme de plugins permettant aux développeurs d'ajouter des fonctionnalités métiers aussi bien au niveau du serveur qu'au niveau du client et de les partager avec une communauté d'utilisateurs. PHASE DE CONCEPTION La mise en oeuvre de ce module additionnel d'Export des données au format VOTable consiste à développer en Java un Service à Valeurs Ajoutées (SVA) au sein de SiTools2. SiTools2 Framework développ é par le CNES, dédié à la mise en pla ce de Systèmes d’Information scient ifiques. PROCESSUS DE DÉVELOPPEMENT Développement de la classe principale d’export Extension de la classe principale d’export pour la gestion des différents formats de sortie Développement de la classe d’envoi du résultat PHASE DE RÉALISATION Pour implémenter un module additionnel appelé "ressource plugin" il faut une ressource "implémentation" et une ressource "façade" qui est la ressource attachée à l’application, c’est donc celle qui sert d’entrée. La ressource "façade" doit définir les différentes méthodes autorisées et doit ensuite faire appel à la classe TaskUtils qui gère les appels synchrones ou asynchrones et les tâches d’exécutions. La ressource "façade" est étendue par la ressource "implémentation" qui va créer et retourner un objet "Representation" de l'API Restlet. J'ai donc commencé par créer ces classes qui per mettent d'implémenter un module additionnel dans SiTools2. Dans la classe ExportVoService, je récupère l'objet Restlet "Context" qui contient des paramètres du client qui ont permis d'obtenir les résultats de la recherche. Ces paramètres servent à instancier un objet OutputRepresentationVOTable qui est retourné dans l'objet Representation. Dans la classe OutputRepresentationVOTable j'ai codé les méthodes qui vont permettre de récupérer les données, les mettre en forme au format VOTable. Ces données sont renvoyées dans un objet OutputStream. Pour la récupération des données, j'ai créer une classe RecordsRetriever qui contient les méthodes pour relancer la requete et transformer le fichier de résultat qui est retourné au format Json en objets en utilisant la bibliothèque Xstream. Les données sont retournées dans une liste d'enregistrements. J'ai ensuite créé une classe VOTable qui contient les méthodes qui permettent de mettre en forme un fichier au standard VOTable. BILAN A travers l’analyse et le développement de ces activités, j’ai pu acquérir les connaissances et compétences nécessaires pour cette activité : Java Librairie xstream, Restlet. SYSTÈMES D’INFORMATION IP2 Analyse, conception et administration du S y s t è m e d’Information HST-COSMOS ENVIRONNEMENT TECHNOLOGIQUE La version existante était codée en Perl à mon arrivée en 2009, j'ai conservé ce langage pour le nouvelle version de ce SI. Les données et méta-données sont stockées dans une base de données PostgreSQL. SGBD 1. Analyse, conception et administration du Système d’Information HST-COSMOS CONTEXTE Le projet HST-COSMOS est le plus important sondage du HST (Hubble Space Telescope) avec 2 degrés carré d'imagerie à haute résolution couplé avec des données multi longueurs d'onde, provenant des plus grands observatoires mondiaux (CFHT,VLA, VLT, XMM, Spitzer). L'objectif du Système d'Information HST-COSMOS est de combiner l'ensemble de ces informations afin de pouvoir faire l’étude des galaxies par la combinaison des données des télescopes spatiaux et sol. Oracle 10g PHASE DE CONCEPTION Postgresql 9.0 La base de donnée métier était à l’origine sous Oracle 10g. Pour des raisons financières (achat de licences) et technologiques (uniformisation de toutes les bases de données du CeSAM), j’ai effectué la migration de la base métier d’Oracle vers Postgresql. LOGICIELS UTILISÉS Emacs JMerise MATÉRIEL UTILISÉ serveur : centOS Le SI devait être dynamique pour faciliter l'ajout de nouveaux catalogues de données, j'ai donc décidé d'appuyer la structure du SI sur une base de méta-données. J’ai donc suivi une succession d’étapes : • Expression du besoin : j’ai défini ce que l’on attend du Système d’Information. J’ai donc fait l’inventaire des éléments nécessaires au SI et pour le délimité. • Modèle conceptuel : j’ai mis au point le Modèle Conceptuel de la communication (MCC) et le Modèle Conceptuel de Données (MCD) • Modèle logique : j’ai défini le choix logiciel pour le SI. • Modèle physique : j’ai défini le choix matériel pour le SI. • Modèle Opérationnel des traitements : j’ai crée les différents formulaire de manipulation des données. Afin de concevoir le MCD, j’ai dans un premier temps défini toutes les entités et leurs attributs, puis dans un second temps les associations qui lient de façon logique les entités entre elles et leurs cardinalités. COSMOS COSMOlogical evolut ion Survey (COSMOS ) Etude de l’évolution des Galaxies par la com binaison des données des télescop es spatiaux (Hubble, Spitzer, Galex, ...), et sol (ESO- VLT, CF HT, ...) En exploitation depu is 2005, 4 millions d’o bjets, 150 Go d’images, 32000 lign es de code. Les entités sidataset et siattributes L’entité sidataset répertorie les catalogues de données. Elle contient l’attribut nom_catalog qui contient le nom de la table métier et des attributs qui contiennent des informations pour l'affichage du SI. L’entité siattributes contient les informations des colonnes des tables métiers. Un attribut est identifié par le nom de colonne et le nom de la table métier correspondante. Elle contient aussi les informations VOTable (Fichier xml avec les spécifications Observatoire Virtuel http:// www.ivoa.net/) sur la colonne ainsi que des informations pour la construction dynamique des formulaire du SI. Un élément siattributes appartient à un seul élément sidataset et un élément sidataset peut avoir aucun ou plusieurs éléments siattributes. Les entités dataset_files et images Les entités dataset_files et images servent à gérer les fichiers liés au catalogues. Les images s o n t d e s fi c h i e r s q u i c o n t i e n n e n t d e s informations supplémentaires qui sont stockées dans l’entité images. Un élément sidataset contient aucun ou plusieurs fichiers associés, et un fichier associé appartient à un seul élément de sidataset. Les entités siniveau et siuser Les entités siniveau et siuser servent à gérer l'affichage d'un catalogue et de certaines de ses colonnes suivant l'utilisateur connecté au SI. Un utilisateur possède un niveau d'accès qui lui permet de voir les catalogues correspondant à ce niveau. Il est également possible de gérer l'affichage des colonnes, pour que certaines colonnes d'un catalogue soient visibles à un niveau et d'autres au niveau supérieur. Un élément sidataset a un niveau d’accès unique et un élément siattributes est visible d’un seul niveau d’accès. Un élément siuser possède un seul niveau d’accès. Après la validation du MCD, j’ai pu déduire le Modèle Logique des Données (MLD). PHASE DE RÉALISATION J’ai ensuite sous le SGBD Postgresql crée le Modèle Physique de Données (MPD) et suivi ces actions : Création de la base de méta-données Création des tables, des vues, ... Création des index Gestion des droits d’accès Gestion des sauvegardes des données J’ai ensuite développé les différents formulaires du SI en utilisant SQL comme langage de manipulation de données. BILAN A travers l’analyse et le développement des bases de données métier et de méta-données, j’ai pu acquérir les connaissances et compétences nécessaires pour cette activité : SGBD : Oracle 10g, Postgresql 9.0 Méthode Merise Langage de manipulation de données SQL INTERNET Conception, développement et administration des sites internet pour la mise à disposition des données s c i e n t i fi q u e s cosmologiques du CeSAM. IP3 ENVIRONNEMENT TECHNOLOGIQUE Pour écrire la partie cliente de ce système d'information j'ai utilisé les standards HTML5 et CSS3. J'utilise également les librairies jQuery, jQueryUI et différents plugins pour les script javascript. Certaines fonctions javascript utilise la méthode AJAX qui s'appuie sur des scripts codé en php dans le contrôleur et qui utilisent le format JSON pour l'échange de données entre le client et le serveur. J'utilise également le kit CSS Bootstrap pour la mise en forme des pages et régle automatiquement les différents formats d'affichage (Tablettes, smartphone..) 1. Analyse, conception et administration des sites internet cosmologiques du CeSAM. CONTEXTE Le centre de données astrophysique de Marseille (CeSAM) a mis en place un ensemble de systèmes d’information pour mettre à disposition les données à valeur ajoutée des projets scientifiques du laboratoire d'astrophysique de Marseille (LAM). Les différents systèmes d'information ayant des fonctionnalités communes, il a été décidé de créer un système d'information générique afin de facilité le déploiement et la maintenance des SI. PHASE DE CONCEPTION ET ÉTUDE HTML5, CSS3 Lors de la phase de conception nous avons clairement défini les objectifs du SI générique et ses différentes fonctionnalités afin de répondre aux besoins exprimés par les chefs de projets scientifiques du LAM. Nous avons dans un premier temps élaboré des scénarios, établit le cahier des charges puis planifier les différentes étapes de la réalisation. JavaScript Notre SI générique repose sur une architecture client/serveur. LANGAGES PHP LOGICIELS UTILISÉS NetBeans 7.2.1 ANIS Framework dédié à la mise en place de Systèmes d ’ Information scientifiques. PHASE DE RÉALISATION JavaScript, jQuery & Ajax Pour la description de la phase de réalisation, je vais explicitement vous décrire le formulaire de recherche d’objets célestes autour d’une position dans le ciel : ConeSearch appliqué au SI VUDS. Pour gérer les différentes actions du formulaire, j’utilise la bibliothèque jQuery qui porte sur l’interaction entre JavaScript (comprenant Ajax) et HTML et qui a pour but de simplifier des commandes communes de JavaScript. Afin de pouvoir utiliser la bibliothèque jQuery, on ajoute son chargement : HTML & CSS <script src="scripts/jquery-1.8.3.min.js"></script> J’ai dans un premier temps édité le formulaire ConeSearch qui comprend une zone de sélection du jeux de données (Datasets) , une zone d’affichage des critères de recherche (Cone Search), et une zone de sélection des paramètres de sortie (Output) à l’aide de la balise HTML <div> et de leur mise en forme à l’aide de feuille de style CSS. extrait HTML <div class="frame"> <div class="row-fluid"> <h3>Datasets</h3> </div> ... </div> extrait CSS .frame{ font-size: 14px; line-height: 20px; border-radius: 10px; border: 1px solid #91A9F7; background-color: white; } et à la fin du téléchargement du DOM, j’agit sur le document à l’aide de la fonction «ready»: $(document).ready(function (){ ... }); La «<div>» Datasets est composée de radio boutons sur lequel il y a le listener jQuery «.change()» dans la fonction $(document).ready() qui me permet d’exécuter une fonction au changement d'état du formulaire. La fonction récupère le nom du jeu de données sélectionné et le renvois dans un script php par la méthode AJAX en utilisant la fonction jQuery «.post()» : $(document).ready(function (){ $('#dataset input[name=dataset]').change(function() { loadConesearch($("#dataset input [name=dataset]:checked").val()); }); }); function loadConesearch(datasetName){ $.post('data/conesearchDataset',{ dataset: datasetName },function(data) { formConesearch(data); }); } Le script php récupère dans la base de méta-données les informations du jeu de données et les renvois sous forme de fichier au format JSON. public function conesearchDatasetAction() { $this->_view->setDisabledView(true); $dataset = $this->_request->getParam('dataset'); .... $json = array('conesearch' => $criteria); $this->_response->setHeader("content-type", "text/json"); $this->_response->printStream(json_encode($json)); } J'utilise une fonction jQuery (formConesearch) pour parcourir le fichier JSON et récupérer les informations du jeu de données qui me permettent d'écrire les formulaires de recherche. function formConesearch(data){ .... var form_criteria = []; form_criteria.push('<div class="row-fluid">'); form_criteria.push('<div class="span7 buttonrow">'); form_criteria.push('<button class="btn btn-warning btn-hms" type="button" id="btnhms" data-toggle="button">Enter HH:MM:SS</ button>'); form_criteria.push('</div>'); form_criteria.push('<div class="span4 info-dataset">'); form_criteria.push('<div class="row-fluid">' + data.conesearch.ra.label + ' between ' + (Math.floor(data.conesearch.ra.min*1000)/ 1000).toFixed(3) + ' and ' + (Math.ceil(data.conesearch.ra.max*1000)/1000).toFixed(3) + '</div>'); form_criteria.push('<div class="row-fluid">' + data.conesearch.dec.label + ' between ' + (Math.floor(data.conesearch.dec.min*1000)/ 1000).toFixed(3) + ' and ' + (Math.ceil(data.conesearch.dec.max*1000)/1000).toFixed(3) + '</div>'); form_criteria.push('</div>'); form_criteria.push('</div>'); form_criteria.push('<div class="row-fluid" id="degrees">'); form_criteria.push('<div class="span7">'); form_criteria.push('<div class="span5 offset1">' + data.conesearch.ra.label + ' <input class="span9 inputtext" type="text" name="radeg" id="radeg" placeholder=""></div>'); form_criteria.push('<div class="span5">' +data.conesearch.dec.label + ' <input class="span9 inputtext" type="text" name="decdeg" id="decdeg" placeholder=""></div>'); form_criteria.push('<div class="span1">Degrees</div>'); form_criteria.push('</div>'); form_criteria.push('</div>'); ... } J'ai écrit une fonction qui convertit automatiquement des coordonnées saisies au format heures minutes secondes et les transcrit en degrés. Cette fonction est associée à un listener jQuery .bind('keyup'), qui permet de l'exécuter à chaque relâchement de touche : $("#hms").bind('keyup',(function() { var ra = (Number($('#rah').val()) + (Number($('#ram').val()) / 60) + (Number($('#ras').val()) / 3600)) * 15; var dec = Math.abs(Number($('#decd').val())) + (Number($('#decm').val()) / 60) + (Number($('#decs').val()) / 3600); if (Number($('#decd').val()) < 0){ dec = dec * -1; } $('#degrees input[name=radeg]').val(ra); $('#degrees input[name=decdeg]').val(dec); })); jQueryUI & jQuery plugins Sur l’ensemble de mes formulaires, j’ai utilisé jQuery UI qui offre des méthodes additionnelles appliquées à la réalisation de l'interface utilisateur grace à des interactions et des widgets. J'ai donc utilisé un «slider» qui permet d'afficher un intervalle de valeurs et d'en sélectionner une sous la forme d'une réglette afin que l’utilisateur nous communique le rayon de recherche souhaité. $("#slider").slider({ min: 0, max: 150, value : 2, slide: function(event, ui){ $("#rad").html(ui.value); $("#radius").val(ui.value); } }); Les onglets utilisés dans le choix des familles critères et les accordéons utilisés dans la selections des paramètres de sorties sont générés en utilisants les classes et les scripts de Bootstrap. Pour la mise en forme des résultats de la recherche, j'utilise le plugins jQuery DataTables, qui permet l'affichage sous forme de tableau. Pour les fonctions de tri, de pagination ou de recherches des résultats, j'utilise la méthode AJAX et un script php qui écrit et exécute une sous requête, puis renvois les résultats avec le format JSON. Les nouveaux résultats sont affichés par le plugin. BILAN A travers l’analyse et le développement des sites internet cosmologiques, j’ai pu acquérir les connaissances et compétences nécessaires pour cette activité : HTML5, CSS3 Javascript, jQuery, AJAX PHP En plus de mes activités de développement au CeSAM, je suis intervenu en tant que formateur au cours de trois formations CNRS «développement web pour Administrateur Système et Réseaux», pour différentes délégations régionales. J’ai dispensé le cours sur les plugins jQuery, ainsi que les TP jQuery & Ajax. SYSTÈMES D’EXPLOITATION ET RÉSEAUX Installation et administration de deux serveurs de base de données Postg reSQL 9.0 avec une réplication en streaming Administration d’un serveur PgPool-II pour la répartition de charge entre les serveurs de bases de données Installation et administration de deux serveurs pour la mise en production et le développement des systèmes d’information IP4 ENVIRONNEMEN T TECHNOLOGIQUE LES LOGICIELS UTILISÉS Les deux serveurs de base de données sont installés avec la distribution Scientific Linux 6.3 . Les base de données sont sous PostgreSQL 9.0 . Un serveur vir tuel qui héberge pgPool-II pour le "pooling" de connexion et la répartition de charge. Un serveur utilisé pour héberger la sauvegarde hebdomadaire. Le logiciel rsync pour effectuer la sauvegarde hebdomadaire. Le programme cron pour lancer automatiquement des scripts. CONTEXTE Le centre de données astrophysique de Marseille (CeSAM) a mis en place un ensemble de systèmes d’information pour mettre à disposition les données à valeur ajoutée des projets scientifiques du laboratoire d'astrophysique de Marseille (LAM). Ces données était majoritairement stockées dans des bases de données Oracle et PostgreSQL 8.4, installées sur différents serveurs. Il a été décidé d'uniformiser et de centraliser les bases de données sur des serveurs dédiés pour faciliter la maintenance et de mettre en place un système de sauvegarde. PHASE DE CONCEPTION Pour offrir une haute disponibilité des données, nous avons décidé de mettre en place un système de réplication du 2 serveurs physiques pour palier à une panne matériel. Si une panne survient les données sont toujours disponibles sur l'autre serveur. De plus le système de réplication par "streaming" garanti d'avoir les données identiques sur les 2 serveurs. Cette solution à comme inconvénient qu'en cas de panne du serveur maitre, il faut reconfigurer l'adresse de connexion de toutes les application et SI qui interroge les bases de données pour qu'ils se connecte au serveur esclave. Nous avons donc décidé d'ajouter un pooler de connexions qui permet de n'avoir qu'une adresse à configurer, le pooler se chargeant de rediriger les connexions. De plus cela permet de répartir les requêtes sur les 2 bases de données. La réplication ne protégeant pas d'une erreur de manipulation de la base, puisque l'erreur est aussitôt répliquée, nous avons décidé la mis en place un système de sauvegarde qui permet de récupérer une base à jour du samedi précédent. Pour finir, nous avons décidé d'ajouter un serveur de développement qui permet de développer et d’effectuer des tests sur des bases de données séparées. Processus de développement : Installation et configuration de PostgreSQL 9.0 sur les serveurs maitre et esclave Mise en place de la réplication Création et migration des bases de données existantes sur les nouveaux serveurs Gestion des utilisateurs et des accès au bases de données Installation et configuration de pgPool-II sur le serveur virtuel et gestion des accès Création des clusters de bases de données sur les serveurs de sauvegarde et de développement Création des scripts de sauvegarde et de copie de base de données Mise en place de l'automatisation de la sauvegarde avec cron PHASE DE RÉALISATION Pour la mise en place des bases de données, j'ai d'abord installé postgreSQL sur les serveurs maitre (master) et esclave (slave). J'ai ensuite créé le répertoire ou sont stockés les fichiers binaires et initialisé le cluster sur chacun des serveurs. yum install postgresql90.x86_64 mkdir /data/databases initdb -D /var/lib/pgsql/9.0/master La réplication ne protégeant pas d'une erreur de manipulation de la base, puisque l'erreur est aussitôt répliquée, j'ai mis en place un système de sauvegarde qui permet de récupérer une base à jour du samedi précédent. Pour cela j'ai installé postgreSQL sur un serveur de sauvegarde et écrit un script bash utilisant le logiciel rsync pour effectuer la sauvegarde hebdomadaire par copie des fichiers binaires. #!/bin/sh Le streaming réplication, ou réplication en flux est un système de réplication asynchrone, en maitre/ esclave, qui fonctionne à partir des journaux de transactions. J'ai donc configuré le serveur maitre pour activer l'archivage des journaux de transactions, le mode de réplication et autoriser un serveur esclave à se connecter. wal_level = 'hot_standby' archive_mode = 'on' archive_command = 'cp %p /data/archives_xlog/%f' max_wal_senders = 1 J'ai également configurer le serveur esclave, pour lui indiquer de se mettre en mode attente et comment se connecter au serveur maitre. restore_command = 'cp /mnt/nfs/data/archives_xlog/%f %p' archive_cleanup_command = 'pg_archivecleanup /mnt/nfs/data/ archives_xlog %r' standby_mode = 'on' primary_conninfo = 'host=172.20.110.173 port=5432 user=slave' trigger_file = '/tmp/stopstandby' Pour autoriser le serveur esclave à se connecter au serveur maitre il faut également déclarer son adresse CIDR dans le fichier de configuration des accès distants (pg_hba.conf ) # TYPE DATABASE USER CIDR-ADDRESS METHOD host replication slave 172.20.110.174/32 md5 ssh postgres@save "pg_ctl -D /var/lib/pgsql/9.0/master_backup status" psql -c "SELECT pg_start_backup('master_backup', true)" rsync -e ssh -avz --delete-after --progress /data/databases/ save:/data/ databases/ rsync -e ssh -avz --delete-after --progress --exclude=*.conf -exclude=PG_VERSION --exclude=postmaster.pid -exclude=postmaster.opts /var/lib/pgsql/9.0/master/ save:/var/lib/pgsql/ 9.0/master_backup/ ssh postgres@save "pg_ctl -D /var/lib/pgsql/9.0/master_backup start </dev/null >/dev/null 2>&1" ssh postgres@save "pg_ctl -D /var/lib/pgsql/9.0/master_backup status" psql -c "SELECT pg_stop_backup();" sleep 500 ssh postgres@save "pg_ctl -D /var/lib/pgsql/9.0/master_backup stop -m fast" Pour automatiser la sauvegarde hebdomadaire, j'ai utilisé le programme cron. 0 1 * * 0 sh /var/lib/pgsql/master_backup.sh >>/tmp/log_backup.log J'ai également installé postgreSQL sur un serveur de développement et pour simplifier la mise en production d'une base de données, j'ai écrit un script bash qui copie une base ou une table du serveur de développement vers le serveur de production. #!/bin/sh J'ai mis en place le système de pooling et de répartition de charge en installant pgPool-II sur un serveur virtuel. Pour activer la répartition de charge, j'ai indiqué dans le fichier de configuration (pgpool.conf) l'adresse IP des serveurs, leur port et le poids de la répartition. # Host name or IP address to connect to for backend 0 backend_hostname0 = '172.20.110.173' # Port number for backend 0 backend_port0 = 5432 # Weight for backend 0 (only in load balancing mode) backend_weight0 = 0.5 backend_hostname1 = '172.20.110.174' backend_port1 = 5432 backend_weight1 = 0.5 usage(){ name=`basename $0` echo "Usage: $name [-t table_name] database_manager database_name" echo " $name [-h]" echo " -t table to dump" echo " -h this help" echo $nbParams } nbParams=$# table="" if [ $# -lt 2 ] ; then usage ; exit 1 ; fi while getopts "t:h" arg; do case $arg in h) usage ; exit 1 ;; t) table=$OPTARG ;; esac done ssh postgres@dev "pg_ctl -D /var/lib/pgsql/9.0/master_backup start </dev/null >/dev/null 2>&1" sleep 10 if [ -n "$table" ] ; then #Restaure uniquement la table passée en parametre pg_dump -h dev -p 5433 -U $3 -t $table -F c -v -f "/data/temp_backup_to_prod/$4.bak" $4 psql $4 -c "DROP TABLE IF EXISTS $table;" pg_restore -d $4 -v "/data/temp_backup_to_prod/$4.bak" rm "/data/temp_backup_to_prod/$4.bak" ssh postgres@dev "pg_ctl -D /var/lib/pgsql/9.0/master_backup stop -m fast" exit0; else #Restaure la totalité de la base de données pg_dump -h dev -p 5433 -U $1 -F c -v -f "/data/temp_backup_to_prod/$2.bak" $2 psql template1 -c "DROP DATABASE IF EXISTS $2;" psql template1 -c "CREATE DATABASE $2 TEMPLATE template0 OWNER cesamsi TABLESPACE databases;" pg_restore -d $2 -v "/data/temp_backup_to_prod/$2.bak" rm "/data/temp_backup_to_prod/$2.bak" ssh postgres@dev "pg_ctl -D /var/lib/pgsql/9.0/master_backup stop -m fast" exit 0; fi schéma global de l’ensemble des serveurs BILAN Connaissances/compétences nécessaires pour cette activité : Installation de programmes sous linux Configuration des accès réseau entre les serveurs Configuration de postgreSQL et pgPool-II rsync Perspectives : Migrer vers la version PostgreSQL 9.2 , pour bénéficier de la réplication avec les 2 serveurs en lecture /écriture et de la répartition de charge intégré. BASES DE DONNÉES & INTERNET Au cours de ce module, je vais vous montrer à partir d’une recherche multicritère (formulaire) sur un ensemble de dataset, les c o n n e x i o n s e n t re d e s bases de données (métier et méta-données) et Internet (client-serveur) IP6 La page HTML possède des boutons radio, sur lesquels un listener jQuery est associé. Le changement de dataset déclenche l'envoi d'une requête AJAX a un script PHP. A partir des paramètres reçus, le script PHP va créer une requête SQL et l'envoyer vers la base de métadonnées, laquelle va lui renvoyer les résultats. Le script va encoder ces résultats au format JSON et les renvoyer vers le client. Le client va ensuite utiliser le JSON pour fabriquer un formulaire grâce à des fonctions javascript. A la validation du formulaire, le client envoie les paramètres de recherche vers un script PHP. Le script PHP va transformer le formulaire en requête SQL pour interroger la base de données métier. Le script transforme les résultats reçus de la base de données en fichier au format JSON, lequel est renvoyé au client. Le client met en forme le fichier en utilisant le plugin jQuery dataTables. POO & BASES DE DONNÉES Au cours de ce module, je vais vous montrer les connexions entres les bases de données (métier et métadonnées) et la programmation orientée objet. IP7 Développement d’une classe étendue de PDO, afin d’ajouter la gestion des options du driver selon le type de base utilisée. class WPDO extends \PDO { /** * Add mandatories options to the PDO driver is the goal of this legacy * * @param string $dsn * @param string $username * @param string $password * @param array $driver_options */ final public function __construct($dsn, $username = '', $password = '', $driver_options = array()) { $driver_options += array(self::ATTR_ERRMODE => self::ERRMODE_EXCEPTION, self::ATTR_STATEMENT_CLASS => array ('Cesamsi\Model\PDO\Statement')); Statement::setPDOInstance($this); parent::__construct($dsn, $username, $password, $driver_options); } } Utilisation du connecteur WPDO lors du chargement des pages du client. // Activation autoload (new SplAutoloader())->addAutoload(new Autoload('Cesamsi', '../../webtools/src/'))->register(); // Chargement de la configuration $appConfig = ConfigFactory::getConfig('../application/config.yaml', ConfigFactory::YAML); Registry::getInstance()->application = $appConfig; // Chargement base de données default $defaultConfig = $appConfig->model->databases->default; if ($defaultConfig->rdbms == "pgsql") { $dsn = $defaultConfig->rdbms . ":host=" . $defaultConfig->host . ";port=" . $defaultConfig->port . ";dbname=" . $defaultConfig>name; $default = new WPDO($dsn, $defaultConfig->user, $defaultConfig->pass); } else if ($defaultConfig->rdbms == "sqlite") { $default = new WPDO($defaultConfig->rdbms, $defaultConfig->host); } // Chargement base de données meta $metaConfig = $appConfig->model->databases->base_meta; if ($metaConfig->rdbms == "pgsql") { $dsnMeta = $metaConfig->rdbms . ":host=" . $metaConfig->host . ";port=" . $metaConfig->port . ";dbname=" . $metaConfig>name; $meta = new WPDO($dsnMeta, $metaConfig->user, $metaConfig->pass); } else if ($metaConfig->rdbms == "sqlite") { $meta = new WPDO($metaConfig->rdbms . ':' . $metaConfig->host); } // Ajout des bases au Manager Manager::getInstance()->addDatabase('default', $default); Manager::getInstance()->addDatabase('base_meta', $meta); // Lancement de l'application FrontController::getInstance()->dispatch(); Diagramme de classes de l’objet SQLQuery qui permet la construction de tout type requête. L’objet requête est ensuite envoyé à la base de données (métier ou meta-data) en utilsant PDO. Modèle Conceptuel de Données de la base méta-données, qui permet de paramétrer et de piloter le système d’information du projet scientifique. exemple de fonctionnement pour le projet scientifique CFHTLS. POO & INTERNET Au cours de ce module, je vais vous montrer la c o n s t r u c t i o n dynamique de pages HTML en utilisant la programmation o ri e n t é e o b j e t e t l'utilisation du design pattern MVC. IP8 Le traitement d'une demande d'un client se déroule selon les étapes suivantes : Le client fait une demande au contrôleur qui est la porte d'entrée de l'application. Le contrôleur traite cette demande en s'appuyant sur la couche métier. Si besoin la couche métier récupère des données via la couche d'accès aux données. Le contrôleur reçoit une réponse de la couche métier. Le contrôleur traite la réponse et envoie les informations dynamiques à la page phtml correspondante. La vue est envoyée au client. Ce schéma représente l’organisation des différentes pages HTML qui composent le template ANIS (Astronomical Information System) que j’ai développé pour les besoins du service. Ces pages sont composées de plusieurs modules permettant à chaque projet de gérer le design de son système d’information selon les objectifs scientifiques de celui-ci. Les modules sont construit dynamiquement par l’ensemble des classes des contrôleurs qui font la liaison entre la vue et le modèle. Module Dataset : sélection du jeux de données. Module Criteria : sélection des critères de recherche. Module d’Output : sélection des informations à extraire. STEPHANE GIMENEZ 141 Chemin de la Treille, 13320 Bouc-Bel-Air tel : 06.89.30.56.91 email : [email protected]