Contextualisation

SIO > S2_SISR > . > S2C07 gestion de projet - ITIL > S2T9 Projet replication web.md

Contextualisation

Un client souhaite installer une application on premise (hébergée à domicile, dans une DMZ) pour ses clients et collaborateurs en déplacement.
Pour assurer la sûreté du service web, nous devons mettre en place une sauvegarde en temps réel sans interrompre le service.

Les contraintes du service sont :

  • sauvegarde en temps réel : toute modification doit être sauvegardée immédiatement,
  • sauvegarde sans interruption du service aux clients
  • historique sur une semaine : on doit pouvoir avoir une sauvegarde de la fin de semaine précédente et des SAV régulières entre les deux.
  • facilité et rapidité de reprise du service client
  • volume de données maîtrisé dans la VM et sur l'hyperviseur. (maxi = équivalent à la VM d'origine)

Avant de répondre au choix techniques, nous allons planifier le travail de mise en place du serveur primaire, du serveur secondaire et de la copie automatisée des données.

Comment faire ? Les choix techniques

Définition des besoins

  • le service doit être continu, ininterrompu
  • les données doivent être résistantes contre la perte de données

La solution vers laquelle nous nous orientons est une copie des données en temps réel vers un serveur secondaire.
Cependant, une question se pose : Quelle solution adopter ?

  • Sauvegarde complète, différentielle ou incrémentale ?
  • copie en temps réel et permanente ?

Comparatif

Les solutions les plus basiques sont la sauvegarde (plusieurs types différents) ou la réplication.

solution Temps réel Volume de données Complexité de restauration nécessite une interruption
sauvegarde : dump ou copie des fichiers non moyennement important quel que soit le type de SAV facile (sav complète ou différenteille) à complexe (sav incrémentale) Interruption le temps de l'arrêt du service et de l'extraction des données
copie complète ou snapshot de la VM originale non lourd, surtout si on conserve un historique régulier très facile, on remplace le serveur à moyen restauration de snapshot Interruption le temps de l'arrêt et la copie de la VM
réplication du SGBD oui lourd : on a un clone de la VM Aucune : simple bascule de serveur non, les données sont synchronisées en temps réel en permanence
Analyse

Les sauvegardes ne nous permettent pas d'avoir une réelle synchonicité entre la dernière sauvegarde et l'original.
On utilisera donc plustôt une technique de réplication en temps réel afin d'éviter les interruptions du service principal.
La réplication qui sera, elle, sauvegardée en fin de semaine afin de ne pas perturber le service en production. Cependant, durant la sauvegarde, le service n'est plus répliqué.

Il aurait été possible de :

  • faire des scripts de sauvegarde (dump sql ou copies brutes de fichiers) directement sur les données originales mais on a vu que ...
    • les dump prennent un peu de temps et le service serait indisponible à ce moment-là
    • les données risquent d'être incohérentes en raison de dump d'un table entre deux opérations de saisies.
  • effectuer des snapshot du serveur ww1 avec le même problème d'interruption.

(Bloc 3) : On notera que si le serveur principal ww1 est attaqué, le service s'effondre -> DoS

  • la réplication risque de répliquer les erreurs (corruption des données, chiffrement des données aussi répliqué …)
  • des données à saisir ne pourront plus l'être et on aura une perte d'activité durant l'interruption du service.

Second point, le serveur réplica pourrait aussi être attaqué. Donc il devra être également protégé.

Quels besoins pour le projet ?

La base applicative :

  1. Serveur de données mariaDB : c'est le cœur de la réplication de données entre deux serveurs de données. Donc c'est obligatoire
  2. Serveur apache+php +phpmyadmin : plutôt nécessaire pour pouvoir contrôler la réplication
  3. Application de test : pour … tester ? Ce serait bien, non ?

Les utilitaires de base :

  1. Serveur ftp : pourquoi pas ? ça permettra de faire des modifs de l'appli

  • sans devoir se connecter au net
  • transférer des fichiers directement sur le serveur.

  1. ssh : O-BLI-GA-TOIRE … ben oui, on pourra ainsi copier/coller des commandes au lieu de tout taper à la main et c'est plus réaliste par rapport à des serveurs distants (proxmox, sur le net, etc. …). Associé à putty, on va faire un malheur.
    Y configurer les accès root. Attention, en situation réelle, ne pas autoriser l'accès à ces services avec root, c'est une faille de sécurité importante. Mais pour nos tests, ça va nous simplifier la gestion.

