lindev.fr

Aller au contenu | Aller au menu | Aller à la recherche

14 juil. 2015

Monter un Bucket S3 sur un serveur Débian

S3, espace de stockage illimité chez Amazon avec des tarifs défiant toute concurrence. Qui en plus de son prix, offre des options plus qu’intéressantes...

  • chiffrement des données
  • versioning automatique
  • rotation ou mise en glacier des vielles versions ..


Etc ...
Je ne vais pas détailler ces options dans ce billet, mais juste expliquer comment monter un Bucket S3 ( répertoire S3 ) sur une machine / serveur linux afin d'y accéder comme un simple montage réseau . Nous verrons également comment le monter automatiquement via une simple ligne dans le fstab.

Prérequis

Nous allons utiliser fuse pour monter ce bucket, et l'authentification peut être chiffrée selon vos options, nous allons installer tout ce qu'il nous faut...

sudo apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool fuse-utils pkg-config libssl-dev

S3fs-fuse

Maintenant, S3 + fuse n'étant pas un "système de fichiers" conventionnel, nous allons utiliser l'outil s3fs-fuse disponible sur un dépôt Gît

cd /usr/local/src/
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl 
make
sudo make install

Authentification S3

Sauf si votre serveur se trouve sur la plateforme Amazon et que vous lui avez donné des droits spécifiques (S3) à sa création, il vous faudra obligatoirement préciser le couple "Access Key / Secret Key" récupéré sur la plateforme Amazon.
Personnellement, je donne à mes utilisateurs un minimum de droits. Dans mon exemple donc, mon utilisateur fictif "John Doe" aura uniquement accès à son bucket, qui sera appelé "jdbucket".
Nous allons donc éditer le fichier qui va lister les authentifications passwd-s3fs.

sudo vim /etc/passwd-s3fs

Le contenu devra respecter la forme suivante bucketName:accessKeyId:secretAccessKey :

jdbucket:AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Nous allons maintenant retirer un maximum de droits au fichier passwd-s3fs

sudo chmod 600 /etc/passwd-s3fs

Montage

Ne nous reste plus qu'à monter notre bucket jdbucket . Disons sur le répertoire /var/mntJdBucket

Commençons par créer le répertoire de montage.

sudo mkdir /var/mntJdBucket; sudo chmod 777 /var/mntJdBucket

Testons le montage avant de la mettre dans le fstab

/usr/bin/s3fs jdbucket /var/mntJdBucket -ouse_cache=/tmp,passwd_file=/etc/passwd-s3fs

Note: Spécifier le fichier de mot de passe S3 n'est pas obligatoire.
Si tout va bien .. vous voilà connecté à votre S3 !
Ne vous faite pas berner par le débit ( important ), ici le débit apparent sera celui de votre disque dur, car l'option use_cache=/tmp utilise un répertoire local comme cache entre votre système et le S3.

Fstab

Ne nous reste plus qu'à configurer notre montage dans le fstab, afin que le montage se fasse à chaque démarrage.

sudo vim /etc/fstab


Voici la ligne qu'il faut ajouter

#Fuse
s3fs#jdbucket	/var/mntJdBucket	fuse	rw,_netdev,use_cache=/tmp,allow_other,passwd_file=/etc/passwd-s3fs	0	0

Au niveau des options, du classique, droits en lecture et écriture pour les utilisateurs, attente de la connexion réseau pour tenter de monter le bucket, configuration du répertoire de cache et du fichier de mot de passe ( toujours facultatif )

Conclusion

Nous avons maintenant fait le tour du montage S3 sur une machine debian, rien de bien méchant. Cependant, suite à mes tests, je conseille d'utiliser les commandes s3cmd pour envoyer de gros fichiers ( plusieurs Gb ) celle-ci étant plus adaptée.

N'hésitez pas si vous avez des questions.

Ch.

13 fév. 2014

iSCSI - target et utilisation sous Proxmox

Pour rappel, iSCSI est un protocole de stockage en réseau basé sur le protocole IP . Bref cela permet de présenter au(x) clients un disque SCSI via le réseau . Le système client le voit comme un disque SCSI local et peut donc le monter et l'utiliser de la même manière.

ça sert à quoi ?

Un cas d'utilisation ( qui sera présenter ici ), vous avez un environnement de serveurs virtualisés, répartis sur deux nœuds ( serveurs hôtes ).
Sans baie de stockage ou autre système d’espace disque partagé , il est impossible de mettre en place une "haute dispo" (HA), les disques des VM se trouvant sur l'un ou l'autre des nœuds, si l'un des deux tombe, les disques des VM ne sont plus accessibles, aucune migration n'est alors possible = coupure de service

Mettre en place un disque iSCSI sur un troisième serveur est donc un moyen de combler ce manque à moindre cout ! ( pour ce qui est des performances, cela va grandement dépendre du réseau local en place, l'idéal étant d'avoir des liens directs entre le serveur iSCSI et les nœuds qui doivent y accéder, ainsi que la gestion du stockage de ce troisième nœud: disque(s) SAS SATA IDE .. en Raid 0,1,5 ... etc ... ).

Le serveur iSCSI

Pour les tests, mon serveur ( serveur "Cible" ou encore "Traget" dans le jargon iSCSI ) est une simple machine sous debian Wheezy avec un disque de 1To, identifié par /dev/sdf.
commençons par installer les outils nécessaire pour configurer la cible

apt-get install iscsitarget-dkms

iSCSI

