Stockage distribué sous Linux

Transcription

Stockage distribué sous Linux
Institut Universitaire de Technologie Nancy-Charlemagne
Licence Professionnelle
Administration de Systèmes, Réseaux et Applications à base de Logiciels Libres
Tuteur de projet : Stéphane Casset
Stockage distribué sous Linux
Félix - Simon
Ludovic - Gauthier
Nancy, 1er avril 2009
Table des matières
Introduction
3
1 État de l’art
1.1 Les plus utilisés . . . . . . . . . . . .
1.1.1 Andrew File System . . . . .
1.1.2 Ceph . . . . . . . . . . . . . .
1.1.3 Coda . . . . . . . . . . . . . .
1.1.4 Lustre . . . . . . . . . . . . .
1.1.5 POHMELFS . . . . . . . . .
1.2 Le reste . . . . . . . . . . . . . . . .
1.2.1 Global File System . . . . . .
1.2.2 GlusterFS . . . . . . . . . . .
1.2.3 General Parallel File System
1.2.4 HAMMER . . . . . . . . . .
1.2.5 Infinit . . . . . . . . . . . . .
1.2.6 Parallel Virtual File System .
1.2.7 OneFS . . . . . . . . . . . . .
1.3 Les plus prometeurs . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
4
4
4
5
5
5
6
6
7
7
7
8
8
2 Mise en place
2.1 Andrew File System . . . . . . . .
2.1.1 Pré-requis et informations .
2.1.2 Installation . . . . . . . . .
2.1.3 Configuration . . . . . . . .
2.1.4 Conclusion sur OpenAFS :
2.2 Coda . . . . . . . . . . . . . . . . .
2.2.1 Côté serveur . . . . . . . .
2.2.2 Côté client . . . . . . . . .
2.3 Global File System . . . . . . . . .
2.3.1 Prérequis . . . . . . . . . .
2.3.2 Configuration . . . . . . . .
2.3.3 Création des partitions . . .
2.3.4 Utilisation . . . . . . . . . .
2.4 Ceph . . . . . . . . . . . . . . . . .
2.5 Ceux que l’on garde . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
9
10
12
12
12
20
22
22
22
23
23
23
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Évaluation des performances
26
Conclusion
27
Webographie
28
2
Introduction
Un système de fichier distribué est un système de fichier réparti sur plusieurs ordinateurs de manière
à ce que les clients de cet espace de stockage ne le voit que comme un seul et énorme disque dur.
Cette technologie étant utilisée pour les problèmes de haute disponibilité des données, quels sont
les systèmes de fichier distribués existant sous GNU/Linux et quels sont les plus interessants à mettre
en œuvre ?
Nous allons faire un petit tour de l’état de l’art pour voir quelques uns de ces systèmes de fichiers,
puis nous en retiendrons un échantillon réduit pour un test de mise en application. Enfin nous ferons
un test plus approfondi des plus prometteurs.
3
Chapitre
1
1.1
1.1.1
État de l’art
Les plus utilisés
Andrew File System
AFS est un système de fichier distribué, il offre une architecture client-serveur pour un partage de
fichiers et une réplication de contenu. Il est dimensionable, sécurisé, décentralisé et offre des possibilités
de migration. AFS est disponible pour une palette de systèmes hétérogènes : UNIX, Linux, MacOS X
et Microsoft Windows. IBM maintient une branche des sources du produit AFS, disponible pour la
communauté : OpenAFS.
1.1.2
Ceph
Le principal but de Ceph est d’être compatible à POSIX et d’être distribué sans aucun bug. Ceph
en est encore à sa version alpha est n’est pas prêt pour être mis en production.
Le serveur tourne comme n’importe quel daemon UNIX. Ceph utilise trois types de daemons différents :
– Cluster monitors, qui gardent une trace des noeuds de cluster actifs ou défaillants.
– Metadata servers (MDS), qui gèrent la charge de travail en fonction de l’accès aux fichiers. Il
s’adapte en fonction de la taille ou de la popularité des fichiers.
– Object storage devices (OSDs), qui gèrent le contenu des fichiers. Les OSDs utilisent un format
de stockage particulier appelé EBOFS.
Ils peuvent tous être exécutés sur le même jeu de serveurs. Les clients interagissent directement
avec tous les serveurs.
Comme beaucoup de systèmes de fichiers distribués, Ceph utilise le stripping pour gérer les fichiers
et assurer de meilleures performances (similaires au RAID 0). Une future extension en projet prévoit un
équilibrage de charge, notamment pour les objets les plus souvent sollicités qui pourront être répliqué
sur plusieurs noeuds.
Ceph est conçu pour supporter 10 000 clients accédant au même fichier ou écrivant dans le même
répertoire.
1.1.3
Coda
Coda est un système de fichier distribué qui puise ses origines dans AFS2. Il permet les opérations
déconnectées pour l’utilisation itinérante. Il offre une haute performance coté client avec un cache
persistant. Les serveurs sont réplicables, leur accès est restreint par authentification.
1.1.4
Lustre
Lustre est un projet libre (GPL) de système de fichier distribué basé sur des objets. Son nom vient
du mélange des mots « Linux » et « cluster ». Le projet a débuté en 1999 et, depuis 2007, c’est
4
Sun Microsystems qui le développe et le maintiens. Quinze des trente plus gros super-ordinateurs du
monde utilisent Lustre. RedHat et SUSE fournissent des noyaux qui permettent de le faire fonctionner
directement.
Ce système de fichier à été conçu pour pouvoir accueillir des dizaines de milliers de nœuds et
comprendre plusieurs pétaoctets1 sans perte significative de vitesse. Lustre peut fournir son service
à des dizaines de milliers de clients et atteindre des vitesses de l’ordre des centaines de gigaoctets
par seconde tout en proposant une haute extensibilité, la segmentation des données2 et une haute
disponibilité.
Le logiciel comprends un serveur de métadonnées (MDS3 ), plusieurs serveurs de données (OSS4 ) et
des clients. Le groupe MDS/OSSs peut évidemment être répété plusieurs fois par grappe de nœuds.
Lustre se base sur son protocole réseau LNET pour ses échanges et LNET supporte plusieurs protocoles
dont TCP/IP5 , InfiniBand, Myrinet, Quadrics et quelques autres.
Lustre peut être utilisé en tant que module noyau ou dans l’espace utilisateur grâce à la liblustre. Ce
système de fichier utilise actuellement ext3 mais Lustre 3 devrait offrir le choix entre ZFS et ldiskfs.
1.1.5
POHMELFS
POHMELFS signifie Parallel Optimized Host Message Exchange Layered File System.
POHMELFS est un client noyau développé pour les système de fichiers distribué par internet de
manière parallèle. A l’heure actuelle c’est un système de fichiers réseau à haute performances. Il est dit
parallèle car il est capable de lire des informations depuis plusieurs hôtes et d’écrire des informations
sur différent nœuds réseau.
Cette gestion multitâche n’est pas assuré par le client POHMELFS mais par l’application serveur.
Il peut être utilisé comme solution de sauvegarde pour les serveurs réseaux distribués physiquement.
Cette capacité à gérer ces sources de données depuis de multiples serveurs le désigne tout particulièrement pour des applications dans le domaine de la haute disponibilité.
1.2
1.2.1
Le reste
Global File System
GFS est un système de fichier Libre (GPL) dont le développement à débuté en 1997 et à été repris
par RedHat en 2003 qui le développe, le maintient et le supporte6 .
Global File System est original en le sens où chacun des nœuds est un un pair7 et est autorisé à un
accès concurrent aux ressources.
Pour que ce système fonctionne optimalement il nécessite un gestionnaire de verrou tel GULM8
ou DLM9 qui est généralement préféré. Il est également possible d’utiliser un gestionnaire « nolock »
1
Un pétaoctet contient 1015 octets, plus de 200 millions de DVD simples
Data stripping
3
MetaData Server
4
Object Storage Servers
5
Transmission Control Protocol/Internet Protocol
6
Le support de GFS par RedHat est payant
7
En opposition au modèle client/serveur
8
Grand Unified Lock Manager
9
Distributed Lock Manager
2
5
dans le cas où l’on souhaite l’utiliser sur une seule machine. Notons aussi que GFS2 inclut par défaut
DLM.
1.2.2
GlusterFS
GlusterFS est un système de fichiers distribué Libre (GPL v.3) ayant une capacité de plusieurs
petaoctets.
Ce système de fichiers est conçu de manière très modulaire (à la HURD) et la réplication des fichier
est automatique. Il est possible de segmenter les données et le logiciel n’est pas conçu comme un
module du noyau Linux, il utilise FUSE10 .
GlusterFS est un des rares logiciels de ce type qui supporte plusieurs protocoles de communication,
tels TCP/IP, InfiniBand, SDP11 ou UDS12 .
Le principe de fonctionnement est d’établir un serveur (glusterfsd) sur chaque nœud de la grappe,
et de s’y connecter via un client (FUSE).
1.2.3
General Parallel File System
Le General Parallel File System est un système de fichier conçu par IBM. Il est disponible sous
Linux depuis 2001. Il est fait pour adresser de façon unique des volumes de données dépassant le
pétaoctet et répartis sur un nombre de supports physiques pouvant dépasser le millier. Ce système de
fichier se base sur les techniques du RAID. D’une part le stripping pour les performances, et d’autre
part la tolérance de panne par redondance. La réplication et la technique de journalisation des accès
en écriture sont intégrées aux méthodes d’accès elles-mêmes.
GPFS est le successeur des systèmes de fichiers Tiger Shark File System et Vesta File System.
Vesta a été commercialisé en 1994 et GPFS lui a succédé en 1998 en rendant toutes les fonctions de
support de hautes performances transparentes.
GPFS fournit un système performant en rendant accessible les données par de multiples ordinateurs
en même temps. GPFS fournit également de bonnes performances grâce son système de "stripping",
similaire au RAID, en prenant des blocs de données d’un même fichier sur plusieurs disques. D’autres
fonctionnalités de GPFS sont la haute disponibilité, le support de clusters hétérogènes, la récupération
de données,. . .
Information Lifecycle Management (ILM) Tools : Cet outil permet de gérer la répartition des
fichiers sur le cluster, en fonction des pools de stockages. Il y a deux fonctionnalités principales : File
placement et File management.
File Placement : Cette fonctionnalité dirige les fichiers de données vers certains pools de stockage
en fonction d’une politique définit. Cette politique peut être définit en fonction du nom du fichier, en
fonction de l’utilisateur,. . .
File Management : Cette fonctionnalité permet de transférer des données d’un pool de stockage à
un autre, si des données ont besoin d’être transférés sur un pool plus performant par exemple. Cette
fonctionnalité est basé sur une politique qui s’appuie sur les attributs des données comme la date du
dernier accès, la taille du fichier, . . .
10
Filesystem in Userspace
Sockets Direct Protocol
12
Unix Domain Socket ou IPC Socket
11
6
1.2.4
HAMMER
DragonFlyBSD est un fork d’un projet Unix : FreeBSD 4.8. Ce projet est sous la direction de Matt
Dillon, qui est également le contributeur principal du systeme de fichier HAMMER. HAMMER est le
système de fichiers par défaut sous DragonFlyBSD. Ce projet a vu le jour suite au nouveau système de
threading et SMP mis en place dans FreeBSD 5.0. Matt Dillon ne le trouvant pas adapté à commencé
a développer DragonFlyBSD afin d’apporter une solution qu’il jugeait plus adéquate.
HAMMER est un système de fichiers de nouvelle génération. Il reprends un grand nombre de
spécification de ZFS : partitions de très grandes tailles (jusqu’à 1exabit, c’est à dire 1024 pétabits en
sachant qu’un pétabits=1024térabits. Ce qui au vu de la taille des plus gros disque durs actuellement
laisse un peu de marge), récupération avancée et rapide des données, création d’instantanés facilement
accessibles, mirroring, clichés, opération multi-volume, self healing, etc.
HAMMER n’est pas conçu pour de petite partitions (hormis pour des tests) en effet il a besoin de
plusieurs centaine de mégabits (dépends de la taille totale de la partitions) qui sert de buffer pour le
reblocker. C’est un système de fichiers a 64 bit a Haute Disponibilité à répartition (clustering) basé
sur des arbres B.
Un arbre B est un arbre équilibré utilisé principalement pour la gestion de base de donnée et de
système de fichiers. C’est une arborescence qui permet de stocker des index. L’arbre est équilibré ce
qui signifie qu’il comprends le même nombre de niveaux dans chaque branche. L’avantage d’un arbre
équilibré c’est qu’une recherche sur ce type d’arbre à une durée constante.
Il n’y a pas de portage de HAMMER sous d’autre système pour l’instant mais son concepteur reste
ouvert à toute personne voulant porté ce système de fichiers sous un autre OS.
1.2.5
Infinit
C’est un système de fichiers développé par l’université de Cambridge. Il a la particularité d’être un
système de fichier utilisant un modèle peer to peer pour le transfert d’informations.
Le peer to peer (ou pair à pair en français souvent abrégé p2p) est un modèle de réseau informatique
qui s’oppose radicalement au modèle client-serveur. En effet a la différence du modèle client serveur
(ou un serveur possède les données et les clients demande au serveur les données), dans le modèle
p2p tout les pairs sont à la fois clients et serveurs. Ils possèdent et demandent les mêmes ressources.
Ce modèle permet d’éviter que la panne d’un serveur immobilise une architecture réseau. Il y a donc
décentralisation des systèmes.
Ce modèle a donc des prédisposition évidentes pour la haute disponibilité. C’est donc une solution
innovante et très intéressante. De plus l’agent Infinit fonctionne comme un agent ssh. Les données
sont cryptés et l’obtention d’une clé et nécessaire pour qu’un pair puisse fonctionner. Ce qui renforce
l’aspect sécuritaire de ce type de système.Elle avait retenu mon attention (je comptais la mettre en
place afin de faire des tests de performance), mais le site internet qui lui est consacré est très peu
renseigné. Il s’agit plus d’un sujet de recherche que d’un système de fichiers à proprement parlé.
1.2.6
Parallel Virtual File System
Le Parallel Virtual File System est système de fichier Open Source. Un système de fichier parallèle
est un système de fichier qui distribue des données depuis plusieurs serveurs et fournit un accès à une
ou plusieurs applications en parallèle.
Le développement de PVFS a été lancé (entre autres) par la NASA.
PVFS se compose d’un processus serveur et d’une librairie de clients. Un noyau Linux et un pro7
cessus client PVFS permettent au système de fichier d’être monté avec les utilitaires standards. La
librairie de clients fournit de bonnes performances d’accès grâce au Message Passing Interface (MPI).
MPI est une API qui permet à plusieurs ordinateurs de communiquer ensemble. MPI est spécifiquement utilisé pour les clusters.
PVFS a été conçu pour être simple à déployer et à administré. Il s’installe sur de nombreuses
distributions Linux et n’a que quelques dépendances. PVFS n’a pas besoin d’un noyau spécifique ou
de patcher celui-ci pour tourner.
PVFS se sert de la cohérence de POSIX pour améliorer sa stabilité et ses performances.
1.2.7
OneFS
OneFS est un système de fichier combinant trois couches : système de fichier, gestionnaire de volume
et RAID. OneFS permet un dimensionnement indépendant ou linéaire.
– Lecture possible : 20GigaB/s
– Capacité max : 2,3PetaB
– Accès rapide pour les gros fichiers.
– Haute disponibilité.
1.3
Les plus prometeurs
Nous avons choisi de conserver AFS, Coda, Ceph et Lustre en raison de leur forte utilisation et
GFS parce qu’il est basé sur une architecture pair à pair. À part Coda les trois autres sont empaquetés
sous Debian ce qui réduira sans doute les problèmes de déploiement.
8
Chapitre
2
2.1
2.1.1
Mise en place
Andrew File System
Pré-requis et informations
– AFS est une architecture client-serveur qui donne un accès transparent au fichier racine /afs/.
– AFS utilise Kerberos comme système d’authentification. Et sans un ticket Kerberos valide, il est
impossible d’accéder au système AFS. Même en étant administrateur du système.
– AFS n’exporte pas les partitions de données comme le ferait NFS. AFS nécessite des partitions
dédiées à son utilisation.
– Pour être accessible, les volumes AFS doivent être montés dans la racine du système (/afs/). Les
repertoires présents dans /afs/ ne correspondent pas à des mount au sens Unix du terme. Le seul
point de montage Unix est le répertoire /afs/.
– Les permissions d’accès sont plus finement gérés par rapport aux droits Unix classiques, grâce à
des ACL. Des ACL basés sur les IP sont également paramétrables, pour les cas où il n’y aurait pas
d’autres options. Les ACL sont définies sur les répertoires et s’appliquent à la sous-arborescence.
– AFS est disponible pour les plateformes suivantes : IBM AIX, HP/UX, SGI Irix, MacOS X, Sun
Solaris, toutes les plateformes Linux, et Microsoft Windows.
Le serveur sera installé sur une machine ayant pour adresse IP : 192.168.10.88. Le client aura
pour adresse IP : 192.168.10.87.
On ajoutera donc ces lignes au fichier /etc/hosts :
192.168.10.87 eee.ludo.fr eee
192.168.10.88 krb1.ludo.fr krb1 afs1.ludo.fr afs1
2.1.2
Installation
Il faut tout d’abord installer module-assistant. Ce programme permet, comme son nom l’indique,
de compiler des modules pour votre noyau linux en tout simplicité. C’est ici le cas pour le module
OpenAFS.
sudo apt-get install module-assistant
sudo m-a prepare openafs
sudo m-a a-i openafs
On peut maintenant installer l’ensemble des paquets pour OpenAFS :
sudo apt-get install openafs-{fileserver,dbserver,client,krb5}
Pour les questions lors de l’installation, on répondra de la manière suivante :
AFS cell this workstation belongs to: ludo.fr
# (Your domain name in lowercase, matching the Kerberos realm in uppercase)
Size of AFS cache in kB? 4000000
# (Default value is 50000 for 50 MB, but you can greatly increase the
# size on modern systems to a few gigabytes, with 20000000 (20 GB) being
# the upper reasonable limit)
Run Openafs client now and at boot? No
# (It is important to say NO at this point, or the client will try to
9
# start without the servers in place)
Look up AFS cells in DNS? Yes
Encrypt authenticated traffic with AFS fileserver? No
# (OpenAFS client can encrypt the communication with the fileserver. The
# performance hit is not too great to refrain from using encryption, but
# generally, disable it on local and trusted-connection clients, and
# enable it on clients using insecure channels)
Dynamically generate the contents of /afs? No
Use fakestat to avoid hangs when listing /afs? Yes
Cell this server serves files for: ludo.fr
DB server host names for your home cell: afs1
# (Before continuing, make sure you’ve edited your DNS configuration or
# /etc/hosts file as mentioned above in the section "Conventions", and
# that the command ’ping afs1’ really does successfully ping your server)
Il est nécessaire de créer un principal Kerberos et d’avoir créer au préalable dans Kerberos une
politique service.
sudo rm -f /tmp/afs.keytab
sudo kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local: addprinc -policy service -randkey -e des-cbc-crc:v4 afs
Principal "[email protected]" created.
kadmin.local: ktadd -k /tmp/afs.keytab -e des-cbc-crc:v4 afs
Entry for principal afs with kvno 3, encryption type DES cbc mode with \
CRC-32 added to keytab WRFILE:/tmp/afs.keytab.
kadmin.local:
quit
Une fois la clé crée et exporté dans le fichier /tmp/afs.keytab, il faut la charger dans AFS KeyFile.
Le nombre 3 correspond à la version de la clé.
sudo asetkey add 3 /tmp/afs.keytab afs
Il faut vérifier que la clé a bien été chargé et qu’il n’y en a qu’une seule dans AFS KeyFile grâce à
la commande bos listkeys :
sudo bos listkeys afs1 -localauth
key 3 has cksum 2035850286
Keys last changed on Tue Feb 24 23:04:02 2009.
All done.
2.1.3
Configuration
Nous avons vu que AFS utilise ses propres partitions dédiées. Chaque serveur peut avoir jusqu’à 256
partitions qui doivent être montées dans des répertoires nommés /vicepXX/, où "XX" est l’identifiant
de la partition de "a" à "z" et de "aa" à "iv".
10
Dans notre cas, on utilisera une partition /vicepa/, formatée en ext3. Il est possible d’utiliser ext2
ou ext3.
Création d’une nouvelle cellule :
sudo afs-newcell
Prerequisites
In order to set up a new AFS cell, you must meet the following:
1) .....
2) .....
3) .....
4) .....
5) .....
Do you meet these requirements? [y/n] y
If the fileserver is not running, this may hang for 30 seconds.
/etc/init.d/openafs-fileserver stop
What administrative principal should be used? root/admin
/etc/openafs/server/CellServDB already exists, renaming to .old
/etc/init.d/openafs-fileserver start
Starting OpenAFS BOS server: bosserver.
bos adduser afs.ludo.fr root -localauth
Creating initial protection database. This will print some errors
about an id already existing and a bad ubik magic. These errors can
be safely ignored.
pt_util: /var/lib/openafs/db/prdb.DB0: Bad UBIK_MAGIC. Is 0 should
be 354545
Ubik Version is: 2.0
bos create afs1.ludo.fr ptserver simple /usr/lib/openafs/ptserver \
-localauth
bos create afs1.ludo.fr vlserver simple /usr/lib/openafs/vlserver \
-localauth
bos create afs1.ludo.fr fs fs -cmd ’/usr/lib/openafs/fileserver -p 23 \
-busyat 600 -rxpck 400 -s 1200 -l 1200 -cb 65535 -b 240 -vc 1200’ \
-cmd /usr/lib/openafs/volserver -cmd /usr/lib/openafs/salvager \
-localauth
bos setrestart afs1.ludo.fr -time never -general -localauth
Waiting for database elections: done.
vos create afs1.ludo.fr a root.afs -localauth
Volume 536870915 created on partition /vicepa of afs.ludo.fr
/etc/init.d/openafs-client force-start
Starting AFS services: afsd.
11
afsd: All AFS daemons started.
Now, get tokens as root in the ludo.fr cell.
Then, run afs-rootvol.
La cellule est maintenant crée. Par convention, chaque cellule AFS crée un premier volume appelé
root.afs.
Comme écrit à la fin de la dernière commande, nous devons obtenir un ticket pour l’administrateur
AFS puis lancer afs-rootvol :
kinit root/admin; aklog
Password for root/[email protected]: PASSWORD
afs-rootvol
Une fois la commande terminée, nous avons notre cellule OpenAFS !
2.1.4
Conclusion sur OpenAFS :
OpenAFS est un système de fichiers distribués qui a été beaucoup utilisé et qui a fait ses preuves.
Cependant, l’architecture logiciel d’OpenAFS est complexe. Chaque serveur à un rôle bien précis, et
comme OpenAFS offre beaucoup de possibilités, le nombre de serveurs à mettre en place est important :
File Server : gestion des entrés/sorties sur les fichiers
Basic OverSeer Server (BOS Server) : vérification de la bonne marche des autres serveurs (lancement, terminaison, ...)
Authentification Server : gestion de l’authentification de l’utilisateur
Protection Server : gestion des ACL
Volume Server : gestion des volumes (création, suppression, déplacement, ...)
Volume Location Server : permet de retrouver sur quel serveur est situé un volume
Update server : maintient à jour la version des serveurs
Backup server : permet la sauvegarde complète du système de fichier
Cache Manager : serveur spécifique au client, il maintient à jour le cache du client en fonction des
requêtes de ce dernier
Chaque serveur à sa propre configuration, ce qui rend la mise en place d’un système avec OpenAFS
très complexe. De plus, il est nécessaire d’avoir un serveur Kerberos opérationnel pour le fonctionnement d’OpenAFS, ce qui rend la mise en place encore plus complexe.
2.2
2.2.1
Coda
Côté serveur
Prérequis :
Création de deux disques virtuels :
$ mkdir /coda
$ dd if=/dev/zero of=/coda/sdz0 bs=1M count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1073741824 octets (1,1 GB) copiés, 11,8537 seconde, 90,6 MB/s
$ dd if=/dev/zero of=/coda/sdz1 bs=1M count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1073741824 octets (1,1 GB) copiés, 12,7182 seconde, 84,4 MB/s
12
Nous avons donc maintenant deux disques virtuels d’une capacité de 1Go :
/coda/sdz0 et /coda/sdz1
Informations sur le paquet coda-server :
$ apt-cache show coda-server
Package: coda-server
Priority: optional
Section: net
Installed-Size: 5052
Maintainer: Jan Harkes <[email protected]>
Architecture: i386
Source: coda
Version: 6.9.4
Depends: coda-update, rvm-tools, libc6 (>= 2.3.6-6), libgcc1 (>= 1:4.1.1-12),
liblwp2, libncurses5 (>= 5.4-5), libreadline5 (>= 5.2), librpc2-5, librvm1,
libstdc++6 (>= 4.1.1-12)
Filename: coda/coda-server_6.9.4_i386.deb
Size: 1914762
MD5sum: 8c7751c18105dd008e78f672dd70116e
SHA1: 5f51f9e41b815617e6377c6ccb4239f01160ee38
SHA256: 322b5e52e2a91b67169b1e75ca37a18bdf8d5bd7ab1ca38a059931e3c30dd0b2
Description: Server for the Coda distributed file system
Coda is an advanced distributed filesystem. It has been developed at CMU
by the systems group of M. Satyanarayanan in the SCS department.
This package provides the binaries to set up a Coda server.
For more information see http://www.coda.cs.cmu.edu/
Installation du paquet :
$ apt-get install coda-server
Configuration du serveur Coda :
$ vice-setup
Welcome to the Coda Server Setup script!
Setting up config files for a coda server.
Do you want the file /etc/coda/server.conf created? [yes]
What is the root directory for your coda server(s)? [/vice]
Setting up /vice.
Directories under /vice are set up.
Is this the master server, aka the SCM machine? (y/n) y
Setting up tokens for authentication.
The following token must be identical on all servers.
Enter a random token for update authentication : ptutptut
The following token must be identical on all servers.
Enter a random token for auth2 authentication : ptutptut
The following token must be identical on all servers.
Enter a random token for volutil authentication : ptutptut
tokens done!
Setting up the file list for update client
13
Filelist for update ready.
Now installing files specific to the SCM...
Setting up servers file.
Enter an id for the SCM server. (hostname codaserv1)
The serverid is a unique number between 0 and 255.
You should avoid 0, 127, and 255.
serverid: 1
done!
Setting up users and groups for Coda
You need to give me a uid (not 0 or 1) and username (not root)
for a Coda System:Administrator member on this server,
(sort of a Coda super user)
I will create the initial administrative user with Coda password
"changeme". This user/password is only for authenticating with
Coda and not for logging into your system (i.e. we don’t use
/etc/passwd authentication for Coda)
Enter the uid of this user: 999
Enter the username of this user: admcoda
A server needs a small log file or disk partition, preferrably on a
disk by itself. It also needs a metadata file or partition of approx
4% of your filespace.
Raw partitions have advantages because we can write to the disk
faster, but we have to load a copy of the complete RVM data
partition into memory. With files we can use a private mmap, which
reduces memory pressure and speeds up server startup by several
orders of magnitude.
Servers with a smaller dataset but heavy write activity will
probably benefit from partitions. Mostly read-only servers with a
large dataset will definitely benefit from an RVM data file. Nobody
has really measured where the breakeven point is, so I cannot
really give any hard numbers.
------------------------------------------------------WARNING: you are going to play with your partitions now.
verify all answers you give.
------------------------------------------------------WARNING: these choices are not easy to change once you are up and running.
Are you ready to set up RVM? [yes/no] yes
What will be your log file (or partition)? /coda/sdz0
The log size must be smaller than the available space in the log
partition. A smaller log will be quicker to commit, but the log
needs to be large enough to handle the largest transaction. A
14
larger log also allows for better optimizations. We recommend
to keep the log under 30M log size, many people have successfully
used as little as 2M, and 20M has worked well with our servers.
What is your log size? (enter as e.g. ’20M’) 20M
Where is your data file (or partition)? /coda/sdz1
The amount of RVM we need to store the metadata for a given
amount file space can vary enormously. If your typical data set
consists of many small files, you definitely need more RVM, but
if you tend to store large files (mp3s, videos or image data)
we don’t need all that much RVM.
Here are some random samples,
mp3 files
~0.08MB RVM per
jpeg images
~0.50MB RVM per
email folders ~37.8MB RVM per
netbsd-pkgsrc ~180MB RVM per
GB.
GB.
GB (maildir, 1 file per message)
GB (large tree but not much data)
To get a more precize number for your dataset there is a small
tool (rvmsizer) which can reasonably predict the amount of RVM
data we need for a file tree.
Remember that RVM data will have to be mmapped or loaded
into memory, so if anything fails with an error like
RVM_EINTERNAL you might have to add more swap space.
What is the size of you data file (or partition)
[32M, 64M, 128M, 256M, 512M, 768M, 1G]: 128M
-------------------------------------------------------WARNING: DATA and LOG partitions are about to be wiped.
---------------------------------------------------------- log area: /coda/sdz0, size 20M.
--- data area: /coda/sdz1, size 128 MB.
Proceed, and wipe out old data? [y/n] y
LOG file has been initialized!
Rdsinit will initialize data and log.
This takes a while.
rvm_initialize succeeded.
Going to initialize data file to zero, could take awhile.
done.
rds_zap_heap completed successfully.
rvm_terminate succeeded.
RVM setup is done!
Directories on the server will be used to store container files
15
that hold the actual data of files stored in Coda. Directory
contents as well as metadata will be stored in the RVM segment
that we already configured earlier.
You should only have one container file hierarchy for each disk
partition, otherwise the server will generate incorrect
estimates about the actual amount of exportable disk space.
Where shall we store your file data [/vicepa]?
Shall I set up a vicetab entry for /vicepa (y/n) y
Select the maximum number of files for the server.
[256K, 1M, 2M, 16M]:
1M
Server directory /vicepa is set up!
Congratulations: your configuration is ready...
Shall I try to get things started? (y/n) y
- Coda authentication server (auth2 &)
- Coda update server (updatesrv)
- Coda update client (updateclnt -h codaserv1)
Creating /vice/spool
- Coda file server (startserver)
Nice, it looks like everything went ok
Now I’ll try to create an initial root volume
- createvol_rep / codaserv1/vicepa
Replicated volumeid is 7f000000
creating volume /.0 on codaserv1 (partition /vicepa)
V_BindToServer: binding to host codaserv1
V_BindToServer: binding to host codaserv1
Set Log parameters
Fetching volume lists from servers:
V_BindToServer: binding to host codaserv1
GetVolumeList finished successfully
codaserv1 - success
V_BindToServer: binding to host codaserv1
VLDB completed.
<echo / 7f000000 1 01000001 0 0 0 0 0 0 0 >> /vice/db/VRList.new>
V_BindToServer: binding to host codaserv1
VRDB completed.
Do you wish this volume to be Backed Up (y/n)? [n]
That seems to have worked...
If you have a working Coda client you should now be able to
access the new Coda realm
- cfs lv /coda/codaserv1/
enjoy Coda.
for more information see http://www.coda.cs.cmu.edu.
16
Réplication du serveur :
Deux disques virtuels ont été créés sur le second serveur.
Fichier /etc/hosts des deux serveurs :
192.168.1.10 codaserv1
192.168.1.20 codaserv2
Configuration du réplicat :
$ vice-setup
Welcome to the Coda Server Setup script!
You already have a file /etc/coda/server.conf!
Continueing will remove that file.
Do you want to continue? [yes/no] yes
Setting up config files for a coda server.
Do you want the file /etc/coda/server.conf created? [yes]
What is the root directory for your coda server(s)? [/vice]
Setting up /vice.
Directories under /vice are set up.
Is this the master server, aka the SCM machine? (y/n) n
Enter the hostname of the SCM machine : codaserv1
Enter the update token that matches SCM codaserv1: ptutptut
Fetching needed files from SCM codaserv1.
Date: Tue 03/24/2009
07:22:10 Fetch failed with Permission denied
Done.
Now installing things specific to non-SCM machines...
A server needs a small log file or disk partition, preferrably on a
disk by itself. It also needs a metadata file or partition of approx
4% of your filespace.
Raw partitions have advantages because we can write to the disk
faster, but we have to load a copy of the complete RVM data
partition into memory. With files we can use a private mmap, which
reduces memory pressure and speeds up server startup by several
orders of magnitude.
Servers with a smaller dataset but heavy write activity will
probably benefit from partitions. Mostly read-only servers with a
large dataset will definitely benefit from an RVM data file. Nobody
has really measured where the breakeven point is, so I cannot
really give any hard numbers.
------------------------------------------------------WARNING: you are going to play with your partitions now.
verify all answers you give.
-------------------------------------------------------
17
WARNING: these choices are not easy to change once you are up and running.
Are you ready to set up RVM? [yes/no] yes
What will be your log file (or partition)? /coda/sdz0
The log size must be smaller than the available space in the log
partition. A smaller log will be quicker to commit, but the log
needs to be large enough to handle the largest transaction. A
larger log also allows for better optimizations. We recommend
to keep the log under 30M log size, many people have successfully
used as little as 2M, and 20M has worked well with our servers.
What is your log size? (enter as e.g. ’20M’) 20M
Where is your data file (or partition)? /coda/sdz1
The amount of RVM we need to store the metadata for a given
amount file space can vary enormously. If your typical data set
consists of many small files, you definitely need more RVM, but
if you tend to store large files (mp3s, videos or image data)
we don’t need all that much RVM.
Here are some random samples,
mp3 files
~0.08MB RVM per
jpeg images
~0.50MB RVM per
email folders ~37.8MB RVM per
netbsd-pkgsrc ~180MB RVM per
GB.
GB.
GB (maildir, 1 file per message)
GB (large tree but not much data)
To get a more precize number for your dataset there is a small
tool (rvmsizer) which can reasonably predict the amount of RVM
data we need for a file tree.
Remember that RVM data will have to be mmapped or loaded
into memory, so if anything fails with an error like
RVM_EINTERNAL you might have to add more swap space.
What is the size of you data file (or partition)
[32M, 64M, 128M, 256M, 512M, 768M, 1G]: 128M
-------------------------------------------------------WARNING: DATA and LOG partitions are about to be wiped.
---------------------------------------------------------- log area: /coda/sdz0, size 20M.
--- data area: /coda/sdz1, size 128 MB
Proceed, and wipe out old data? [y/n] y
LOG file has been initialized!
Rdsinit will initialize data and log.
This takes a while.
rvm_initialize succeeded.
18
Going to initialize data file to zero, could take awhile.
done.
rds_zap_heap completed successfully.
rvm_terminate succeeded.
RVM setup is done!
Directories on the server will be used to store container files
that hold the actual data of files stored in Coda. Directory
contents as well as metadata will be stored in the RVM segment
that we already configured earlier.
You should only have one container file hierarchy for each disk
partition, otherwise the server will generate incorrect
estimates about the actual amount of exportable disk space.
Where shall we store your file data [/vicepa]?
Shall I set up a vicetab entry for /vicepa (y/n) y
Select the maximum number of files for the server.
[256K, 1M, 2M, 16M]:
1M
Server directory /vicepa is set up!
You have set up linuxlap.arpagus.org
Your SCM is codaserv1.arpagus.org
Other config files will be fetched from the SCM by updateclnt.
To finish your server setup you should
start updateclnt as: updateclnt -h codaserv1.arpagus.org
start the auth2 server as: auth2 -chk
After that, there is still some configuration needed on the SCM before
this server can be started.
An entry for this host is needed in /vice/db/servers
Then all servers need to be shut down and restarted, as they need to
know about the new server.
After all that it _should_ be ok to start the new server and create
your first replicated volume.
Fichier /vice/db/servers sur le serveur 1 :
codaserv1
codaserv2
1
2
Fichier /vice/db/VSGDB sur les deux serveurs :
E0000104 codaserv1 codaserv2
E0000104 est une adresse de volume.
codaserv1:/home/slecaille# createvol_rep replicat codaserv1 linuxlap E0000104
Server E0000104 not in servers file
19
codaserv1:/home/slecaille# createvol_rep replicat codaserv1 linuxlap
Replicated volumeid is 7f000002
creating volume replicat.0 on codaserv1 (partition /vicepa)
V_BindToServer: binding to host codaserv1
creating volume replicat.1 on linuxlap (partition /vicepa)
V_BindToServer: binding to host linuxlap.arpagus.org
Fetching volume lists from servers:
V_BindToServer: binding to host linuxlap.arpagus.org
GetVolumeList finished successfully
linuxlap - success
V_BindToServer: binding to host codaserv1
GetVolumeList finished successfully
codaserv1 - success
V_BindToServer: binding to host codaserv1
VLDB completed.
<echo replicat 7f000002 2 01000003 02000001 0 0 0 0 0 0 >> /vice/db/VRList.new>
V_BindToServer: binding to host codaserv1
VRDB completed.
Do you wish this volume to be Backed Up (y/n)? [n] n
Sur le serveur 2 :
$ updatesrv
$ updateclnt
Creating /vice/spool
$ codasrv
Sur le serveur 1 :
$ createvol_rep coda.rep foo bar gorp 7F000003
2.2.2
Côté client
Information sur le paquet coda-client :
$ apt-cache show coda-client
Package: coda-client
Priority: optional
Section: net
Installed-Size: 4264
Maintainer: Jan Harkes <[email protected]>
Architecture: i386
Source: coda
Version: 6.9.4
Depends: libc6 (>= 2.3.6-6), libgcc1 (>= 1:4.1.1-12), liblwp2,
libncurses5 (>= 5.4-5), libreadline5 (>= 5.2), librpc2-5, librvm1,
libstdc++6 (>= 4.1.1-12)
Pre-Depends: debconf (>= 0.2.17)
Suggests: python-gtk2
Filename: coda/coda-client_6.9.4_i386.deb
Size: 1722422
MD5sum: 2758454c1f8be25356a933862fa269ee
SHA1: 4e7492f86f28b3caa38987dc3fd9acce285e4663
SHA256: 279dd8775cc0d99e0f7a6b8febc0c87288c304d01096dca4fb7719f696720193
Description: Client for the Coda distributed file system
20
Coda is an advanced distributed filesystem. It has been developed at CMU
by the systems group of M. Satyanarayanan in the SCS department.
.
This package provides the userspace binaries to run a Coda client. You might
also need to recompile a linux kernel to include a kernel module for Coda.
.
For more information go to http://www.coda.cs.cmu.edu/
Installation du paquet :
$ apt-get install coda-client
Configuration du client Coda :
$ venus-setup
Starting "dpkg-reconfigure coda-client"
Stopped /usr/sbin/venus (pid 7670).
update-rc.d: warning: /etc/init.d/coda-client missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Starting Coda client components: kernel venus
Date: Thu 03/19/2009
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
18:31:01
Coda Venus, version 6.9.4
/var/lib/coda/LOG size is 2706432 bytes
/var/lib/coda/DATA size is 10821392 bytes
Loading RVM data
Last init was Thu Mar 19 18:27:21 2009
Last shutdown was clean
Starting RealmDB scan
Found 1 realms
starting VDB scan
2 volume replicas
0 replicated volumes
0 CML entries allocated
0 CML entries on free-list
starting FSDB scan (4166, 100000) (25, 75, 4)
1 cache files in table (0 blocks)
4165 cache files on free-list
starting HDB scan
0 hdb entries in table
0 hdb entries on free-list
Mounting root volume...
Venus starting...
/coda now mounted.
Ajout du volume du serveur au client :
$ cfs lv /coda/192.168.1.10/
Status of volume 7f000000 (2130706432) named "/"
Volume type is ReadWrite
Connection State is Reachable
Reintegration age: 0 sec, time 15.000 sec
Minimum quota is 0, maximum quota is unlimited
Current blocks used are 2
The partition has 8014528 blocks available out of 9767184
21
Authentification :
$ clog [email protected]
Password:
2.3
Global File System
Nous testons ce système de fichier dans l’optique d’avoir deux nœuds.
2.3.1
Prérequis
On installe des paquets pour GFS et le cluster (sur tous les nœuds) :
# apt-get install gfs2-tools cman rgmanager
Chargement des modules (sur tous les nœuds) :
# modprobe gfs2
# modprobe lock_dlm
2.3.2
Configuration
Création de la configuration du cluster :
#
#
#
#
ccs_tool
ccs_tool
ccs_tool
ccs_tool
create -2 ClusterAsrall
addfence apc fence_apc ipaddr=192.168.10.48 user=apc password=apc
addnode node1 -n 1 -f apc port=10001
addnode node2 -n 2 -f apc port=10002
La configuration crée est placée dans /etc/cluster/cluster.conf que l’on peut remodifier (et
recopier sur tous les nœuds) :
$ cat /etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="ClusterAsrall" config_version="6">
<!--<cman two_node="1" expected_votes="1"/>-->
<cman expected_votes="1" />
<clusternodes>
<clusternode name="node1" votes="1" nodeid="1">
<fence>
<method name="single">
<device name="apc" port="10001"/>
</method>
</fence>
</clusternode>
<clusternode name="node2" votes="1" nodeid="2">
<fence>
<method name="single">
<device name="apc" port="10002"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice name="apc" agent="fence_apc" ipaddr="192.168.10.48" \
user="apc" password="apc"/>
22
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
On ajoute les différents nœuds (ici node1 et node2) dans /etc/hosts (sur tous les nœuds) :
# echo ’192.168.10.48
# echo ’192.168.10.224
2.3.3
node1’ >> /etc/hosts
node2’ >> /etc/hosts
Création des partitions
À cette étape il serait interessant de créer un LVM pour une plus grande maniabilité des partitions,
seuleument le LVM ne veut pas se créer en affichant une erreur qui laisse à penser que le disque dur est
trop petit. Néanmoins nous ne nous attardons pas trop sur la question car ce n’est pas indispensable
à l’utilisation de GFS.
Création du GFS, sur le nœud 1 :
# gfs2_mkfs -p lock_dlm -t ClusterAsrall:node1 -j 2 /dev/hda3
Sur le nœud 2 :
# gfs2_mkfs -p lock_dlm -t ClusterAsrall:node2 -j 2 /dev/sda8
2.3.4
Utilisation
On lance les services de gestion du cluster et des verrous :
# /etc/init.d/cman start
# /etc/init.d/rgmanager start
On monte la partition GFS, sur le nœud 1 :
# mount -t gfs2 /dev/hda3 /mnt/gfs/
Sur le nœud 2 :
# mount -t gfs2 /dev/sda8 /mnt/gfs/
Voila, arrivé là on s’attends à avoir un système de stockage distribué opérationnel, on fait donc
un test simple : on met un fichier sur le montage GFS d’un nœud et on regarde si on peut le voir de
l’autre et. . .non.
2.4
Ceph
On ajoute le dépôt de Ceph dans le fichier sources.list :
# echo "deb http://ceph.newdream.net/debian/ unstable main" \
>> /etc/apt/sources.list
Puis on installe :
# apt-get install ceph
On rempli le fichier de configuration comme suit :
23
$ cat /etc/ceph/ceph.conf
; global
[global]
restart on core dump = true
pid file = /var/run/ceph/$name.pid
; monitor
[mon]
mon data = /data/mon$id
[mon0]
host = serv02
mon addr = 192.168.10.48:6789
[mon1]
host = l2c4
mon addr = 192.168.10.224:6789
; mds
[mds]
[mds.serv02]
host = serv02
[mds.l2c4]
host = l2c4
; osd
[osd]
sudo = true
[osd0]
host = serv02
osd data = /dev/hda3
osd journal = /dev/umema
[osd1]
host = l2c4
osd data = /dev/sda8
osd journal = /dev/umema
On crée les systèmes de fichier :
# mkdir -p /usr/var/log/ceph/
# mkcephfs -c /etc/ceph/ceph.conf
/usr/bin/monmaptool --create --clobber --add 192.168.10.48:6789 \
--add 192.168.10.224:6789 --print /tmp/monmap.10982
/usr/bin/monmaptool: monmap file /tmp/monmap.10982
/usr/bin/monmaptool: generated fsid 4962e3e8-844d-3b65-6975-adec6d7b18b4
/usr/bin/monmaptool: monmap: epoch 1
/usr/bin/monmaptool: monmap: fsid 4962e3e8-844d-3b65-6975-adec6d7b18b4
/usr/bin/monmaptool: monmap: mon0 192.168.10.48:6789/0/0
/usr/bin/monmaptool: monmap: mon1 192.168.10.224:6789/0/0
/usr/bin/monmaptool: writing epoch 1 to /tmp/monmap.10982 (2 monitors)
max osd in /etc/ceph/ceph.conf is 1, num osd is 2
/usr/bin/osdmaptool: osdmap file ’/tmp/osdmap.10982’
/usr/bin/osdmaptool: writing epoch 1 to /tmp/osdmap.10982
=== mon1 === 09.03.23 16:23:28.103990 store(/data/mon1) mkfs
09.03.23 16:23:28.119884 store(/data/mon1) test -d /data/mon1 \
&& /bin/rm -r /data/mon1 ; mkdir -p /data/mon1
/usr/bin/mkmonfs: created monfs at /data/mon1 for mon1
24
=== mds.l2c4 ===
=== osd1 === ** WARNING: Ceph is still under heavy development, \
and is only suitable for **
**
testing and review. Do not trust it with important data.
error opening output file /usr/var/log/ceph/l2c4.11090
ceph version 0.7.1 (386814ff1af76f913fc4b7d3e9555fdd68ee91d2)
error opening output file /usr/var/log/ceph/l2c4.11090
ceph version 0.7.1 (386814ff1af76f913fc4b7d3e9555fdd68ee91d2)
09.03.23 16:23:28.522898 ebofs(/dev/sda8).mounted /dev/sda8 \
2560351 blocks, 10001.4 MB, no journal
created object store for osd1 fsid 4962e3e8-844d-3b65-6975-adec6d7b18b4 \
on /dev/sda8
**
Et on démarre Ceph :
# /etc/init.d/ceph start
=== mon1 === Starting ceph mon1 on l2c4...
=== mds.l2c4 === Starting ceph mds.l2c4 on l2c4...
** WARNING: Ceph is still under heavy development, and is only suitable for **
**
testing and review. Do not trust it with important data.
**
error opening output file /usr/var/log/ceph/l2c4.12616
ceph version 0.7.1 (386814ff1af76f913fc4b7d3e9555fdd68ee91d2)
error opening output file /usr/var/log/ceph/l2c4.12616
ceph version 0.7.1 (386814ff1af76f913fc4b7d3e9555fdd68ee91d2)
[...]
ceph version 0.7.1 (386814ff1af76f913fc4b7d3e9555fdd68ee91d2)
09.03.23 16:28:20.762070 3058637712 -- 0.0.0.0:6801/12640/0 >> \
192.168.10.224:6789/0/0 pipe(0xa2ce398 sd=-1 pgs=0 cs=0).fault first fault
2.5
Ceux que l’on garde
Coda et Lustre sont deux systèmes de fichier qui ont bien voulu fonctionner jusqu’au évaluations
de performance. Donc, c’est ceux là que nous avons conservé pour la partie suivante.
25
Chapitre
Évaluation des performances
3
Les tests de performances sont réalisés avec Iozone.
min
moy
max
NFS
9619,83 Ko/s
12063,55 Ko/s
13903,58 Ko/s
Coda
8192,87 Ko/s
11620,17 Ko/s
15057,25 Ko/s
Lustre
12094,05 Ko/s
12247,23 Ko/s
12170,64 Ko/s
16000
15000
14000
13000
12000
11000
10000
9000
8000
7000
6000
5000
4000
3000
2000
1000
0
min
moy
NFS
Coda
max
Lustre
Fig. 3.1 – Comparaison des performances entre NFS, Lustre et Coda.
26
Conclusion
Nous avons vu qu’il existe un nombre conséquent de systèmes de fichier orientés distribution et un
nombre suffisant de ces systèmes sont intéressants et amplement utilisés.
La plupart propose des solutions pour rendre les données hautement disponibles, ainsi que de la
réplication de données.
La difficulté de la mise en place varie selon les systèmes de fichiers. Ainsi, nous avons vu que Coda
été relativement simple à mettre en place, tandis que pour des systèmes comme OpenAFS, cela se
révèle bien plus complexe de par leur dépendances.
De la même manière, tous les systèmes de fichiers distribués ne sont pas documentés de manière
égale. Une bonne partie de la documentation sur OpenAFS date quelque peu mais est assez importante.
En revanche, la documentation sur GFS n’est pas très développé et peu se réveler contradictoire. Pour
ce qui est de Coda, le système est relativement bien documenté et nous avions également l’avantage
d’avoir une personne dans le groupe ayant déjà travaillé sur ce système.
27
Webographie
AFS
http://fr.wikipedia.org/wiki/Andrew_File_System
CephFS
http://kerneltrap.org/Linux/Ceph_Distributed_Network_File_System
CODAFS
http://www.coda.cs.cmu.edu/
http://linuxplanet.com/linuxplanet/tutorials/4481/1/
http://frederic.praca.free.fr/index.php?tag/CodaFS
POHMELFS
http://tservice.net.ru/~s0mbre/old/?section=projects&item=pohmelfs
GPFS
http://fr.wikipedia.org/wiki/General_Parallel_File_System
http://en.wikipedia.org/wiki/IBM_General_Parallel_File_System
Lustre
http://fr.wikipedia.org/wiki/Lustre_(systeme_de_fichier)
http://en.wikipedia.org/wiki/Lustre_(file_system)
Infinit
http://en.wikipedia.org/wiki/Infinit
PVFS
http://en.wikipedia.org/wiki/Parallel_Virtual_File_System
The Circle
http://en.wikipedia.org/wiki/The_Circle
OneFS
http://en.wikipedia.org/wiki/OneFS_distributed_file_system
HAMMER
http://en.wikipedia.org/wiki/HAMMER
GlusterFS
http://en.wikipedia.org/wiki/GlusterFS
28