Les utilitaires du serveur :

  1. apt : incontournable pour télécharger les paquets *
  2. wget : idem pour le téléchargement direct d'internet (wget \= web get) *
  3. unzip : pour dézipper les fichiers … zip

(*) configurer le proxy, si nécessaire

Alors? par quoi on commence ??

  • A : créer la VM www et la renommer en www1
  • B : créer la VM www2 par clone
  • C : mettre en place la réplication
  • D : faire le script de sauvegarde du réplica
  • E : test final

Étape A : créer la vm de base ww1 [1:40]

A1. Création de la VM de production : 50'

A11 : l'iso est à prendre dans le répertoire _VM/ISO/ ou à télécharger
A12 : Créer la VM (une carte réseau connectée par pont, au début 2048Mo de RAM (on metttra 512Mo plus tard), OS=debian 64bits)

  • Attention : cocher la case "skip unattended install" pour avoir tous les paramètres de config ! A13 : Installer l'OS en mode ligne de commande
    • clavier FR
    • nom de la machine : www ; pas de domaine
    • utilisateurs : mdp root/admin, administrateur/admin
    • partitionnement de base
    • pas de config réseau (on le fera manuellement plus loin)
    • pas d'autre support d'analyse (on configurera apt plus loin)

A2. Installer la plateforme logicielle : 60'

A21 : Configurer le réseau

  • placer la VM en connexion par pont
  • vérifier/modifier le fichier de config du réseau : /etc/network/interfaces, on doit être en dhcp pour l'instant.
  • si besoin : redémarrer le service réseau systemctl restart networking
    > puis démarrer l'interface enp0s3 : ifup enp0s3
  • vérifier l'adresse IP : ip a

A22 : Configurer apt

  • Vérifier ou modifier la config dans le fichier /etc/apt/source.list selon les informations du site officiel
  • Configurer le proxy pour apt (si besoin)
    > Créer le fichier vide /etc/apt/apt.conf.d/50proxy avec nano,
    > Y écrire les lignes :