Le fichier de configuration se trouve à l'endroit suivant /etc/iet/ietd.conf .
Commençons par en faire une copie .

cp /etc/iet/ietd.conf /etc/iet/ietd.conf.orig

Nous pouvons donc maintenant modifier sereinement le fichier d'origine pour déclarer le disque iSCSI

vim /etc/iet/ietd.conf

Nous pouvons présenter plusieurs types de "volumes", un périphérique de type block ( ce sera notre cas ici ), un volume LVM , un volume RAID.

Nous allons donc dans notre fichier ietd.conf définir notre cible (target).
Ajoutons donc les lignes suivantes à la fin du fichier de configuration

Target iqn.2014-02.lindev.fr:storage.lun0
        Lun 0 Path=/dev/sdf,Type=fileio
        Alias Lun0

ATTENTION : le volume paramétré (ici /dev/sdf) ne doit pas être monté !

Les paramètres utilisés :

  • Target Nom unique de la cible iSCSI normalisé iqn.yyyy-mm.<reversed domain name>:identifier
  • Lun X "X étant le numéro de Lun, la numérotation DOIT commencer à 0"
  • Alias "Facultatif ... ai-je vraiment besoin d'expliquer ce qu'est un Alias ? "


Il ne reste plus qu'à redémarrer le service

service iscsitarget restart

Le client

Avant de nous attaquer au cas d'utilisation proxmox, voyons comment utiliser le volume iSCSI sur un client standard .. ( une autre machine linux )

Commençons par installer les utilitaires nécessaires

apt-get install open-iscsi

Nous allons maintenant scanner le serveur ( ici 10.0.0.213 ) pour savoir quel(s) volume(s) sont disponibles

iscsiadm -m discovery -t st -p 10.0.0.213

Ce qui nous donne

10.0.0.213:3260,1 iqn.2014-02.lindev.fr:storage.lun0

Pour nous connecter au volume iSCSI nous allons utiliser la commande suivante

iscsiadm -m node --targetname "iqn.2014-02.lindev.fr:storage.lun0" --portal "10.0.0.213:3260" --login

Ce qui donne

Logging in to [iface: default, target: iqn.2014-02.lindev.fr:storage.lun0, portal: 10.0.0.213,3260] (multiple)
Login to [iface: default, target: iqn.2014-02.lindev.fr:storage.lun0, portal: 10.0.0.213,3260] successful.

Pour voir les sessions actives

iscsiadm -m session

resultat :

tcp: [1] 10.0.0.213:3260,1 iqn.2014-02.lindev.fr:storage.lun0

Au moment de la connexion du volume iSCSI, un nouveau "device" a normalement été créé automatiquement , il suffit de regarder dans les log le nom de ce "device"

tail -n 50 /var/syslog

dans mon cas :

Feb 14 09:56:17 debian7-cdsl kernel: [89543.405273] scsi8 : iSCSI Initiator over TCP/IP
Feb 14 09:56:17 debian7-cdsl kernel: [89543.660414] scsi 8:0:0:0: Direct-Access     IET      VIRTUAL-DISK     0    PQ: 0 ANSI: 4
Feb 14 09:56:17 debian7-cdsl kernel: [89543.660739] sd 8:0:0:0: Attached scsi generic sg7 type 0
Feb 14 09:56:17 debian7-cdsl kernel: [89543.660994] sd 8:0:0:0: [sdg] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
Feb 14 09:56:17 debian7-cdsl kernel: [89543.661098] sd 8:0:0:0: [sdg] Write Protect is off
Feb 14 09:56:17 debian7-cdsl kernel: [89543.661102] sd 8:0:0:0: [sdg] Mode Sense: 77 00 00 08
Feb 14 09:56:17 debian7-cdsl kernel: [89543.661252] sd 8:0:0:0: [sdg] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Feb 14 09:56:17 debian7-cdsl kernel: [89543.677076]  sdg: unknown partition table
Feb 14 09:56:17 debian7-cdsl kernel: [89543.677970] sd 8:0:0:0: [sdg] Attached SCSI disk
Feb 14 09:56:17 debian7-cdsl iscsid: Connection1:0 to [target: iqn.2014-02.lindev.fr:storage.lun0, portal: 10.0.0.213,3260] through [iface: default] is operational now

Le volume iSCSI est donc attaché à /dev/sdg qui est donc utilisable comme n'importe quel disque local !

Monter automatiquement

Pour monter le volume automatiquement au démarrage du système, voici la ligne que je devrais ajouter au fstab

/dev/Lun0/	/mnt/diskLun0	auto	_netdev	0	0

Proxmox

Le but de ce disque ( dans cet article ), n'est pas de l'utiliser sur un poste , mais sur un cluster Proxmox .

A partir de maintenant tout se passe sur l'interface d'administration proxmox !
Je parts du principe ou le cluster proxmox est en place et fonctionnel .

Déclarer le disque iSCSI

Commençons par déclarer au cluster proxmox, le disque iSCSI ... suivez le guide ...

Selection_201.png
Selection_202.png
Selection_203.png
Voilà , à ce moment là, proxmox possède un nouveau disque "local" qui en fait est un disque iSCSI ( on est au même stade que la manip "client" ci-dessus )
Pour le rendre exploitable pour y mettre les disques des VM , il faut exploiter ce disque en y créant un volume LVM dessus .
Encore une fois .. suivez le guide ;)

Selection_204.png
Selection_205.png

Démo

Après avoir créé ou migré vos disques de VM sur ce nouveau volume, la migration à chaud est possible .. voici une démo pour l'occasion .