OCFS2, je t'aime moi non plus
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 ) :
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.
Je peux ensuite démarrer le service du cluster :
Et mettre le cluster online
ah .... problème (déjà ?). Après une rapide recherchen il parait que un
résout le problème ... soit !
Bon ... nous avons donc démarré le service du cluster sur les 2 machines....
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).
Et c'est maintenant que les choses se corsent. Car si je monte bien mon disque ocfs2 sur platipus (en local donc),
si je liste les partitions ocfs2 sur platipus, je suis légèrement déçu :
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.
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».
Quelle tuerie ... il semblerait donc que l'on ne puisse pas utiliser des volumes LVM comme partition du cluster ocfs2 ... dommage.
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.
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
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
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
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
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
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
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
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
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
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
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
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é