OCFS2, je t'aime moi non plus

Publié le par greg

Bon,

Plusieurs choses à dire dans cet article. D'abord c'est le premier (qui a dit «aussi le dernier» ?). Ensuite on pourrait tergiverser sur les mille et une raisons d'ouvrir un blog pour parler de trucs aussi inutiles/futiles/ etc etc ... bein oui, c'est un blog.

Aujourd'hui donc, mes humeurs d'ours^H^H^H^H^He geek me portent à fuir tout contact social sous pretexte d'essayer le dernier truc à la mode dans le noyau Linux : le système de fichier OCFS2 pour Oracle Cluster File System 2. D'après le descriptif il semble que cela permette de partager des disques sur le réseau. Cela est très intéressant dans le cadre, par exemple, de cluster de serveurs web. Si ces serveurs partagent un même disque réseau tolérant aux pannes, s'en est fini des problèmes de synchronisation de contenu et de conf (pourquoi pas).

Première chose, merci Oracle d'avoir fait (un peu) de logiciel libre et même si ils n'ont pas eu le choix de la licence (le OCFS2 s'appuyant sur ext3 et heartbeat tous 2 libres) et bien on les remercie quand même.

Bon ... coté pratique, la première chose est de se munir de 2 machines et de leur compiler amoureusement un noyau 2.6.16 avec le support de l'OCFS2 (Cf file systems).

Une fois cela fait, il reste quelques babioles user space à télécharger pour être prêt (sur Debian testing ) :

# apt-get install ocfs2-tools

Je place ensuite sur les 2 machines le fichier cluster.conf dans le dossier /etc/ocfs2. Le cluster comporte donc mes 2 machines (noeuds) et s'appelle ocfs2 (oui c'est original). Je n'oublie pas de vérifier que les ports 7777 sont ouverts sur les 2 machines.

node:
        ip_port = 7777
        ip_address = 192.168.1.101
        number = 0
        name = platipus
        cluster = ocfs2

node:
        ip_port = 7777
        ip_address = 192.168.1.102
        number = 1
        name = wallaby
        cluster = ocfs2

cluster:
        node_count = 2
        name = ocfs2

Je peux ensuite démarrer le service du cluster :

# /etc/init.d/o2cb load
Mounting configfs filesystem at /config: OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK

Et mettre le cluster online

# /etc/init.d/o2cb online ocfs2
Mounting configfs filesystem at /sys/kernel/config: OK
Starting Oracle cluster ocfs2: *** glibc detected *** free(): invalid pointer: 0x080550a0 ***
Failed
Cluster ocfs2 created
Node platipus added
Node wallaby added
Stopping Oracle cluster ocfs2: *** glibc detected *** free(): invalid pointer: 0x080550a0 ***
Failed

ah .... problème (déjà ?). Après une rapide recherchen il parait que un

#export MALLOC_CHECK_=0

résout le problème ... soit !

# /etc/init.d/o2cb online ocfs2
Starting Oracle cluster ocfs2: OK

Bon ... nous avons donc démarré le service du cluster sur les 2 machines....

platipus:~# /etc/init.d/o2cb status
Filesystem "configfs": Mounted
Filesystem "ocfs2_dlmfs": Mounted
Checking cluster ocfs2: Online
Checking heartbeat: Active

reste à créer des ressources à partager entre les noeuds. Je vais utiliser un volume LVM de ma machine platipus pour le partager sur le cluster. Je formate donc ce volume au format ocfs2. Il est important que le cluster soit démarré avant de formater des volumes ocfs2 pour que les machines soient au courant (logique).

# mkfs.ocfs2 -b 4096 -C 4k -L DBF1 -N 2 /dev/lvm_partition/ocfs2part
mkfs.ocfs2 1.1.5
Overwriting existing ocfs2 partition.
Proceed (y/N): y
Filesystem label=DBF1
Block size=4096 (bits=12)
Cluster size=4096 (bits=12)
Volume size=10494148608 (2562048 clusters) (2562048 blocks)
80 cluster groups (tail covers 13824 clusters, rest cover 32256 clusters)
Journal size=33554432
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing lost+found: done
mkfs.ocfs2 successful

Et c'est maintenant que les choses se corsent. Car si je monte bien mon disque ocfs2 sur platipus (en local donc),

platipus:~# mount -L DBF1 /mnt/DBF1/
platipus:~# mount
...
configfs on /config type configfs (rw)
configfs on /sys/kernel/config type configfs (rw)
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/mapper/lvm_partition-ocfs2part on /mnt/DBF1 type ocfs2 (rw,_netdev,heartbeat=local)
platipus:~# ls -lh /mnt/DBF1/
total 4.0K
drwxr-xr-x  2 root root 4.0K Apr  4 10:27 lost+found


si je liste les partitions ocfs2 sur platipus, je suis légèrement déçu :

platipus:~# mounted.ocfs2 -d
Device                FS     UUID                                  Label

De même, si j'essaie de voir les partitions montées, je pense qu'une fois de plus le mal absolu s'est glissé entre les mailles de la connaissance.

platipus:~# mouted.ocfs2 -f
Device                FS     Nodes

Bon ... je pense que je vais réessayer sans LVM.
Après avoir fait sauter le lvm, je décide donc d'utiliser une partition «normale».

platipus:~# mkfs.ocfs2 -b 4096 -C 4k -L DBF1 -N 2 /dev/hda3
mkfs.ocfs2 1.1.5
Filesystem label=DBF1
Block size=4096 (bits=12)
Cluster size=4096 (bits=12)
Volume size=5009195008 (1222948 clusters) (1222948 blocks)
38 cluster groups (tail covers 29476 clusters, rest cover 32256 clusters)
Journal size=33554432
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing lost+found: done
mkfs.ocfs2 successful

platipus:~# mounted.ocfs2 -f
Device                FS     Nodes
/dev/hda3             ocfs2  Not mounted
platipus:~# mounted.ocfs2 -d
Device                FS     UUID                                  Label
/dev/hda3             ocfs2  ddf6b0cc-7caa-40bc-9558-c0f7e4bfc3cc  DBF1

Quelle tuerie ... il semblerait donc que l'on ne puisse pas utiliser des volumes LVM comme partition du cluster ocfs2 ... dommage.

platipus:~# mount /dev/hda3 /mnt/cluster
platipus:~# mounted.ocfs2 -f
Device                FS     Nodes
/dev/hda3             ocfs2  0

Maintenant, la question est «comment puis je monter ce volume sur wallaby ?».
Et bien après maintes recherches, j'ai trouvé .... ce n'est pas possible.
Car OCFS2 n'est pas un système de partage de disques sur le réseau mais un gestionnaire de ressources concourrantes sur un même disque partagé.
(des indices ici et la). Il faut donc se placer dans le cas d'un pool de serveurs alimentés par une baie de disques montée simultanément par plusieurs noeuds.... bein c'est IBM qui va être content.
Allez, la prochaine fois, j'essaie CodaFS.
 
 
 
Publicité

Publié dans geekblog

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
M
c'est possible de monter la partition sur le 2ieme host en utilisant drbd en mode primary des 2 côtés:http://www.kroemeke.eu/docs/ocfs2drbd.html
Répondre
G
<br /> Croustillante idée, je vais aller lire cela.... merci.<br /> <br /> EDIT DU 24/11<br /> Je me souvenais bien avoir lu une telle chose sur le site de DRDB. Je cite :<br /> «DRBD's primary-primary mode with a shared disk file system (GFS, OCFS2). These systems are very sensitive to failures of the replication network. Currently we cannot<br /> generally recommend this for production use.»<br /> <br /> <br />