[spip-dev] Load Balancing & Sessions Spip

Hello,

Dans le cas d'une utilisation d'un site spip déployé dans un
environnement load balancé, derrière un round robin par exemple, on perd
les infos de sessions spip, écrites dans un fichier
_DIR_SESSION."session_(id_auteur)_...php3".

Une possibilité est d'ouvrir par exemple un NFS sur une des 2 machines
afin d'écrire et lire au même endroit, qu'on passe lors d'un appel de
nouvelle page du serveur A au serveur B.

Hors cela n'est pas forcement ce qui est le plus simple pour un
administrateur et pour les contraintes de sécurités.

Dans ce genre de configuration pourtant une chose reste commune aux 2
serveurs, le serveur de BDD. Aussi il est simple d'utiliser ce serveur SQL.
voici une modification du fichier inc_session.php3 permettant cet ajout.

la table a ajouter a spip est:

CREATE TABLE `spip_sessions` (
  `nom` VARCHAR( 255 ) NOT NULL ,
  `contenu` BLOB NOT NULL,
  `date` timestamp(14) NOT NULL
);

Alex

ps: sorry Pan n'inclue pas le add file..

<?php
//
// Ce fichier ne sera execute qu'une fois
if (defined("_ECRIRE_INC_SESSION")) return;
define("_ECRIRE_INC_SESSION", "1");

