blog
l’infrastructure haute dispo vue par Nexylan

l’infrastructure haute dispo vue par Nexylan

Chez Nexylan, la haute disponibilité est au toujours coeur de la réflexion dès la création d’un projet d’hébergement, quel qu’il soit.

Notre équipe build vous explique la conception des infrastructures très haute disponibilité au quotidien.

Au programme :

1. Le load-balancing via Nginx
  • 2. La synchronisation de fichiers avec Lsyncd
  • 3. Garantir une sauvegarde de données via PRA et PCA

1- Le load-balancing avec Nginx

Qu’est ce que le load-balancing ?

Le load-balancing (répartition de charge) désigne le processus qui permet de répartir des requêtes sur un ensemble de serveurs. Cela nous permet en premier lieu d’avoir une répartition égale de la charge sur plusieurs machines mais également d’assurer une haute disponibilité en cas de défaillance d’un nœud.

Qu’est ce que Nginx ?

Nginx est le service de load-balancing que nous utilisons le plus fréquemment chez Nexylan. C’est un serveur web open source modulaire qui nous permet d’assurer cette fonction sur nos infrastructures clientes. Nous allons plus particulièrement nous intéresser au module Upstream utilisé pour déclarer un ensemble de serveurs dans la configuration.

Cas concret et exemple d’utilisation et configuration

Ci-après un exemple de configuration permettant de déclarer plusieurs machines en backend pour répartir les requêtes :

upstream backend {
    ip_hash;
    # Permet une persistance de session 
    server backend1.nexylan.com;
    server backend2.nexylan.com;
    # Déclaration des 2 serveurs backend
    server pra.nexylan.com:8080   backup;
    # Déclaration du serveur de serveur en cas de défaillance
}

server {
    location / {
        proxy_pass <http://backend>;
    }
}

Grâce à cet exemple de configuration simpliste, nous venons de voir une fonction essentielle des architectures clientes complexes.

2- Synchronisation de fichiers avec Lsyncd

Qu’est ce que Lsyncd ?

Lsyncd est un service permettant la synchronisation d’un ou plusieurs dossiers afin de garder à jour les configurations et fichiers entre plusieurs serveurs. Lsyncd est disponible sur tout host Linux, directement dans votre gestionnaire de paquets.

Comment fonctionne Lsyncd ?

Lsyncd tire sa configuration d’un fichier déposé après l’installation. Sous CentOS, on retrouve le fichier dans le dossier /etc/lsyncd.conf. 

Dans ce fichier de configuration, il nous faut définir plusieurs paramètres : destination de la synchronisation, source et paramètres à propos de celle-ci. 

Lsyncd nous permet également, via sa configuration d’exécuter un script et des commandes spécifiques après une synchronisation.

Cas concret et exemple d’utilisation et configuration

Prenons maintenant l’exemple de la mise en place d’un PRA. Nous avons besoin que les fichiers de l’hébergement soient synchronisés à chaque modification vers le serveur PRA.

Commençons par mettre en place du log et des options utiles :

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status",
        pidfile = "/run/lsyncd.pid",
        nodaemon = false
}

Maintenant passons à la synchronisation :

sync {
                default.rsyncssh,
                source = "/var/www/hosting.tld/htdocs/",
                targetdir = "/var/www/hosting.tld/htdocs/",
                host = 1.2.3.4,
                rsync = {
                        archive = true,
                        perms = true,
                        compress = false,
                        cvs_exclude = true
                },
                delay = 5, -- We want to delay the syncing for 5 seconds so we queue up the events

Il est également possible de spécifier un port SSH personnalisé :

ssh = {
       port = 2122
                }

Ou encore de retirer certains dossiers de la synchronisation :

sync {
	XXX
		excludeFrom = "/etc/lsyncd/exclude",
	XXX
                }

Et d’exécuter un script personnalisé après la synchronisation :

rsync = {
		binary = "/etc/lsyncd/script.sh",
	XXX
	},

Avec ces différentes configurations vous pouvez maintenant réaliser une synchronisation entre deux serveurs de fichiers. Nous venons de voir, via la mise en place d’une configuration simple, comment mettre en place une des composantes d’un PRA, la synchronisation de fichiers d’un vhost et de configuration de services.

Il est bien sûr possible d’aller plus loin avec Lsyncd et de définir des scripts personnalisés à exécuter lors de certaines actions de synchronisation, pour, par exemple, relancer Nginx lors de la modification de ses vhosts.

3- Garantir une sauvegarde de données via PRA et PCA

Qu’est-ce qu’un PRA ?

Le PRA (Plan de Reprise d’Activité) permet d’avoir une copie des sites de production sur un autre serveur.

Fonctionnement du PRA

Le serveur hébergeant de la production envoie de manière instantanée toutes les créations, suppressions et modifications de fichiers. Les fichiers composant le site sont donc constamment à jour sur le PRA. Concernant la base de données, une réplication master/slave est mise en place entre production et PRA. Un délai de réplication est volontairement défini, en accord avec le client, afin que les modifications ne soient pas reportées directement sur le PRA. Ce delta permet de garder un PRA fonctionnel et de ne pas répliquer une potentielle erreur qui viendrait casser le PRA en même temps que la production.

Les fichiers de configuration PHP ainsi que ceux du serveur web (Apache, Nginx…) sont également répliqués pour que toutes modifications soient reportées sur le PRA.

Lorsque nos clients prennent la décision de basculer sur le PRA, une modification DNS manuelle est nécessaire afin de faire pointer le site sur le serveur de secours.

Qu’est-ce qu’un PCA ?

Un PCA (Plan de Continuité d’Activité) permet, tout comme le PRA, d’avoir un serveur de secours sur lesquels sont répliqués les sites web.

La différence entre PRA et PCA est que le PCA n’a pas besoin d’intervention manuelle pour prendre le relai contrairement au PRA.

Vous souhaitez en savoir plus ?

Pour toutes questions, n’hésitez pas à contacter nos équipes.