[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux] Re: Clustering?



J'ai récupéré quelques vieilles machines et je vais bientôt avoir un
nouveau serveur Dell (P3 1GH avec 1Go RAM). J'aimerais bien savoir
s'il y a moyen de me faire un genre de cluster et si cela pourrait
améliorer les performances.

Difficile à dire.
Ca dépend de l'application et des charges.

Parfois, c'est plus rapide de faire faire toutes les requêtes par la
seule machine rapide que de faire du load-balancing sur plusieurs
machines dont certaines plus lentes.

Il faut tjs prendre en considération le travail supplémentaire pour
le load-balancing: si les requêtes sont traitées très rapidement,
ça peut pénaliser le tout.

Par contre, si c'est à très haute charge (à tel point qu'une machine
seule n'arrive plus à gérer le tout), ça aide tjs puisque chaque
machine aura une charge réduite.


Les utilisations:

Serveur web, serveur d'application java (tomcat), cocoon, peut-être
dns, peut-être smtp, FTP, peut-être LDAP, serveur de fichier et
peut-être d'impression, finallement, serveur de base de données
(PostgreSQL et peut-être Oracle 9i - la version éducation/évaluation?)

Oufti, rien que ça ;)

NB: Tomcat n'est pas à proprement dire un "application server", c'est
    plutôt un "servlet container" - un "application server" sait aussi
    gérer EJB, JMS, ... (comme p.ex. jBoss)

Pour le serveur de base de données, il faut une stratégie particulière
puisqu'ils accèdent aux mêmes données.
P.ex. avec MySQL, il y a une solution très intéressante (je l'ai déjà
fait): utiliser plusieurs DB en read-only et une seule en read-write
+ réplication online. Mais il n'y a pas de "routage automatique" des
requêtes read-only vers une des DB read-only, il faut faire ça par
programmation dans son application.

Avec Oracle, ça ne sert à rien de commencer avec du load-balancing:
il te faut utiliser Parallel Server qui est difficile à configurer
et qui requiert du hardware spécial (un disque connecté aux deux
machines via FDDI) pour avoir un disque partagé physiquement.

C'est le gros problème, en fait: tu dois avoir des data (= disques)
synchronisés sur tous les noeuds du cluster.

A moins que les données ne viennent d'une DB.


Voilà, est-ce utile de mettre les machines ensembles? Peut-on y gagner
quelque chose (par exemple, partager les disques, la mémoire, le
processeur?)? Quelles sont les solutions qui existent? Est-ce
difficile à mettre en oeuvre? Faut-il re-compiler tout les programmes
pour qu'ils tirent parti d'une telle architecture?

Pfff... je peux pas te répondre comme ça, ça dépend très fort de ce que
tu veux faire concrètement, de l'application, etc...
Il faut vraiment voir tout au cas par cas.

Ce qui est intéressant et plus facile à faire, c'est de faire un mélange
de load-balancing pour les serveurs qui ne font que du traitement et
de machines dédiées, p.ex. pour la DB:

       ---------------
   +--|Apache+Tomcat 1|--+
   |   ---------------   |    ----
---|         |           |---| DB |
   |   ---------------   |    ----
   +--|Apache+Tomcat 2|--+
       ---------------

Comme ça, on peut faire du load-balancing et/ou du failover sur les
noeuds Apache/Tomcat mais garder les données consistantes sur une
seule machine qui ne s'occupe que de la DB (et qu'on peut optimiser
en fonction - p.ex. pour Oracle: dédier une grosse partie de la
RAM pour la SGA).
Evidemment tu as encore un SPOF (Single Point Of Failure): la DB.

Une configuration de ce type-ci:

       ---------------           ----
   +--|Apache+Tomcat 1|--+   +--| DB |
   |   ---------------   |   |   ----
---|         |           |---|     |
   |   ---------------   |   |   ----
   +--|Apache+Tomcat 2|--+   +--| DB |
       ---------------           ----

devient déjà plus compliquée: synchroniser les DBs en temps réel pour
les writes est assez complexe. Comme déjà dit, il te faut soit Parallel
Server d'Oracle soit utiliser MySQL avec une dédication
read/write - read-only mais qui doit être gérée dans l'application-même
(paraîtrait que dans MySQL 4 ils sont en train d'implémenter un routage
automatique des requêtes de ce genre, mais c'est pas encore fini).

Ou bien faire une réplication (p.ex. Advanced Replication d'Oracle,
c'est pas trivial du tout mais ça marche bien) soit online (donc directe)
par triggers (devrait tuer la performance dans quasiment tous les cas),
soit offline (périodiquement par jobs, p.ex. toutes les 10s) mais tu
risques éventuellement d'avoir des data "dirty" (out-of-date).

Il faut aussi voir si en 1ère ligne du veux faire du load-balancing
ou du failover...


Mais pour en revenir aux autres services:
- LDAP: faisable, OpenLDAP2 dispose d'une réplication built-in
- FTP/fichiers: compliqué, on en revient au problème des données et
    du storage: soit un disque partagé par hardware (*) ou bien un
    mécanisme de synchronisation online (DRBD, ENBD) ou offline (p.ex. rsync)
    - mais là encore, ça dépend: si tu as très peu de writes et bcp
    de reads, c'est faisable avec une réplication offline (rsync est
    très facile à configurer)

(*) càd: un disque partagé physiquement via GFS/OpenGFS, soit
    - par SCSI: mais une seule machine peut y écrire à la fois
    - par Fibre Channel: impeccable, mais forcément très cher
    - par des TCP/IP et des démons en user-space: facile, pas cher, mais
        moins performant

Donc, je te rappelle, si tu préfères, j'envoie sur la ML (mais je sais
que de toutes manières, c'est  toi qui aura certainement la réponse la
plus pertinente! ;)

Il y a des chances. C'est vraiment un sujet très, très complexe et j'ai
déjà passé pas mal de temps dessus...

Mais si tu veux vraiment avoir des réponses, il faudra y consacrer un

peu plus de temps et voir chaque service point par point.
Il n'y a pas de solution miracle et pas vraiment de solution générique
non plus...

PS: comme tu as vu, j'ai envoyé un CC sur la liste, ça intéresse p'têt qqn...

--
  -o) Pascal Bleser   ATOS Origin/Aachen(DE) |
  /\\         <pascal.bleser@atosorigin.com> |
 _\_v <guru@linuxbe.org>                     |
---------------------------------------------|
Jesus saves,Buddha makes incremental backups :
---------------------------------------------'

_______________________________________________
Linux Mailing List
Archives: http://unixtech.be/mailman/listinfo/linux