17.6 Utilisation d'interconnexions haute vitesse avec MySQL Cluster
17 Introduction à MySQL Cluster
Manuel de Référence MySQL 4.1 : Version Française
->Configurer le cluster MySQL avec les sockets SCI . Mesures de vitesses pour comprendre les impacts sur le cluster
|
17.6.1 Configurer le cluster MySQL avec les sockets SCI Dans cette section, nous allons vous montrer comment utiliser un cluster
TCP/IP normal avec les sockets SCI. Les pré-requis pour cela est que les
machines doivent être capables de communiquer avec des cartes SCI. Cette
documentation est basée sur les sockets SCI version 2.3.0, du 1er octobre 2004.
Pour utiliser les sockets SCI, vous pouvez utiliser n'importe quelle version
du cluster MySQL. Les tests ont été fait sur la version 4.1.6. Aucune compilation
particulière n'est nécessaire, car il utilise les appels normaux aux sockets,
ce qui est la configuration de MySQL Cluster. Les sockets SCI ne sont
supportées que sur les noyaux Linux 2.4 et 2.6 pour le moment. Les
transporteurs SCI fonctionnent sur d'autres systèmes d'exploitaiton, même
si seul Linux 2.4 a été vérifié.
Il y a essentiellement 4 choses nécessaires pour activer les sockets SCI.
La première est de compiler les bibliothèques de sockets SCI. La seconde
est d'installer les bibliothèques SCI dans le noyau. La troisième est d'installer
les fichiers de configuration. Enfin, la bibliothèque SCI du noyau doit
être activée pour toute la machine, ou pour le shell d'où le cluster MySQL
est lancé. Ce processus doit être répété pour chaque machine du cluster qui
utilisera les sockets SCI pour communiquer.
Deux paquets doivent être installés pour faire fonctionner les sockets SCI.
Le premier paquet compile les bibliothèques avec lesquelles les bibliothèques
SCI sont compilées. Actuellement, la distribution est uniquement au format
code source.
Les dernières versions de ces paquets sont actuellement disponibles à :
http://www.dolphinics.no/support/downloads.html
|
http://www.dolphinics.no/ftp/source/DIS_GPL_2_5_0_SEP_10_2004.tar.gz http://www.dolphinics.no/ftp/source/SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz
|
La prochaine étape est de décompresser ces dossiers. Les sockets SCI sont
décompressées sous le code DIS. Puis, le code de base est compilé. L'exemple
ci-dessous montre les commandes utilisées sur Linux/x86 pour ce faire.
shell> tar xzf DIS_GPL_2_5_0_SEP_10_2004.tar.gz shell> cd DIS_GPL_2_5_0_SEP_10_2004/src/ shell> tar xzf ../../SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz shell> cd ../adm/bin/Linux_pkgs shell> ./make_PSB_66_release
|
Si la compilation se passe sur une machine Opteron, et doit utiliser l'exention
64 bits, alors utilisez make_PSB_66_X86_64_release à la place. Si la compilation a lieu
sur Itanium, utilisez make_PSB_66_IA64_release. Les variantes X86-64 devraient
fonctionner pour les architectures Intel EM64T mais aucun test n'est connu pour cela.Après avoir compilé le code de base, il est placé dans une archive compressée.
Il est temps d'installer le paquet au bon endroit. Dans cet exemple, nous allons
placer l'installation dans le dossier /opt/DIS. Ces actions
vous imposerons de vous identifier comme super-utilisateur.
shell> cp DIS_Linux_2.4.20-8_181004.tar.gz /opt/ shell> cd /opt shell> tar xzf DIS_Linux_2.4.20-8_181004.tar.gz shell> mv DIS_Linux_2.4.20-8_181004 DIS
|
Maintenant que les bibliothèques et les binaires sont en place, nous devons nous
assurer que les cartes SCI recoivent les bons identifiants de noeuds dans
l'espace SCI. Comme SCI est un élément réseau, nous devons commencer par
décider de la structure du réseau.Il y a trois types de structure de réseau : la première est un simple
anneau unidimensionnel, le second utilise les hub SCI, avec un anneau
par hub, et finalement, il y a des tores 2D et 3D. Chaque type a sa
technique pour attribuer les identifiants.Un anneau simple utilise des identifiant espacés de 4 :
La deuxième méthode utilise des hubs. Le hub SCI a 8 ports. Sur chaque port,
il est possible de placer un anneau. Il est nécessaire de s'assurer que
les anneaux des hubs utilisent des espaces d'identifiants différents. Le
premier port utilisera les identifiants inférieurs à 64, et les 64 identifiants
suivants seront attribués au prochain port, etc.
4,8, 12, ... , 60 Anneau du premier port 68, 72, .... , 124 Anneau du deuxième port 132, 136, ..., 188 Anneau du troisième port .. 452, 456, ..., 508 Anneau du huitième port
|
Les structures de réseaux en tore 2D/3D prennent en compte la position de
chaque noeud dans chaque dimension. La première dimension est incrémentée
de 4, la deuxième de 64 et la troisième de 1024. Regardez dans le dauphin
pour plus d'informations dessus.Durant nos tests, nous avons utilisés des hubs. La majorité des très
gros cluster utilisent des installations à Tore 2D/3D. La fonctionnalité
supplémentaire que permet les hubs est qu'avec des doubles cartes SCI,
nous pouvons facilement construire un réseau redondant, où les erreurs
de réseau sont aussitôt reprises en 100 microsecondes. Cette fonctionnalité
est supportée par le transporteur SCI, et est actuellement en développement
pour les sockets SCI.
La reprise sur échec est aussi possible avec les tores 2D/3D, mais elle
impose l'envoie de nouveaux index de routages à tous les noeuds. Cela
prend environ 100 milliseconds et sera probablement acceptable pour
les situations de haute disponibilité.
En agenceant correctement les noeuds NDB dans l'architecture, il est possible
d'utiliser deux hubs pour monter une architecture de 16 ordinateurs interconnectés,
sans aucun point d'interruption. Avec 32 ordinateurs et 2 hubs, il est possible
de configurer le cluster de telle manière qu'un incident ne perturbera pas
plus de 2 noeuds, et dans ce cas, on saura même quelle paire sera touchée.
Par conséquent, en plaçant ces serveurs dans des groupes NDB séparés, il est possible
de construire un cluster MySQL sécurisé. Nous n'entreront pas dans les
détails de cette architecture, car seuls ceux qui le souhaitent auront
la patience de lire de niveau de détails.
Pour configurer l'identifiant de noeud sur une carte SCI, utilisez l'une des
commandes disponibles dans le dossier
/opt/DIS/sbin
. -c 1 fait référence
à la carte SCI, où 1 est son numéro s'il y a une seule carte sur la machine.
Dans ce cas, utilisez toujours l'adapteur 0 (avec -a 0). 68 est l'identifiant de noeud
choisi comme exemple :
shell> ./sciconfig -c 1 -a 0 -n 68
|
Dans ce cas, nous avons plusieurs cartes SCI dans notre machine, et la seule
solution sécuritaire pour savoir quelle carte est dans quel emplacement, est d'utiliser
la commande suivante :
shell> ./sciconfig -c 1 -gsn
|
Elle vous retournera le numéro de série de la carte, qui peut être trouvée
sur sont dos. Répétez cette manipulation avec -c 2, etc, en fonction du nombre
de cartes que vous avez sur la machine. Vous pourrez ainsi identifier les cartes
de la machine. Maintenant, nous avons installé les bibliothèques et les exécutables. Nous avons
aussi configuré les identifiants de noeuds. L'étape d'après est d'effectuer le
plan de noms ou d'adresses IP pour les noeuds SCI.
Le fichier de configuration des sockets SCI doit être placé dans le fichier
/etc/sci/scisock.conf
. Ce fichier contient la carte des noms
d'hôtes et leur correspondance avec les noeuds SCI. L'identifiant de noeud
SCI correspond avec un autre via la carte SCI. Ci-dessous, voici un fichier
de configuration très simple :
#host #nodeId alpha 8 beta 12 192.168.10.20 16
|
Il est aussi possible de limiter cette configuration pour qu'elle ne s'applique
qu'à une sous-partie des ports des hôtes. Pour cela, une autre configuration est
utilisée, et placée dans
/etc/sci/scisock_opt.conf
.
#-key -type -values EnablePortsByDefault yes EnablePort tcp 2200 DisablePort tcp 2201 EnablePortRange tcp 2202 2219 DisablePortRange tcp 2220 2231
|
Maintenant, nous sommes prêts à installer les pilotes. Nous devons installer d'abord
les pilotes bas-niveau, puis les pilotes SCI sockets.
shell> cd DIS/sbin/ shell> ./drv-install add PSB66 shell> ./scisocket-install add
|
Si vous voulez, vous pouvez maintenant tester votre installation
en appelant le script qui teste tous les noeuds SCI.
shell> cd /opt/DIS/sbin/ shell> ./status.sh
|
Si vous rencontrez une erreur et que vous devez changer les fichiers de configuration
SCI, alors il faudra utiliser le programme ksocketconfig pour adapter les configurations.
shell> cd /opt/DIS/util shell> ./ksocketconfig -f
|
Pour vérifier que les sockets SCI sont fonctionnelles, vous pouvez utiliser
le programme
latency_bench
qui a besoin d'un composant serveur et d'un client
qui se connecte au serveur, pour tester les délais : l'activation de
SCI est évidente en lisant les délais de latence. Avant d'utiliser ces programmes,
vous devrez configurer la variable LD_PRELOAD tel que ci-dessous.To set up a server use the command
shell> cd /opt/DIS/bin/socket shell> ./latency_bench -server
|
Pour exécuter le client, utilisez cette commande :
shell> cd /opt/DIS/bin/socket shell> ./latency_bench -client hostname_of_server
|
Maintenant, la configuration des sockets SCI est complète. Le cluster
MySQL est prêt à s'exécuter avec les sockets SCI et le transporteur
SCI, documenté dans Définition des transports SCI dans un cluster .La prochaine étape est de lancer le cluster MysQL. Pour activer l'utilisation
des sockets SCI, il est nécessaire de configurer la variable d'environnement
LD_PRELOAD avant de lancer
ndbd
,
mysqld
et
ndb_mgmd
. La
variable LD_PRELOAD doit pointer sur la bibliothèque du noyau qui
supporte les sockets SCI.
Voici un exemple pour lancer
ndbd
depuis un bash :
bash-shell> export LD_PRELOAD=/opt/DIS/lib/libkscisock.so bash-shell> ndbd
|
Depuis un environnement tcsh, la même chose se fait avec les
commandes suivantes :
tcsh-shell> setenv LD_PRELOAD=/opt/DIS/lib/libkscisock.so tcsh-shell> ndbd
|
Notez bien que le cluster MysQL ne peut utiliser que les variantes
du noyau des sockets SCI.
|