[shell]
Acquire::http::proxy "http://10.129.254.254:3128/";
Acquire::https::proxy "http://10.129.254.254:3128/";

  • Mettre à jour les dépôts pour apt (pas plus d'une fois par semaine, svp.) :

[shell]
apt update  # mise à jour des paquets, maxi une fois par semaine
apt upgrade # mise à jour des logiciels installés, si besoin


A23 : Installer les logiciels utilitaires de base, supports :

  • installer les utilitaires : apt install ssh proftpd unzip
    • wget : (web get) pour le téléchargement direct d'internet
    • SSH : pour l'administration à distance
    • proftpd : pour la gestion des mises à jours de l'application
    • unzip : pour décompresser les fichiers zip

A24 : Configurer les logiciels utilitaires :

  • wget : mettre le proxy en place
  • configurer l'accès root à ssh et proftpd /!\ sécu

Logiciel Description Fichier ou Commande
wget modifier les lignes contenant yoyodine en mettant le bon proxy /etc/wgetrc
ssh ajouter PermitRootLogin yes dans le fichier /etc/ssh/sshd_config
ssh redémarrer le service ssh service ssh restart
proftpd dans le fichier des utilisateurs bannis, commenter root /etc/ftpusers
proftpd ajouter RootLogin on dans le fichier de configuration /etc/profstp/proftpd.conf
proftpd redémarrer le proftpd systemctl restart proftpd.service

A25 : Installer le service web avec apt : apache2, php, mariadb-server et phpmyadmin

  • durant l'installation, autoriser phpmyadmin avec apache et mettre le mot de passe de mariaDB (admin)
  • configurer le service mariadb avec la commande mysql -u root
    • Ajouter le mot de passe pour root dans mariadb
      > vérif avec : select host, user, password from mysql.user ;
      > alter user root@localhost identified by "nouveau mdp" ;
      > recharger les privilèges : flush privileges ;

A26 : Important !! : faire un export du serveur web vide

A3. Installation de l'appli : 15'

A31 : Télécharger l'application 5' =

A32 : Installer l'application de test (dézipper, déplacer le répertoire dans /var/www/html): 5' =

  • unzip du fichier téléchargé puis déplacement du fichier vers le répertoire /var/www/html
  • changer le propriétaire : chown www-data -R /var/www/html/applitest
  • changer les droits (rwx) : chmod 755 -R /var/www/html/applitest

A33 : Configurer l'application de test et la tester : 10' =

  • mettre la VM en connexion par pont si ce n'est pas fait au début
  • redémarrer le service networking
  • démarrer l'interface enp0s3 : ifup enp0s3
  • vérifier l'adresse IP : ip a
  • se connecter avec le navigateur hôte à l'application 192…/applitest
  • tester l'appli

A4. Sauvegarde : 10'

  • Faire un export du server web prêt à être utilisé
  • Renommer la vm en ww1 et redémarrer

A5. Déploiement : 5'

  • Relever l'adresse IP de www1
  • Mise en production de www1, test d'accessibilité.

Étape B : créer le réplica ww2 [0:30]

B1. Créer la VM www2 par importation ou clone de www1 : 15'

  • [vbox] restaurer la VM de base en changeant son nom et l'adresse MAC des cartes réseau,
  • ou [vbox] cloner la VM de base en changeant son nom en www2,
  • Démarrer, renommer la vm en ww2 et redémarrer.

B2. Configuration de ww2 : 10'

  • (re) configurer proftpd : changer le nom du serveur puis redémarrer proftpd
  • tester la VM

B3. Déploiement : 5'

  • mise en production, relevé de son adresse IP et tests d'accessibilité

Fin vers [10:35]

Étape C : créer la réplication [2:00]

C2 Configuration du master (ww1) C3 Configuration de l'esclave C4 Test final de l'installation 15'

Réplication Master/Slave

C1. Formation réplication : 60'

Consulter les sites suivants pour vous autoformer à la réplication Master/Slave :

  • https://www.inrage.fr/blog/creer-serveur-mysql-replication-slave-des-donnees-master
  • https://cloudinfrastructureservices.co.uk/setup-mariadb-replication/
  • https://woshub.com/configure-mariadb-replication/
  • https://mariadb.com/kb/en/setting-up-replication/

C2. Configuration www1 en master : 20'
C3. Configuration www2 en esclave : 15'
C4. Test final de la réplication: 20'

  • Connexion aux deux VM via le navigateur hôte et les adresses IP
  • Effectuer une saisie sur ww1 et vérifier qu'elle est enregistrée sur ww2

Ne pas faire de modif dans www2 ou la réplication sera désynchronisée. Il faudra alors changer plusieurs paramètres dans les VM et redémarrer la réplication.

Étape D : sauvegarde du réplica

D1. Formation script Shell et mysql en LC (120')

  • rédiger l'algorithme du script de sauvegarde
  • déterminer les commandes nécessaires et s'y former
  • voir comment automatiser des scripts dans Linux

D2. Rédaction du script (60')

  • traduction en shell Linux

D3. Test manuel du script (10')
D4. Déploiement et test d'automatisation (20')

Tableau des tâches

Légende :
Charge humaine des processus des tâches :

  • auto = pas d'intervention après le lancement de la commande
  • 1/2 auto = quelques paramètres à renseigner durant le processus. Nécessite un peu d'attention durant le processus mais il est possible de faire une activité en parallèle
  • autre = processus manuel totalement interactif

Légende des couleurs des tâches :

  • A. Rouge [110'] : Créer la VM Debian de base puis ajouter les outils et le serveur http (amp). Export debian de base
  • A. Orange [45']: Installer l'application de test. Conserver un master de cette VM pour usage futur. Export serveur www
  • B. Jaune [35'] : Création du réplica par restauration d'une VM
  • C. vert [75'] : Configuration de la réplication Master-Slave. Risques de débordement ici.
  • D. bleu [150'] : Création et automatisation de la sauvegarde du réplica

Autres indications :

  • bleu ciel : tests unitaires (A4 et B3) et tests d'intégration (C4 et D4)
  • [vbox] : tâche effectuée dasn virtual box. Le reste est fait dans les VM. (Truc : utiliser Putty tant que possible).

Légende des couleurs de l'avancement :

vert \= avance, bleu \= dans les temps, rouge \= retard

Tableau d'avancement à compléter
Tâche Description Durée Antécédent Avancement
Lecture du contexte et de la feuille de mission 20'
A1 [vbox] Création de la VM de production (sav=2') 50' début
A11 : télécharger l'OS (ou iso déjà présente dans le dossier _VM/ISO/) 0' auto début
A12 : Créer la VM dans Virtualbox 10' début
A13 : Installer l'OS 40' 1/2 auto A12,A11
A2 Installer la plateforme logicielle 60' A1
A21 : configurer le réseau /etc/network/interfaces 10' A13
A22 : Configurer apt (proxy, sources.list) 10' A21
A23 : Installer les logiciels support 5' auto A22
A24 : Configurer wget, ssh et proftpd 15' A23
A25 : Installer le service web (AMP) 5' auto A22
A26 : Export 1 VM de base. Arrêter la VM, l'exporter puis la redémarrer. 10' A25
A3 Installation de l'appli 20' A2
A31 : téléchargement 3' A26
A32 : installer l'appli 5' A31
A33 : configurer et tester l'appli 10' A32
A4 [vbox] Sauvegarde/export de la VM 20' A3
A41 : Export 2 VM www. Exporter la VM. 10' auto A33
A42 : Renommer la VM, redémarrer 10' A41
A5 Déploiement ww1 (tests) 5' A4
B1 [vbox] Créer la VM de réplica 20' A5
B11 : Importer le master www, renommé en ww2 10' auto A5
B12 : renommer la VM, redémarrer 10' B11
B2 Configuration de ww2 10' B1
B3 Déploiement ww2 5' B2
C1 Autoformation à la réplication mariadb env. 60'
C2 Configuration du master (ww1)
 
 
 
 
 
 
C3 Configuration de l'esclave
 
 
 
C4 Tests de la réplication (risques de pbms ici). env. 15'
C41 : Connexion aux deux VM via le navigateur hôte et les adresses IP
C42 : Modifications de données dans www1 puis vérif dans www2
D1 Formation Shell et scripting mysql env. 60'
D11 : Rédiger l'algorithme du script de sauvegarde 0', cf. +bas
D12 : Déterminer les commandes nécessaires et s'y former
D13 : voir comment automatiser des scripts dans Linux
D2 Rédaction du script env. 60'
D3 Automatisation du script 10'
D4 Tests d'intégration finaux et déploiement. Fin du projet. 20'

Travail à faire

Jour 1

  1. Compléter le tableau en détaillant les sous-tâches de création de la réplication à partir de votre formation
  2. Détermination des antécédents pour chaque tâche
  3. Réalisation du diagramme de Gantt du projet

Jour 2

  1. Réalisation du projet avec suivi de l'avancement des tâches
  2. Compte rendu du projet : évolution, explications tâche par tâche.

Le suivi sera une charge additionnelle de l'ordre de 10' à 15' par tâche.
Attention, vous effectuerez bien les exports afin de pouvoir conserver des masters de machines virtuelles prêts à être restaurés et ainsi diminuer le temps d'installation.

Remarque : Les exports permettent de constituer votre propre bibliothèque de VM à utiliser durant les exam de l'an prochain !

Jour 3, formation shell

Algorithme de sauvegarde à implanter sur le serveur réplica ww2 dans le fichier /root/savMariaDB.sh :

Début du script  
  Définir le nom du fichier %log%  
  Si le fichier %log% n'existe pas, le créer  
  Définir le nom du fichier dump %fname% (contient : nom base, date et heure)  
  Définir le nom du répertoire de sauvegarde %dir\_sav%  
  Écrire une ligne dans %log% : début sauvegarde …  
  Si %dir\_sav% n'existe pas, le créer et écrire une ligne dans %log%  
  Suspendre la réplication  
  si erreur, écrire un message dans %log% et interrompre le script  
  sinon écrire le message "réplication suspendue le jj/mm/aaa à HH:ss" dans %log%  
 
  Effectuer le dump de la base de données   
  si erreur, écrire un message dans %log% et interrompre le script  
  sinon écrire le message "dump %fname% effectué le jj/mm/aaa à HH:ss" dans %log%  
 
  Reprendre la réplication  
  si erreur, écrire un message %log% et interrompre le script  
  sinon écrire le message "réplication reprise le jj/mm/aaa à HH:ss" dans %log%  
 
  Copier le fichier dump vers l'espace de sauvegarde  
  si erreur, écrire un message dans %log%  
  sinon écrire le message "dump %fname% copié le jj/mm/aaa à HH:ss" dans %log%  
Fin du script

  1. Pour cette date, utiliser l'algorithme précédent pour vous former sur les commandes shell à utiliser

Liste de quelques commandes Shell ou SQL utiles
Commande
stop slave Arrêter la synchronisation
start slave Démarrer la synchronisation
mysqldump atelier -u root -padmin faire un dump d'une base de donnée
mysql -uroot -padmin -??? Lancer une requête sur le serveur
mv dumpFile.sql /usr/save/ Déplacer un fichier vers un répertoire
Create user 'nom'@'serveur' identified by 'mot_de_passe' ; Créer un utilisateur
create database 'nom' ; créer une base de données
grant all privileges on 'serveur'.'base' to 'nom'@'serveur' identified by 'mot_de_passe' with grant option; créer un accès avec tous les privilèges à un utilisateur sur une base de données nommée, avec la possibilité de modifier les privilèges.