/*
* Gestion de l'authentification par sessions
* a utiliser pour valider l'acces (bloquant)
* ou pour reconnaitre un utilisateur (non bloquant)

Pour être propre, la gestion des sessions doit pouvoir être paramétrable. Comme le sont les sessions natives de PHP.
Le stockage fichier (comme le propose Spip par défaut), le stockage SQL (comme le propose Alexandre), ou même le stockage en RAM, par ce que passer son temps à lire et écrire des données que l'on ne veut pas conservé, bof bof, la RAM est faite pour ça.
Certains utilisateurs, plutot leur hebregeur, ont la base SQL mutualisé qui pleure, si on rajoute les sessions dessus, ça va devenir intenable. Donc, il faudrait un choix.

Alexandre Hélias [LNG] a écrit :

Hello,

Dans le cas d'une utilisation d'un site spip déployé dans un
environnement load balancé, derrière un round robin par exemple, on perd
les infos de sessions spip, écrites dans un fichier
_DIR_SESSION."session_(id_auteur)_...php3".

si le repartiteur gère les sticky connection, ça passe. Les utilisateurs sont repartis sur les machines, mais la garde au sein d'une session.

Une possibilité est d'ouvrir par exemple un NFS sur une des 2 machines
afin d'écrire et lire au même endroit, qu'on passe lors d'un appel de
nouvelle page du serveur A au serveur B.

avec le NFS, si une machine tombe, tout le cluster tombe.

Il y aussi le problèmes des locks, des caches que l'on doit flusher sur tous les noeuds. Il faut aussi gerer tout ce qui est upload (et effacement).

Il faut ensuite gérer le crash d'un noeud, et sa synchro quand on le remet en place. Sans interrompre le service, si possible, ou au moins en minimisant la gène.
A quand un spip-cluster?

Pour être propre, la gestion des sessions doit pouvoir être
paramétrable. Comme le sont les sessions natives de PHP.

Oui

Le stockage fichier (comme le propose Spip par défaut), le stockage SQL
(comme le propose Alexandre), ou même le stockage en RAM, par ce que
passer son temps à lire et écrire des données que l'on ne veut pas
conservé, bof bof, la RAM est faite pour ça.

Ben non, car si tu montes en RAM, tu n'auras l'information que du côté
d'un seul client. Ta solution n'est intéressante qu'avec un cluster
MysqL 5 qui partage la RAM , mais j'ai pas encore compris comment ils
font.

Certains utilisateurs, plutot leur hebregeur, ont la base SQL mutualisé
qui pleure, si on rajoute les sessions dessus, ça va devenir intenable.
Donc, il faudrait un choix.

Ben oui .... Tiens, j'ai mis du temps à voir que tu écrivais AUSSI dans
le mail, je continue :

si le repartiteur gère les sticky connection, ça passe. Les utilisateurs
sont repartis sur les machines, mais la garde au sein d'une session.

Je suis d'accord sur ce point. On parle généralement dans le cas de
loadbalancing de persistance de session. Cela est permis avec
LVS/Keepalived, avec Resonate Central Dispatch mais pas avec le DNS
RoundRobbing qui n'a qu'une gestion de poids. Dans le cas de RR, le
mieux est de faire un simulacre de failover avec un poids 1 sur la
machine qui reçoit tout le flux, un poids 10 sur l'autre. Ca c'est la
théorie. Des benchs effectués il y a peu montrent qu'en fait ca ne
marche pas, cela est trop dépendant des versions de binds sur internet,
qui gère ou pas suivant les versions le champs poids.

>Une possibilité est d'ouvrir par exemple un NFS sur une des 2 machines
>afin d'écrire et lire au même endroit, qu'on passe lors d'un appel de
>nouvelle page du serveur A au serveur B.
>
>
avec le NFS, si une machine tombe, tout le cluster tombe.

Personnellement je trouve la remarque curieuse. Effectivement, dans le cas d'une DocumentRoot partagées (montage NFS), je n'ai jamais vu de problème avec spip. Effectivement si le serveur nfs tombe il n'y a plus rien mais généralement on est suffisamment intelligent pour mettre une machine la plus sécurisée possible, avec un maximum de redondance. Par ailleurs, rien n'empêche de loadbalancer le NFS avec un failover par exemple.

Il y aussi le problèmes des locks, des caches que l'on doit flusher sur
tous les noeuds. Il faut aussi gerer tout ce qui est upload (et effacement).

Ben oui mais là encore ca dépends de ta solution NFS. Prends un simple
serveur NFS linux, l'implémentation est relativement foireuse côté
serveur, et là oui tu peux avoir des locks. Prends un serveur Nettapp
(ah oui mais c'est pas le même prix), tu n'a plus ce problème, en r ni
en w. Prends un serveur SGI, tu n'a plus de problème en r donc c'est
bien pour un site web mais tu en as plein de w, ca chie pour tes
sessions. Il convient donc de bien analyser la situation AVANT le
passage en prod.

Il faut ensuite gérer le crash d'un noeud, et sa synchro quand on le
remet en place. Sans interrompre le service, si possible, ou au moins en
minimisant la gène.
A quand un spip-cluster?

Aucun intérêt d'un spip-cluster. Quand tu loadbalance (avec autre chose
que du RR bien sûr), tu as le choix de remettre le client quand tu le
souhaites. Si les docroot sont sur un seul client, un simple rsync
suffit. C'en est de même quand tu as des serveurs NFS loadbalancés.

>Hors cela n'est pas forcement ce qui est le plus simple pour un
>administrateur et pour les contraintes de sécurités.

A partir du moment où on choisi de loadbalcner une architecture web,
c'est qu'on cherche la sécurisation en terme de disponibilité. Or il est
clair qu'à partir de là, il faut aussi loadbalancer le loadbalanceur,
sinon ca sers à rien. Partant de là, on arrive très vite à une
architecture complexe, où il faut s'attarder sur les redondances utiles
et inutiles, (machine/alim/réseau/backbone/bâtiment/autre) , sur la
sécurisation des données (en terme d'accès, sauvegarde, réplication,
accès du personnel), sécurité des dégradations volontaires ou pas
(protection de l'internet, protection de l'intranet, réflexion sur les
accès privilégiés des administrateurs) etc etc.

Pour en revenir au sujet initial, je n'ai jusqu'à présent pas vu de
difficultés particulière avec des SPIPS loadbalancés sur
- LVS/Keepalived
- docroot nfs linux
- 2 clients avec persistence de session et gestion de poids

Quelqu'un pour confirmer ou infirmer ?
Merci.

DaffyDuke a écrit :

Pour être propre, la gestion des sessions doit pouvoir être paramétrable. Comme le sont les sessions natives de PHP.
   
Oui

Le stockage fichier (comme le propose Spip par défaut), le stockage SQL (comme le propose Alexandre), ou même le stockage en RAM, par ce que passer son temps à lire et écrire des données que l'on ne veut pas conservé, bof bof, la RAM est faite pour ça.
   
Ben non, car si tu montes en RAM, tu n'auras l'information que du côté
d'un seul client. Ta solution n'est intéressante qu'avec un cluster
MysqL 5 qui partage la RAM , mais j'ai pas encore compris comment ils
font.

Je pensais à memcached (memcached - a distributed memory object caching system) qui propose une table de hashage en RAM disponible simplement via le resau. Ca gère aussi la réplication.

Certains utilisateurs, plutot leur hebregeur, ont la base SQL mutualisé qui pleure, si on rajoute les sessions dessus, ça va devenir intenable. Donc, il faudrait un choix.
   
Ben oui .... Tiens, j'ai mis du temps à voir que tu écrivais AUSSI dans
le mail, je continue :

heing?

si le repartiteur gère les sticky connection, ça passe. Les utilisateurs sont repartis sur les machines, mais la garde au sein d'une session.
   
Je suis d'accord sur ce point. On parle généralement dans le cas de
loadbalancing de persistance de session. Cela est permis avec
LVS/Keepalived, avec Resonate Central Dispatch mais pas avec le DNS
RoundRobbing qui n'a qu'une gestion de poids. Dans le cas de RR, le
mieux est de faire un simulacre de failover avec un poids 1 sur la
machine qui reçoit tout le flux, un poids 10 sur l'autre. Ca c'est la
théorie. Des benchs effectués il y a peu montrent qu'en fait ca ne
marche pas, cela est trop dépendant des versions de binds sur internet,
qui gère ou pas suivant les versions le champs poids.

Une possibilité est d'ouvrir par exemple un NFS sur une des 2 machines
afin d'écrire et lire au même endroit, qu'on passe lors d'un appel de
nouvelle page du serveur A au serveur B.

avec le NFS, si une machine tombe, tout le cluster tombe.
   
Personnellement je trouve la remarque curieuse. Effectivement, dans le cas d'une DocumentRoot partagées (montage NFS), je n'ai jamais vu de problème avec spip. Effectivement si le serveur nfs tombe il n'y a plus rien mais généralement on est suffisamment intelligent pour mettre une machine la plus sécurisée possible, avec un maximum de redondance. Par ailleurs, rien n'empêche de loadbalancer le NFS avec un failover par exemple.

Alexandre parlait d'un NFS d'une machine du cluster vers l'autre, pas d'un serveur commun. Personnelement, j'aime pas l'idée d'un filer dans un cluster, surtout que le web, c'est une majorité de lecture, pour un petit peu d'écriture. Je parle de contenu, pas de cache. si tu commences à redonder les serveurs web, puis ton NFS derrière, tu arrives à 4 machines, + le SQL. Mis à part si tu veux refaire slashdot en Spip, je pense que le cluster pour Spip, c'est plutot pour la tolérance de panne.

Il y aussi le problèmes des locks, des caches que l'on doit flusher sur tous les noeuds. Il faut aussi gerer tout ce qui est upload (et effacement).
   
Ben oui mais là encore ca dépends de ta solution NFS. Prends un simple
serveur NFS linux, l'implémentation est relativement foireuse côté
serveur, et là oui tu peux avoir des locks. Prends un serveur Nettapp
(ah oui mais c'est pas le même prix), tu n'a plus ce problème, en r ni
en w. Prends un serveur SGI, tu n'a plus de problème en r donc c'est
bien pour un site web mais tu en as plein de w, ca chie pour tes
sessions. Il convient donc de bien analyser la situation AVANT le
passage en prod.

je parlais des locks/cache/flush de Spip. J'aime pas NFS, d'ailleur, mais c'est plus par ignorance.

Il faut ensuite gérer le crash d'un noeud, et sa synchro quand on le remet en place. Sans interrompre le service, si possible, ou au moins en minimisant la gène.
A quand un spip-cluster?
   
Aucun intérêt d'un spip-cluster. Quand tu loadbalance (avec autre chose
que du RR bien sûr), tu as le choix de remettre le client quand tu le
souhaites. Si les docroot sont sur un seul client, un simple rsync
suffit. C'en est de même quand tu as des serveurs NFS loadbalancés.

non, je veux un cluster SIMPLE. 2 web, 1 SQL. Donc, pas de docroot commun, pas de rsync, pas de NFS.
Quand tu remets ton serveur qui est tombé, il suffit d'appuyer sur le bouton magique qui empeche Spip d'uploader du contenu, tu fais ton rysnc over ssh ou avec rsyncd, et ensuite tu dévérouilles.

Hors cela n'est pas forcement ce qui est le plus simple pour un
administrateur et pour les contraintes de sécurités.
     
A partir du moment où on choisi de loadbalcner une architecture web,
c'est qu'on cherche la sécurisation en terme de disponibilité. Or il est
clair qu'à partir de là, il faut aussi loadbalancer le loadbalanceur,
sinon ca sers à rien. Partant de là, on arrive très vite à une
architecture complexe, où il faut s'attarder sur les redondances utiles
et inutiles, (machine/alim/réseau/backbone/bâtiment/autre) , sur la
sécurisation des données (en terme d'accès, sauvegarde, réplication,
accès du personnel), sécurité des dégradations volontaires ou pas
(protection de l'internet, protection de l'intranet, réflexion sur les
accès privilégiés des administrateurs) etc etc.

je sais pas, certains site de prestige et de forte fréquentation donne des infos sur leur architecture, qui reste simple, et certains points peuvent être considéré comme moins fragile, comme un routeur hard, sans disque dur.
Il y a l'autre solution un peu violente qui consiste à mettre deux machines synchronisés, mais qu'une seule bosse, avec un lien hearthbeat (null modem + ethernet par exemple), et quand le frontal meurt, le secondaire fait un arpspoof pour piquer l'adresse IP.

Pour en revenir au sujet initial, je n'ai jusqu'à présent pas vu de
difficultés particulière avec des SPIPS loadbalancés sur
- LVS/Keepalived
- docroot nfs linux
- 2 clients avec persistence de session et gestion de poids

Quelqu'un pour confirmer ou infirmer ?
Merci.

M.

Nous uitilisons sur 2 sites un plan inspiré du plan de EVA.
Sur un des sites en 1.8 b2 : http://filloux.u-bourgogne.fr/edf/ le plan
fonctionne.
Sur l'autre : http://filloux.u-bourgogne.fr/crdp/ en version cvs du
04/01/2004 le plan ne fonctionne pas j'ai mis à jour avec la version cvs du
09/01 mais il y a le même message d'erreur : Fatal error: Call to undefined
function: afficher_script_layer() in /var/www/html/crdp/inc-public.php3(111)
: eval()'d code on line 40
J'avoue que cela dépasse mes compétences; si quelqu'un a une idée ?
Merci
Laurent Casagrande
CRDP de Bourgogne

Cette fonction qui calculait toujours la même chose a été remplacée par la constante $browser_layer.
Elle n'était pas documentée mais visiblement les squelettes que tu utilises l'appelent directement.
Il faut remplacer son appel par "echo $browser_layer".
Je soupconne le site qui "marche" de ne le devoir qu'à son cache, c'est-à-dire pour peu de temps.

      Emmanuel

Quand le serveur SQL est inaccessible, Spip pleure quoiqu'il arrive.

function: afficher_script_layer() in /var/www/html/crdp/inc-public.php3(111)
: eval()'d code on line 40

Cette fonction qui calculait toujours la même chose a été remplacée par la constante $browser_layer.
Elle n'était pas documentée mais visiblement les squelettes que tu utilises l'appelent directement.

Je l'utilisais notamment dans une vieille contrib assez souvent reprise il me semble : Une arborescence dynamique et contextuelle - SPIP-Contrib

Il y a ça dans le squelette :

---8<----------------------------------------------------------
// inclusion du script de gestion des layers de SPIP
$flag_ecrire = false;
include 'ecrire/inc_layer.php3';
afficher_script_layer();
---8<----------------------------------------------------------

-Nicolas

Puisque c'est déjà en contrib, j'ai mis dans la CVS une définition équivalente (aussi pour test_layer), mais ça n'aide pas à l'allègement du code.

      Emmanuel

Je l'utilisais notamment dans une vieille contrib [...]

Puisque c'est déjà en contrib, j'ai mis dans la CVS une définition équivalente (aussi pour test_layer), mais ça n'aide pas à l'allègement du code.

Je veux bien proposer une nouvelle version de la contrib avec la variable plutôt que la fonction, surtout si ça permet d'améliorer le code ! :wink:

-Nicolas

Merci pour vos précisions et solutions, en remplaçant la fonction
afficher_script_layer() par la constante $browser_layer le plan fonctionne
normalement.
Mais uniquement sur la version cvs car pour la version 1.8 b2 il faut
laisser la fonction. Si je remplace par la constante, le plan ne se déplie
plus.

Laurent Casagrande
CRDP de Bourgogne

Laurent Casagrande a écrit :

Merci pour vos précisions et solutions, en remplaçant la fonction
afficher_script_layer() par la constante $browser_layer le plan fonctionne
normalement.
Mais uniquement sur la version cvs car pour la version 1.8 b2 il faut
laisser la fonction. Si je remplace par la constante, le plan ne se déplie
plus.

je pense que toutes les contrib de menu dépliant sont à revoir pour la CVS
un grand nombre d'utilsateur de squelette type EVA va être surpris lors de la mise à jour en 1.8

je ne sais pas si les developpeurs d'EVA et les autres ont vu le pb

A+

J'ai déjà dit que j'avais complété la CVS pour que ça ne se reproduise pas.

      Emmanuel

Et qu'est-ce qui t'emêche de loadbalancer le serveur SQL ?

>
Je pensais à memcached (memcached - a distributed memory object caching system) qui propose une
table de hashage en RAM disponible simplement via le resau. Ca gère
aussi la réplication.

Waw, ah oui, fallait quye je teste ce machin là.

>Ben oui .... Tiens, j'ai mis du temps à voir que tu écrivais AUSSI dans
>le mail, je continue :
heing?

Bah c'est pas toi alors, j'ai pas répondu au bon mail ptêt, désolé.

Alexandre parlait d'un NFS d'une machine du cluster vers l'autre, pas
d'un serveur commun. Personnelement, j'aime pas l'idée d'un filer dans
un cluster, surtout que le web, c'est une majorité de lecture, pour un
petit peu d'écriture. Je parle de contenu, pas de cache. si tu commences
à redonder les serveurs web, puis ton NFS derrière, tu arrives à 4
machines, + le SQL. Mis à part si tu veux refaire slashdot en Spip, je
pense que le cluster pour Spip, c'est plutot pour la tolérance de panne.

Oui, je parlais bien tolérance de panne, avec un truc du style :

lb1 lb2
    \ /
    / \
web1 web2 -- (nfs ou pas) --repli
  > >
   \ /
    sql---repli

Avec un cluster mysql 5, tu pourras croiser aussi le sql aussi car la
répli à chaud temps réelle dans les deux sens est permise, je me demande
bien comment il gère les update/inserts mais ils annoncent ca comme
possible.

Si tu as effectivement une session qui n'est pas commune en nfs, il va
te falloir poser ton id de session ailleurs. Dans la bdd, c'est une
mauvaise idée à mon avis. Dans un cookie de session, pourquoi pas.
Après, une simple persistance au niveau du lb peut suffire, à condition
qu'il n'y ait pas de vol possible. Il en va de même pour le cookie.

je parlais des locks/cache/flush de Spip. J'aime pas NFS, d'ailleur,
mais c'est plus par ignorance.

Les locks de spip sont à peu prêt les mêmes qu'en nfs dans le sens ou ,
en nfs aussi, tu peux locker un fichier depuis un client, qui n'est pas
vu de l'autre. La différence est qu'un lock spip est plus facile a
enlever qu'un lock nfs :slight_smile:

non, je veux un cluster SIMPLE. 2 web, 1 SQL. Donc, pas de docroot
commun, pas de rsync, pas de NFS.
Quand tu remets ton serveur qui est tombé, il suffit d'appuyer sur le
bouton magique qui empeche Spip d'uploader du contenu, tu fais ton rysnc
over ssh ou avec rsyncd, et ensuite tu dévérouilles.

Mouai. L'autre cas simple, mais pas très secure , c'est le nfs croisé en
failover. web2 monte la docroot de web1. La docroot de web1 se
synchronise dans un répertoire prévu à cet effet. En cas de crash,
suffit de heartbeater le point de montage.
La même manip est à faire sur l'autre web bien sûr.

Mais dans le cas que tu évoques, oui, il manque quelque chose à spip ...

je sais pas, certains site de prestige et de forte fréquentation donne
des infos sur leur architecture, qui reste simple, et certains points
peuvent être considéré comme moins fragile, comme un routeur hard, sans
disque dur.

Oui et non. Un routeur et un switch, ca se redonde aussi. En fait, quand
on veut bien faire, on peut tout redonder (même les humains, private
joke avec Pif :-))

Il y a l'autre solution un peu violente qui consiste à mettre deux
machines synchronisés, mais qu'une seule bosse, avec un lien hearthbeat
(null modem + ethernet par exemple), et quand le frontal meurt, le
secondaire fait un arpspoof pour piquer l'adresse IP.

Ben oui, mais non. Généralement c'est plus le maître du noeud qui envoie
un gratuitous arp packet auprès du lien réseau (firewall/autre) qui le
relie à internet. Après, le maître du noeaud n'a pas à apprendre de
nouveau client, simplement il doit avoir une technique pour savoir que
le client en question est vivant ou pas (keepalived sur le lb si LVS,
cdagent sur le client si Resonate)

Bon le principal est qu'on est tombé d'accord sur ton point de vue
concernant un manque de SPIP, mais pas sur la solution :slight_smile:

DaffyDuke a écrit :

Je pensais à memcached (memcached - a distributed memory object caching system) qui propose une table de hashage en RAM disponible simplement via le resau. Ca gère aussi la réplication.
   
Waw, ah oui, fallait quye je teste ce machin là.

C'est beau, c'est simple, c'est fiable, c'est utilisé sur des sites énormes, avec le prix de la RAM actuel, on peut faire un serveur de 2Go et le gaver comme un goret.

Alexandre parlait d'un NFS d'une machine du cluster vers l'autre, pas d'un serveur commun. Personnelement, j'aime pas l'idée d'un filer dans un cluster, surtout que le web, c'est une majorité de lecture, pour un petit peu d'écriture. Je parle de contenu, pas de cache. si tu commences à redonder les serveurs web, puis ton NFS derrière, tu arrives à 4 machines, + le SQL. Mis à part si tu veux refaire slashdot en Spip, je pense que le cluster pour Spip, c'est plutot pour la tolérance de panne.
   
Oui, je parlais bien tolérance de panne, avec un truc du style :

lb1 lb2
   \ /
   / \
web1 web2 -- (nfs ou pas) --repli
> >
  \ /
   sql---repli

Avec un cluster mysql 5, tu pourras croiser aussi le sql aussi car la
répli à chaud temps réelle dans les deux sens est permise, je me demande
bien comment il gère les update/inserts mais ils annoncent ca comme
possible.

Il existe plein de projet en Java pour ça, il explique le fonctionement, il existe même un projet de RAID de Serveur SQL.
Le principe est simple, si c'est de la lecture, on prends un noeuds au hasard (ou selon la charge et pondération de ce genre), si c'est de l'écriture, on envoit l'info sur tout les noeuds, pareil pour les locks.
Si tu n'as pas confiance en SQL5 (qui gère les triggers mais pas les vues, quelle horreur), tu peux utiliser SQLRelay ( http://sqlrelay.sourceforge.net/ ), et grace à l'architecture qui tue de Spip et son spip_query, tu peux clusterer du mysql 4 qui marche.

Si tu as effectivement une session qui n'est pas commune en nfs, il va
te falloir poser ton id de session ailleurs. Dans la bdd, c'est une
mauvaise idée à mon avis. Dans un cookie de session, pourquoi pas.

oulah, une session, c'est un identifiant que l'on se traine dans un cooki (ou dans l'url) et coté serveur, les informations associées à cette id. Le stockage peut être divers.
Avec un minimum de code, on peut laisser au webmaster le choix du type de stockage.

Après, une simple persistance au niveau du lb peut suffire, à condition
qu'il n'y ait pas de vol possible. Il en va de même pour le cookie.

D'où l'astuce de la paire id+un hash de validation, et d'une durée de validité.

je parlais des locks/cache/flush de Spip. J'aime pas NFS, d'ailleur, mais c'est plus par ignorance.
   
Les locks de spip sont à peu prêt les mêmes qu'en nfs dans le sens ou ,
en nfs aussi, tu peux locker un fichier depuis un client, qui n'est pas
vu de l'autre. La différence est qu'un lock spip est plus facile a
enlever qu'un lock nfs :slight_smile:

En fait il faut juste que tout le code appelle un spip_lock, de la même manière qu'il appelle un spip_query.

non, je veux un cluster SIMPLE. 2 web, 1 SQL. Donc, pas de docroot commun, pas de rsync, pas de NFS.
Quand tu remets ton serveur qui est tombé, il suffit d'appuyer sur le bouton magique qui empeche Spip d'uploader du contenu, tu fais ton rysnc over ssh ou avec rsyncd, et ensuite tu dévérouilles.
   
Mouai. L'autre cas simple, mais pas très secure , c'est le nfs croisé en
failover. web2 monte la docroot de web1. La docroot de web1 se
synchronise dans un répertoire prévu à cet effet. En cas de crash,
suffit de heartbeater le point de montage.
La même manip est à faire sur l'autre web bien sûr.

comment synchronises tu deux dossiers en temps réel? rsync ne va pas assez vite, avec dnotify?
Dans un linux mag, il parlait de la technique ultime : tu as un device virtuel qui pointe sur un device physique d'une autre machine via le reseau, ensuite, tu construit un RAID soft entre ton disque physique et ton disque virtuel reseau. Avec ça, tu as une synchro à 100% et directement la tolérance de panne.
La partie écriture de contenu dans Spip étant centralisé, je pense qu'il est beaucoup plus simple de bricoler dans Spip que d'utiliser l'artillerie lourde.

Mais dans le cas que tu évoques, oui, il manque quelque chose à spip ...

D'où les divers suggestions sur cette liste.

je sais pas, certains site de prestige et de forte fréquentation donne des infos sur leur architecture, qui reste simple, et certains points peuvent être considéré comme moins fragile, comme un routeur hard, sans disque dur.
   
Oui et non. Un routeur et un switch, ca se redonde aussi. En fait, quand
on veut bien faire, on peut tout redonder (même les humains, private
joke avec Pif :-))

Il y a l'autre solution un peu violente qui consiste à mettre deux machines synchronisés, mais qu'une seule bosse, avec un lien hearthbeat (null modem + ethernet par exemple), et quand le frontal meurt, le secondaire fait un arpspoof pour piquer l'adresse IP.
   
Ben oui, mais non. Généralement c'est plus le maître du noeud qui envoie
un gratuitous arp packet auprès du lien réseau (firewall/autre) qui le
relie à internet. Après, le maître du noeaud n'a pas à apprendre de
nouveau client, simplement il doit avoir une technique pour savoir que
le client en question est vivant ou pas (keepalived sur le lb si LVS,
cdagent sur le client si Resonate)

Bon le principal est qu'on est tombé d'accord sur ton point de vue
concernant un manque de SPIP, mais pas sur la solution :slight_smile:

there's more than one way to do it, ah non je me trompe, c'est pas du Perl, c'est du Spip

M.