— MAJ 13/02/2017 —
Bonjour à tous et à toutes,
Suite à un échange avec un de nos lecteurs, j’ai effectué une modification au niveau des fichiers de configuration de keepalived. En effet, lors de la bascule en cas de perte du SAN 1 (perte de réseau par exemple), le SAN 2 prend le relai de façon transparente. Mais lorsque le SAN 1 revient et tente de reprendre sa place, il était nécessaire de redémarrer les services iSCSI entrainant une coupure de ces derniers.
Le paramètre ajouté est : « nopreempt ». Ce paramètre fait en sorte que lorsque le SAN 1 revient dans la boucle, le SAN 2 reste le possesseur de l’adresse IP virtuelle.
Merci donc à Jordan qui a permit d’améliorer ce tuto!
— MAJ 13/02/2017 —
Aujourd’hui je vous propose le must en terme de serveur Storage Area Network (SAN) en open source! Quoi ? En français, un SAN est un réseau de stockage spécialisé permettant de mutualiser des ressources de stockage. Il est différent du NAS (Network attached storage) par un accès bas niveau aux disques. Pour simplifier, le trafic sur un SAN est très similaire aux principes utilisés pour l’utilisation des disques internes (ATA, SCSI)… Pour en savoir plus, allez faire un tour sur Wikipedia.
Nous allons donc créer 2 serveurs de stockage qui seront répliqués en temps réel (synchrone) ou en décalé (asynchrone) pour les sites distants par exemple.
Dans un premier temps, nous verrons comment installer simplement et rapidement 1 SAN, puis nous verrons comment le synchroniser avec un second.
Le but ultime étant de fournir un ensemble de données cohérent en haute disponibilité.
Si vous aimez la lecture, vous allez être servi…
Installation d’un SAN
Qu’est-ce qu’un SAN, me direz-vous, et bien c’est un ensemble de disques durs accessibles depuis un réseau (même une box internet…) . Contrairement au NAS qui fournit un « partage » réseau d’un (ou plusieurs) répertoire(s) de son/ses disque(s), le SAN permet de « partager » un ou plusieurs disques (physiques ou virtuels) eux-mêmes.
Prérequis
- La dernière version de OpenMediaVault (basé sur Linux Debian[le top]) téléchargeable ici
- Un PC (physique ou virtuel) avec plusieurs disques durs
Installation
Après avoir téléchargé le fichier ISO d’OpenMediaVault, gravez-le (si vous devez l’installer sur un PC physique).
Pour mon exemple, je vais utiliser la machine virtuelle suivant :
Démarrons notre Machine pour lancer l’installation.
À part entrer la langue d’utilisation, le mot de passe du superutilisateur (administrateur root) et le choix du serveur de packages Debian, il n’y a rien de particulier à faire.
Une fois la machine redémarrée, la configuration utilisateur est la suivante :
- Pour l’interface xterm (terminal linux ligne de commande) :
Utilisateur : root Mot de passe : [LE MOT DE PASSE SAISI LORS DE L'INSTALLATION]
- Pour l’interface web :
Utilisateur : admin Mot de passe : openmediavault
Paramétrage de votre SAN
Ça y est! Votre SAN est prêt à être utilisé.
Auparavant, nous allons le paramétrer afin qu’il réponde à nos besoins.
Connexion à l’interface de gestion WebUI
Pour se connecter, il faut récupérer l’adresse IP du serveur. Pour cela, regardez sur l’écran de la machine installée, l’adresse IP apparaît :
Pour ce cas, l’IP est : 192.147.147.47
Rendez-vous donc sur la page web : http:/192.147.147.47 et logguez vous avec le couple login/password suivant :
Utilisateur : admin Mot de passe : openmediavault
Après connexion, nous retrouvons l’interface de gestion d’OpenMediaVault qui, je trouve, est d’assez belle facture!
Pensez à changer le mot de passe de connexion du compte « admin » pour plus de sécurité. Pour cela, rendez-vous dans le Menu de gauche Système-> »Paramètres généraux », onglet « Sécurité Administrateur » et tapez 2 fois votre nouveau mot de passe, puis cliquez sur OK.
De plus, il faut que vous renommiez le SAN de façon à ce qu’il soit « unique » dans votre réseau. Allez dans le Menu de gauche Système->Réseau et changez le nom de l’hôte.
Paramétrage réseau
Rendez-vous dans le Menu gauche, Système->Réseau, puis dans l’onglet « Interfaces » et sélectionnez la 2 ème interface eth1
Cliquez sur « Modifier »
Validez et faites de même pour la 3ème interface eth2
(Attention, pas la même adresse IP)
Paramétrage du SSH
Dans le Menu de gauche, cliquez sur Services->SSH.
Cochez « Activer » et cliquez sur OK.
Testez maintenant la connexion SSH en utilisant votre logiciel client SSH préféré (pour ma part, ça sera putty). Pour cela, entrez l’adresse IP du serveur et connectez-vous avec le couple login/mot de passe suivant :
Laissez éventuellement la fenêtre ouverte, nous aurons à nous en servir un peu plus loin…
Utilisateur : root Mot de passe : [LE MOT DE PASSE SAISI LORS DE L'INSTALLATION]
Installation des plugins
Nous allons aussi installer les plugins qui nous intéressent, à savoir LVM2 et iSCSITarget. Pour cela, rendez-vous dans le Menu de gauche Système->Plugins, puis en maintenant la touche « Ctrl » gauche, cliquez sur les packages nommés :
- openmediavault-iscsitarget
- openmediavault-lvm2
L’installation débute
Après l’installation, 2 nouveaux menus sont apparus :
- Stockage-> »Gestion des volumes logiques »
- Services->iSCSI
Configuration des Volumes Logiques
Rendez-vous dans le Menu de gauche, Stockage-> »Gestion des volumes logiques »
Création des Volumes Physiques (PV dans le jargon « LVMique »)
Sélectionnez un disque (on va les faire dans l’ordre, ici le 1er), puis cliquez sur OK.
Confirmer la création.
Faites ceci pour tous les autres disques! A la fin, vous obtenez le résultat suivant :
Création des Groupes de Volumes (VG dans le jargon « LVMique »)
Sélectionnez l’onglet « Groupes de volumes »
Sélectionnez les disques qui vont faire partie du groupe (ici, tous les disques), nommez le groupe (ici « DATAS ») puis cliquez sur OK.
Confirmez
Et voilà le groupe « DATAS » est créé!
Création des Volumes Logiques (LV dans le jargon LVMique)
Sélectionnez l’onglet « Volumes logiques »
Nommez votre volume, sélectionnez le groupe auquel il appartient et définissez-lui une taille. Cliquez sur OK pour valider.
Répétez cette opération afin de créer les Volumes Logiques souhaitez (ici 3 volumes nommés D1, D2 et D3).
Voilà! C’est tout pour la création de volumes logiques! Nous allons passer maintenant à l’étape suivante, et c’est là que les choses vont se compliquer un peu.
Installation du DRBD
Introduction
Le DRBD permet de synchroniser par le réseau 2 périphériques de stockage entre eux, à l’instar d’un RAID1 mais au niveau réseau. Ces périphériques peuvent être :
- 1 disque entier
- 1 partition d’un disque
- 1 volume logique (LV) créé avec LVM
Petit rappel : Un RAID1 est un Miroir (tout ce qui est écrit sur un disque est automatiquement écrit sur l’autre) entre 2 disques durs physiques sur une même machine. Cela permet une continuité de travail, en cas de plantage d’un des 2 disques, de façon transparente.
Avec le DRBD, on peut ainsi aisément synchroniser 1 disque dur entier avec une partition d’un autre disque ou un volume logique ou même un autre disque entier. Attention toutefois à la taille des disques (ou partitions) qui doivent être identiques…
Installation des Packages
Connectez-vous à l’aide de votre logiciel client SSH préféré (putty pour moi) comme plus haut (chapitre Paramétrage du SSH) !
apt-get -y install drbd8-utils
Lecture des informations d'état... Fait Paquets suggérés : heartbeat Les NOUVEAUX paquets suivants seront installés : drbd8-utils 0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 0 o/206 ko dans les archives. Après cette opération, 606 ko d'espace disque supplémentaires seront utilisés. Sélection du paquet drbd8-utils précédemment désélectionné. (Lecture de la base de données... 53081 fichiers et répertoires déjà installés.) Dépaquetage de drbd8-utils (à partir de .../drbd8-utils_2%3a8.3.7-2.1_amd64.deb) ... Paramétrage de drbd8-utils (2:8.3.7-2.1) ...
Voilà! DRBD est maintenant installé! Simple non? C’est maintenant que les choses vont se gâter!
Création d’un 2e SAN
Avec la même procédure que précédemment, créez un nouveau SAN (physique ou Virtuel) avec, si possible les même caractéristiques techniques! En effet, pour synchroniser 2 disques ensemble, il faut qu’ils aient la même taille…
Les adresses IP 2 (eth1) et 3 (eth2) seront :
- eth1 : 192.168.98.2
- eth2 : 192.168.99.2
Liaison (Synchronisation) des 2 SANs
En théorie, vous devriez avoir 2 SANs identiques avec le même nombre de volumes logiques et DRBD d’installés. Ce sont précisément ces volumes logiques que nous allons synchroniser.
Tout va maintenant se passer dans votre logiciel client SSH.
Pour que tout soit plus simple, nous allons les lier entre eux en SSH afin de pouvoir tout exécuter depuis le 1er SAN.
Créer une liaison SSH
Connectez-vous en SSH sur le SAN N°1
ssh-keygen -t dsa -b 1024
Appuyez sur « Entrée » puis y à la réponse à la question « Enter file in which to save the key (/root/.ssh/id_rsa): »
Lorsqu’il vous demande la passphrase, appuyez sur « Entrée » sans taper de passphrase.
Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 4e:23:77:55:d9:68:ef:3c:79:a3:2e:1c:c9:73:f1:01 root@san-test-1 The key's randomart image is: +--[ DSA 1024]----+ | .+ | | E+ .| | .... | | . . ..| | . S o . ooo| | = o = . =+| | . . + . +| | o . | | o. | +-----------------+
Copiez maintenant le fichier « /root/.ssh/id_dsa.pub » dans le SAN N°2 avec la commande suivante :
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.147.147.47
The authenticity of host '192.147.147.47 (192.147.147.47)' can't be established. RSA key fingerprint is 8d:b1:09:9c:8e:3c:4d:27:4a:9b:02:9c:c6:f0:9c:c6. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.147.147.47' (RSA) to the list of known hosts. root@192.147.147.47's password: Now try logging into the machine, with "ssh 'root@192.147.147.47'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
Désormais, lorsque vous exécuterez la commande suivante, il ne vous sera plus demandé de mot de passe distant :
root@san-test-1:~# ssh root@192.147.147.47
Linux san-test-2 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Dec 17 19:36:24 2012 root@san-test-2:~#
On remarque que nous sommes loggués sur le 2e SAN !
Bien, nous pouvons donc continuer notre quête du GRAAL…
Création de ressources DRBD
Configuration préalable
Une fois connecté sur votre SAN N°1, éditez le fichier /etc/hosts avec la commande suivante :
nano /etc/hosts
Ajoutez les lignes suivantes :
Remplacez les IP avec celles correspondantes à votre plan d’adressage ainsi que le nom des SANs
192.147.147.30 san-test-1 192.147.147.47 san-test-2
Après modification, fermez « nano » en appuyant simultanément sur les touches « Ctrl » + X, puis appuyez sur O pour sauvegarder, puis Entrée et enfin Entrée pour valider.
Éditez maintenant le même fichier sur le SAN N°2 depuis le SAN N°1 en tapant la commande :
ssh root@san-test-2
Puis
nano /etc/hosts
Sauvegardez comme précédemment, puis sortez du SAN N°2 en appuyant simultanément sur les touches « Ctrl » + D.
Paramétrage des resources
Si vous tapez la commande suivante, vous aurez la liste des volumes logiques des 2 machines :
echo "SAN 1" && lvs && echo "SAN 2" && ssh root@san-test-2 "lvs"
Si tout s’est bien passé, vous devriez avoir cela :
SAN 1 LV VG Attr LSize Origin Snap% Move Log Copy% Convert D1 DATAS -wi-a- 17,72g D2 DATAS -wi-a- 40,64g D3 DATAS -wi-a- 27,62g SAN 2 LV VG Attr LSize Origin Snap% Move Log Copy% Convert D1 DATAS -wi-a- 17,72g D2 DATAS -wi-a- 40,64g D3 DATAS -wi-a- 27,62g
Créons maintenant la ressource concernant D1. Pour cela, éditez le fichier suivant :
nano /etc/drbd.d/rD1.res
Puis saisissez le code suivant :
resource rD1 { protocol C; device /dev/drbd0; disk /dev/DATAS/D1; # partition a prendre en compte meta-disk internal; startup { become-primary-on both; } disk { on-io-error detach; } net { allow-two-primaries; after-sb-0pri discard-least-changes; after-sb-1pri violently-as0p; after-sb-2pri violently-as0p; rr-conflict violently; } syncer { rate 100M; } on san-test-1 { # nom du serveur 1 address 192.168.98.1:7788; # adresse ip et port d'écoute } on san-test-2 { # nom du serveur 2 address 192.168.98.2:7788; # adresse ip et port d'écoute } }
Puis sauvegardez comme précédemment!
Exécutez la commande suivante pour copier ce fichier sur le SAN N°2 :
scp /etc/drbd.d/rD1.res root@san-test-2:/etc/drbd.d/rD1.res
D1.res 100% 840 0.8KB/s 00:00
Petites choses à savoir concernant le paramétrage d’une resource
Comme vous avez pu les saisir ci-dessus, une ressource est définie selon plusieurs paramètres que je vais vous expliquer ici.
- Le nom de la ressource :
resource rD1
- le protocole de synchronisation :
protocol C
Il y a 3 types de protocoles :
– A : L’écriture des données est considérée complète si elle est effectivement écrite sur le disque local ET qu’elle a été transmise dans le tampon TCP (dans les tuyaux réseau). On parle de transfert asynchrone (en décalé).
Cette solution est utile dans le cas de réseaux distants séparés par une longue distance (par connexion internet, par exemple).
Précision : Dans le cas d’un fail-over (crash du SAN principal, par exemple), des données seront inévitablement perdues!
Pour ce cas, il existe une solution qui serait d’utiliser un Proxy DRBD qui va stocker les informations à transmettre au SAN secondaire et donc ne pas perdre de données, malgré un temps de transfert qui pourrait être long. On peut d’ailleurs utiliser le Proxy DRBD pour qu’il compresse et décompresse les données envoyées au serveur secondaire pour économiser encore de la bande passante. Mais ceci est un autre problème que je n’aborderais que si vous êtes demandeurs!- B : L’écriture des données est considérée complète si elle est effectivement écrite sur le disque local ET qu’elle a été écrite dans le cache du disque distant (mémoire tampon avant écriture réelle dans le disque). On parle de transfert semi-synchrone (Memory Synchronous).
Cette solution est utile dans le cas de réseaux distants séparés par une courte distance.
Précision : Dans le cas d’un fail-over, il n’y aura (normalement selon DRBD.org) aucune perte de données, sauf si bien sûr la coupure des 2 SAN intervient simultanément!!! Toutefois, ce qui aura été écrit sur le SAN principal sera récupéré par le SAN secondaire par la suite…
La solution pour ce cas est de bien onduler les 2 SANs!- C : L’écriture des données est considérée complète si elle est effectivement écrite sur le disque local ET qu’elle a été écrite sur le disque distant. On parle de transfert synchrone (en temps réel).
Cette solution est utile dans le cas de réseaux locaux. Elle est aussi la plus fréquente en terme d’utilisation.c
Précision : La perte d’un seul SAN est garantie de ne pas conduire à une perte de données! La perte de données est, bien sûr, inévitable même avec ce protocole de réplication si les deux SANs (ou leurs sous-systèmes de stockage) sont irrémédiablement détruits en même temps.
La solution pour ce cas est de bien onduler les 2 SANs! - Device :
device /dev/drbd0
C’est l’identifiant du disque physique final. Il doit être unique. De ce fait, les ressources suivantes pourront être affectées aux N° de devices suivants (/dev/drbd1 , /dev/drbd2 , …) - Le Disque :
disk /dev/DATAS/D1
On pourrait aussi affecter un disque physique, comme /dev/sdb, mais on a opté pour des disques en LVM qui nous permettent une plus grande souplesse! - Les Meta-Données de disque :
meta-disk internal
Il existe plusieurs façon de stocker les métadonnées des disques :
– internal : Ce signifie que la dernière partie de l’unité de support est utilisé pour stocker les métadonnées.
– device [index] : Vous pouvez utiliser un périphérique unique (un disque à part entière) en mode bloc pour stocker les métadonnées de plusieurs ressources DRBD. - Les paramètres startup :
become-primary-on both
Cette propriété définie que les 2 SANs démarreront en tant que serveur primaire (dans le cas d’une configuration Actif-Actif). On pourra définir 1 SAN primaire et 1 SAN secondaire si on le souhaite. Dans ce cas, il faudra spécifier le nom du SAN à la place de « both ». - Les paramètres disk :
on-io-error detach
Cette propriété permet au moteur DRBD de savoir ce qu’il doit faire en cas d’erreur de lecture ou d’écriture. Ici, on détachera le disque en erreur, ce qui équivaut au débranchement d’un disque d’une grappe. - Les paramètres net : Ce sont des propriétés permettant de faire des réglages fins du DRBD. Reportez-vous à la documentation DRBD (en Anglais) pour plus d’informations!
- Les paramètres syncer :
rate 100M
Ces paramètres servent à régler la bande passante utilisée par la synchronisation des données. - Les paramètres on [nom du SAN] :
address [IP de synchro du SAN]:[Port d'écoute]
Ces paramètres servent à régler la liaison de synchronisation entre les ressources respectives des 2 SANs. Vous pouvez dédier une carte réseau supplémentaire sur chaque SAN à la synchronisation. Il est très important de savoir que pour une ressource, 1 port d’écoute est attribué. Concernant les adresses IP, il faut qu’elles soient sur le même plan d’adressage!!!
Concernant les paramètres device, disk et meta-disk, ils peuvent être différents selon le SAN! Pour qu’un réglage différent soit pris en compte, il faut reporter ces lignes dans les paramètres on [nom du SAN] des SANs respectifs!
Par exemple :
resource rD1 {
protocol C;startup {
become-primary-on both;
}
disk {
on-io-error detach;
}
net {
allow-two-primaries;
after-sb-0pri discard-least-changes;
after-sb-1pri violently-as0p;
after-sb-2pri violently-as0p;
rr-conflict violently;
}
syncer {
rate 100M;
}
on san-test-1 { # nom du serveur 1
address 192.168.98.1:7788; # adresse ip et port d’écoute
device /dev/drbd0;
disk /dev/DATAS/D1; # partition a prendre en compte
meta-disk internal;
}
on san-test-2 { # nom du serveur 2
address 192.168.98.2:7788; # adresse ip et port d’écoute
device /dev/drbd5;
disk /dev/DATAS/D2; # partition a prendre en compte
meta-disk /dev/sdc8;
}
}
Après une bonne prise de tête sur les particularités, passons aux étapes suivantes
Démarrage des services
Nos 2 SANs sont prêts à démarrer. Il faut maintenant initialiser la ressource que l’on vient de créer. Pour cela, exécutons ces commandes :
drbdadm create-md rD1 && ssh root@san-test-2 "drbdadm create-md rD1"
--== Thank you for participating in the global usage survey ==-- The server's response is: you are the 20455th user to install this version Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. success NOT initialized bitmap Writing meta data... initializing activity log New drbd meta data block successfully created.
Nous avons créé les ressources sur les 2 SANs en une seule commande. C’est pour cela que nous retrouvons certaines lignes en double.
modprobe drbd && ssh root@san-test-2 "modprobe drbd" drbdadm attach rD1 && ssh root@san-test-2 "drbdadm attach rD1" drbdadm connect rD1 && ssh root@san-test-2 "drbdadm connect rD1"
Vérifions maintenant ce que ces 3 commandes successives ont fait :
cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:18582948
Nous voyons dans le résultat, que le SAN N°1 est secondaire (1er Secondary), que le SAN N°2 l’est aussi (2e Secondary), que le disque drbd0 (1er caractère de la ligne en rouge) est inconsistant sur les SAN N°1 et N°2.
Avec la commande qui va suivre, nous allons rendre le SAN N°1 comme Primaire, ce qui aura pour conséquence de rendre disque drbd0 UpToDate (à jour) sur ce SAN, et de lancer la synchronisation :
drbdadm -- --overwrite-data-of-peer primary rD1
Vérifions maintenant l’effet produit par cette commande :
cat /proc/drbd
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ns:33648 nr:0 dw:0 dr:33848 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:18549300 [>....................] sync'ed: 0.2% (18112/18144)M finish: 19:19:19 speed: 244 (240) K/sec
Les données du SAN N°2 seront inconsistantes tout le temps de la synchronisation initiale (qui peut d’ailleurs être très longue).
Petite astuce pour que la synchro se fasse un peu plus rapidement jusqu’au prochain redémarrage que vous effectuerez :
drbdsetup /dev/drbd0 syncer -r 4194304k
Cela aura pour effet de synchroniser les serveurs à la vitesse la plus importante!
Une fois les SANs synchronisés, nous aurons le résultat suivant :
version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r---- ns:18582948 nr:0 dw:0 dr:18583248 al:0 bm:1135 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
Que reste-t-il à faire ?
Il ne vous reste qu’à répéter ces opérations pour les autres ressources (rD2 et rD3) et vos SANs seront répliqués!
Maintenant que toutes nos ressources existent, il faut pouvoir les utiliser!
Utilisation des ressources dans différents environnements
Les ressources créées, nous allons voir comment nous pouvons les utiliser sur notre réseau ou même sur les SANs eux-mêmes !
Quelles sont mes options ?
Partages réseau
Nous pouvons créer des partages réseau. Nous avons les choix entre différentes solutions :
- Le partage NFS
Nous pouvons partager un des disques en NFS pour les ordinateurs sous Linux (Mac OS et Windows possible).
Pour effectuer vos partages, je vous invites à suivre cet excellent post! - Le partage Samba
Pour partager vos ressources avec Samba, suivez ce tuto! - Le iSCSI
Pour le iSCSI, c’est moi qui m’en occupe ci-dessous!
Partager un disque dur avec iSCSI
Bon, vous allez me dire, c’est quoi iSCSI ? Et bien je vais vous répondre. Si s i!
Le iSCSI est un protocole qui va vous permettre non pas de partager un dossier ou le contenu d’un disque, mais le disque lui-même comme faisant partie intégrale du système le recevant! En d’autres termes, c’est comme si vous preniez le disque que vous partagez et que vous le mettiez physiquement dans l’ordinateur hôte ! Flex non?
Pour info : un disque alloué à un ordinateur devient le disque DE l’ordinateur. On ne peu plus s’y connecter depuis un autre ordinateur !!!
Bon allez, je vous sens trépigner d’impatience. On y va…
1ère Étape, on paramètre le disque source
On paramètre le disque source afin de le rendre disponible aux ordinateurs. Pour cela, procédez comme suit :
- Connectez-vous à l’interface web du SAN N°1 avec votre navigateur
- Dans le Menu gauche, Services->iSCSI, Activez l’option puis cliquez sur OK
- Connectez-vous sur le 2e SAN et faites de même
- Rendez-vous maintenant en SSH sur le SAN N°1
- Éditez le fichier /etc/iet/ietd.conf
nano /etc/iet/ietd.conf
En dessous de # Target options, ajoutez les lignes suivantes :
Target iqn.2012-12.san-tests:rD1.rD1 Lun 0 Path=/dev/drbd0,Type=blockio Alias rD1
Ajoutez les autres ressources (si vous en ressentez le besoin)
- Redémarrez iSCSI
service iscsitarget restart
Removing iSCSI enterprise target devices: :. Stopping iSCSI enterprise target service: :. Removing iSCSI enterprise target modules: ... (warning). . Starting iSCSI enterprise target service:. .
- Copiez le fichier de configuration iSCSI depuis le SAN N°1 vers le SAN N°2
scp /etc/iet/ietd.conf root@san-test-2:/etc/iet/ietd.conf ietd.conf 100% 173 0.2KB/s 00:00
- Relancez le service iSCSI sur le SAN N°2 depuis les SNA N°1
ssh root@san-test-2 "service iscsitarget restart"
Removing iSCSI enterprise target devices: :. Stopping iSCSI enterprise target service: :. Removing iSCSI enterprise target modules: ... (warning). . Starting iSCSI enterprise target service:. .
2e Étape : Se connecter à la cible iSCSI avec un ordinateur
Sous Windows
La 1ère des choses à faire est de télécharger et d’installer l’initiateur iSCSI pour votre Windows. Pour cela, rendez-vous sur cette page.
Les systèmes pris en charge sont les suivants :
- Windows 2000 Sp4 ou plus
- Windows 2003 Sp1 ou plus
- Windows XP Sp2 ou plus
Les systèmes comme Windows Vista/7/8/2008 prennent déjà en charge cet initiateur. Il n’est donc pas nécessaire de le télécharger!
Si vous êtes sous Windows 3.11, c’est déjà un miracle que vous puissiez lire ces lignes, faut quand même pas abuser 😉
Bref! une fois tout ça installé, il ne reste qu’à le paramétrer!
Vous trouverez l’initiateur iSCSI :
- pour Windows 7/Vista/2008 dans le menu démarrer->Outils d’administration->Initiateur iSCSI.
- pour Windows XP dans le menu démarrer->Panneau de configuration->iSCSI Initiator
Les copies d’écran ont été faites avec Windows XP, mais pour les autres, c’est sensiblement pareil !
Sélectionnez l’onglet « Discovery » (« Découverte »)
Cliquez sur le bouton « Add » (« Découvrir un portail »)
Entrez l’adresse IP du SAN N°1, puis cliquez sur OK. Une fois la fenêtre précédente revenue, sélectionnez l’onglet « Targets » (« Cibles »)
Sélectionnez la ressource que vous souhaitez et cliquez sur « Log On… » (« Connexion »)
Vérifiez bien que les cases « Automatically restore this connection when the system boots » (« Ajoutez cette connexion à la liste des cibles favorites. Le système tentera ainsi de restaurer la connexion à chaque redémarrage de l’ordinateur ») et « Enable multipath » (« Activer la prise en charge de plusieurs chemins d’accès ») soient décochées et Cliquez sur OK.
Fermez la fenêtre une fois que le statut de la connexion passe de « Inactive » à « Connected » et ouvrez le menu démarrer->Clique droit sur « Poste de travail » (« Ordinateur » sur Vista/7/8/2008)->Gérer.
Placez-vous sur Stockage->Gesion des disques, une fenêtre d’assistant d’initialisation de disque va apparaître automatiquement.
Cliquez sur « Suivant » et sélectionnez le nouveau disque pour l’initialiser (en théorie le disque iSCSI qui vient d’être ajouté!)
Désélectionnez la conversion de ce même disque (inutile pour l’instant)
Puis terminez l’initialisation.
Voilà, votre disque est ajouté comme si on avait ajouté un disque physique dans l’ordinateur en lui même !
Cliquez droit sur le disque dans l’interface de gestion pour le formater puis formatez-le.
Assistant de création de partitions et formatage
Tadaaaaaa… Votre disque est maintenant prêt à être utilisé par Windows ! Ce n’est pas beau tout ça ?
Sous Linux (Ubuntu ou Debian)
Connectez-vous en SSH ou avec le terminal.
Installez les packages avec la commande suivante :
apt-get install open-iscsi
Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les NOUVEAUX paquets suivants seront installés : open-iscsi 0 mis à jour, 1 nouvellement installés, 0 à enlever et 95 non mis à jour. Il est nécessaire de prendre 0 o/592 ko dans les archives. Après cette opération, 1 503 ko d'espace disque supplémentaires seront utilisés. ATTENTION : les paquets suivants n'ont pas été authentifiés. open-iscsi Faut-il installer ces paquets sans vérification (o/N) ? o Sélection du paquet open-iscsi précédemment désélectionné. (Lecture de la base de données... 83909 fichiers et répertoires déjà installés.) Dépaquetage de open-iscsi (à partir de .../open-iscsi_2.0.871-0ubuntu5.1_amd64.deb) ... Traitement des actions différées (« triggers ») pour « ureadahead »... Traitement des actions différées (« triggers ») pour « man-db »... Paramétrage de open-iscsi (2.0.871-0ubuntu5.1) ... update-rc.d: warning: open-iscsi stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 6) * Starting iSCSI initiator service iscsid [ OK ] * Setting up iSCSI targets [ OK ]
Éditez le fichier /etc/iscsi/iscsid.conf et décommentez la ligne node.startup = automatic
Redémarrez le service :
/etc/init.d/open-iscsi restart
* Disconnecting iSCSI targets [ OK ] * Stopping iSCSI initiator service [ OK ] * Starting iSCSI initiator service iscsid [ OK ] * Setting up iSCSI targets [ OK ]
Lancez la découverte des cibles :
iscsiadm -m discovery -t st -p 192.147.147.30
192.147.147.30:3260,1 iqn.2012-12.san-tests:rD2.rD2 192.147.147.30:3260,1 iqn.2012-12.san-tests:rD1.rD1 192.147.147.30:3260,1 iqn.2012-12.san-tests:rD3.rD3
Vérifiez que les cibles sont accessibles :
iscsiadm -m node
192.147.147.30:3260,1 iqn.2012-12.san-tests:rD2.rD2 192.147.147.30:3260,1 iqn.2012-12.san-tests:rD1.rD1 192.147.147.30:3260,1 iqn.2012-12.san-tests:rD3.rD3
Ajoutez une cible :
iscsiadm -m node --targetname "iqn.2012-12.san-tests:rD3.rD3" --portal "192.147.147.30:3260"
# BEGIN RECORD 2.0-871 node.name = iqn.2012-12.san-tests:rD3.rD3 node.tpgt = 1 node.startup = manual iface.hwaddress = <empty> iface.ipaddress = <empty> iface.iscsi_ifacename = default iface.net_ifacename = <empty> iface.transport_name = tcp iface.initiatorname = <empty> node.discovery_address = 192.147.147.30 node.discovery_port = 3260 node.discovery_type = send_targets node.session.initial_cmdsn = 0 node.session.initial_login_retry_max = 8 node.session.xmit_thread_priority = -20 node.session.cmds_max = 128 node.session.queue_depth = 32 node.session.auth.authmethod = None node.session.auth.username = <empty> node.session.auth.password = <empty> node.session.auth.username_in = <empty> node.session.auth.password_in = <empty> node.session.timeo.replacement_timeout = 120 node.session.err_timeo.abort_timeout = 15 node.session.err_timeo.lu_reset_timeout = 20 node.session.err_timeo.host_reset_timeout = 60 node.session.iscsi.FastAbort = Yes node.session.iscsi.InitialR2T = No node.session.iscsi.ImmediateData = Yes node.session.iscsi.FirstBurstLength = 262144 node.session.iscsi.MaxBurstLength = 16776192 node.session.iscsi.DefaultTime2Retain = 0 node.session.iscsi.DefaultTime2Wait = 2 node.session.iscsi.MaxConnections = 1 node.session.iscsi.MaxOutstandingR2T = 1 node.session.iscsi.ERL = 0 node.conn[0].address = 192.147.147.30 node.conn[0].port = 3260 node.conn[0].startup = manual node.conn[0].tcp.window_size = 524288 node.conn[0].tcp.type_of_service = 0 node.conn[0].timeo.logout_timeout = 15 node.conn[0].timeo.login_timeout = 15 node.conn[0].timeo.auth_timeout = 45 node.conn[0].timeo.noop_out_interval = 5 node.conn[0].timeo.noop_out_timeout = 5 node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144 node.conn[0].iscsi.HeaderDigest = None node.conn[0].iscsi.DataDigest = None node.conn[0].iscsi.IFMarker = No node.conn[0].iscsi.OFMarker = No # END RECORD
Maintenant que la cible est enregistrée, nous pouvons nous y connecter :
iscsiadm -m node --targetname "iqn.2012-12.san-tests:rD3.rD3" --portal "192.147.147.30:3260" --login
Logging in to [iface: default, target: iqn.2012-12.san-tests:rD3.rD3, portal: 192.147.147.30,3260] Login to [iface: default, target: iqn.2012-12.san-tests:rD3.rD3, portal: 192.147.147.30,3260]: successful
Ou par un redémarrage du service :
/etc/init.d/open-iscsi restart
* Disconnecting iSCSI targets [ OK ] * Stopping iSCSI initiator service [ OK ] * Starting iSCSI initiator service iscsid [ OK ] * Setting up iSCSI targets [ OK ]
Si vous souhaitez vous déconnecter du disque, voici la commande :
iscsiadm -m node --targetname "iqn.2012-12.san-tests:rD3.rD3" --portal "192.147.147.30:3260" --logout
Logging out of session [sid: 1, target: iqn.2012-12.san-tests:rD3.rD3, portal: 192.147.147.30,3260] Logout of [sid: 1, target: iqn.2012-12.san-tests:rD3.rD3, portal: 192.147.147.30,3260]: successful
Désormais, le disque distant fait partie intégrante du système. Vérifiez-le par la commande :
fdisk -l
Pour ma part, c’est le disque /dev/sdd qui a été ajouté!
Disque /dev/sdd: 29.7 Go, 29652787200 octets 64 têtes, 32 secteurs/piste, 28279 cylindres Unités = cylindres de 2048 * 512 = 1048576 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Identifiant de disque : 0x00000000 Le disque /dev/sdd ne contient pas une table de partition valide
Dorénavant, vous avez la possibilité d’en faire ce que vous voulez, tout comme dans Windows!!! Top!!!
Sous OS X
Malheureusement, je n’ai pas trouvé d’initiateur iSCSI gratuit pour Mac OSX (Pas cool Apple)!!!
Toutefois, il existe des initiateurs payants, comme globalSAN ou Xtend SAN!
Pour mes tests, je vais utiliser globalSAN qui propose une version gratuite pendant 14 jours (enregistrement sur le site requis), ça nous permettra de voir tout ça!
Enregistrez-vous sur la page : http://www.studionetworksolutions.com/support/faq.php?pi=11&fi=51 en sélectionnant « Get globalSAN »
Après inscription, un mail vous est envoyé avec le lien de téléchargement suivant.
Télécharger le dernier dmg à l’adresse suivante : http://www.snsftp.com/public/globalsan/
Installez le produit et redémarrez
Configurez l’initiateur en lançant l’application globalSAN :
Une fois lancée, déverrouillez le cadenas en bas à gauche pour pouvoir effectuer des modifs
Une fois déverrouillée, cliquez sur le bouton « Licence » juste au-dessus du cadenas
Cliquez sur le bouton « Get Activation Key », vous allez être redirigé sur la page d’enregistrement de l’initiateur
N’entrez pas d’information et cliquez sur « Sign Up »
Entrez maintenant un mail valide et un mot de passe (celui de votre choix), puis cliquez sur le bouton « SUBMIT »
Cliquez sur « START TRIAL »
Vous n’avez normalement rien à saisir, votre clé est déjà présaisie, cliquez sur « VERIFY »
Après un court instant, le site vous fournit votre clé d’activation temporaire. Copiez là (Pomme + A = tout sélectionner / Pomme + C = copier)
Collez là (Pomme + V = coller) dans le champ sous le texte « Paste your Activation Key here », puis cliquez sur « Activate », puis dans le message vous indiquant la durée de test, cliquez sur le bouton « OK »
Cliquez sur le bouton « + » juste au-dessus du cadenas pour ajouter un nouveau serveur et sélectionnez « Portal/Group »
Puis définissez un nom de Groupe et saisissez l’adresse IP du SAN N°1
Choisissez maintenant la ressource que vous souhaitez
Donnez un nom d’Alias (celui que vous verrez comme disque dans Mac OSX), sélectionnez la connexion (sous le texte « Connections » à droite) et cliquez sur le bouton « Connect »
Dès la connexion, le disque va être détecté par le système. Il va alors vous proposer automatiquement de l’utiliser pour la sauvegarde « Time Machine », cliquez sur « Ne pas utiliser »
Voilà ! Ouvrez maintenant l’outil de gestion de disque dans les utilitaires et vous verrez votre nouveau disque. Vous pourrez alors le formater à votre guise.
Mise en place d’une adresse IP flottante
Le but est de faire en sorte que si 1 des SANs, notamment le N°1 plante, que le second prenne le relai avec un minimum de latence. On parle alors de failover et de haute disponibilité!
En effet, l’adresse IP va être transférée depuis le 1er SAN vers le second de façon quasi transparente pour l’utilisateur!
Le principe est le suivant :
On configure les 2 SANs pour qu’ils s’écoutent l’un l’autre. On part du principe que le SAN N°1 est les SAN actifs en cours d’utilisation. Si le SAN N°2 n’entend plus le SAN N°1 lui dire, « Je suis vivant! Je suis vivant! Je suis vivant! » toute les x secondes ou millisecondes, alors le SAN N°2 va s’approprier l’adresse IP définie.
Prérequis
Installer keepalived et le configurer! Simple non?
Installation
Connectez-vous en SSH ou en terminal sur le SAN N°1.
apt-get install keepalived
Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires : libidn11 libheartbeat2 corosync libnspr4-0d python-central libtimedate-perl cluster-agents cluster-glue libcurl3 libssh2-1 libopenhpi2 libcluster-glue libcorosync4 libnet1 libnss3-1d Veuillez utiliser « apt-get autoremove » pour les supprimer. Les paquets supplémentaires suivants seront installés : ipvsadm Paquets suggérés : heartbeat ldirectord Les NOUVEAUX paquets suivants seront installés : ipvsadm keepalived 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 191 ko dans les archives. Après cette opération, 664 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? o Réception de : 1 http://mirror.ovh.net/debian/ squeeze/main ipvsadm amd64 1:1.25.clean-1 [47,6 kB] Réception de : 2 http://mirror.ovh.net/debian/ squeeze/main keepalived amd64 1:1.1.20-1+squeeze1 [144 kB] 191 ko réceptionnés en 0s (328 ko/s) Préconfiguration des paquets... Sélection du paquet ipvsadm précédemment désélectionné. (Lecture de la base de données... 56166 fichiers et répertoires déjà installés.) Dépaquetage de ipvsadm (à partir de .../ipvsadm_1%3a1.25.clean-1_amd64.deb) ... Sélection du paquet keepalived précédemment désélectionné. Dépaquetage de keepalived (à partir de .../keepalived_1%3a1.1.20-1+squeeze1_amd64.deb) ... Paramétrage de ipvsadm (1:1.25.clean-1) ... update-rc.d: warning: ipvsadm start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (2 3 5) ipvsadm is not configured to run. Please run dpkg-reconfigure ipvsadm. Paramétrage de keepalived (1:1.1.20-1+squeeze1) ...
Éditez le fichier /etc/keepalived/keepalived.conf
# Configuration File for Keepalived # Global Configuration global_defs { notification_email { mon_mail@mondomaine.com } notification_email_from noreply@cicp2r.org smtp_server smtp.mondomaine.com smtp_connect_timeout 30 router_id LVS_MASTER # string identifying the machine } # describe virtual service ip vrrp_instance VI_1 { # initial state state MASTER interface eth0 # arbitary unique number 0..255 # used to differentiate multiple instances of vrrpd virtual_router_id 51 # for electing MASTER, highest priority wins. # to be MASTER, make 50 more than other machines. priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass xxx } virtual_ipaddress { 192.147.147.15/24 } notify_master "service iscsitarget restart" notify_backup "service iscsitarget restart" }
L’adresse IP doit être libre et sera donc réservée aux SANs!!!
Éditez le fichier /etc/sysctl.conf
et décommentez la ligne : net.ipv4.ip_forward=1
Connectez-vous au SAN N°2 en utilisant la commande suivante depuis le SAN N°1 :
ssh 192.147.147.47
apt-get install keepalived
Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires : libidn11 libheartbeat2 corosync libnspr4-0d python-central libtimedate-perl cluster-agents cluster-glue libcurl3 libssh2-1 libopenhpi2 libcluster-glue libcorosync4 libnet1 libnss3-1d Veuillez utiliser « apt-get autoremove » pour les supprimer. Les paquets supplémentaires suivants seront installés : ipvsadm Paquets suggérés : heartbeat ldirectord Les NOUVEAUX paquets suivants seront installés : ipvsadm keepalived 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 191 ko dans les archives. Après cette opération, 664 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? o Réception de : 1 http://mirror.ovh.net/debian/ squeeze/main ipvsadm amd64 1:1.25.clean-1 [47,6 kB] Réception de : 2 http://mirror.ovh.net/debian/ squeeze/main keepalived amd64 1:1.1.20-1+squeeze1 [144 kB] 191 ko réceptionnés en 0s (328 ko/s) Préconfiguration des paquets... Sélection du paquet ipvsadm précédemment désélectionné. (Lecture de la base de données... 56166 fichiers et répertoires déjà installés.) Dépaquetage de ipvsadm (à partir de .../ipvsadm_1%3a1.25.clean-1_amd64.deb) ... Sélection du paquet keepalived précédemment désélectionné. Dépaquetage de keepalived (à partir de .../keepalived_1%3a1.1.20-1+squeeze1_amd64.deb) ... Paramétrage de ipvsadm (1:1.25.clean-1) ... update-rc.d: warning: ipvsadm start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (2 3 5) ipvsadm is not configured to run. Please run dpkg-reconfigure ipvsadm. Paramétrage de keepalived (1:1.1.20-1+squeeze1) ...
Éditez le fichier /etc/keepalived/keepalived.conf
# Configuration File for Keepalived # Global Configuration global_defs { notification_email { mon_mail@mondomaine.com } notification_email_from noreply@cicp2r.org smtp_server smtp.mondomaine.com smtp_connect_timeout 30 router_id LVS_MASTER # string identifying the machine } # describe virtual service ip vrrp_instance VI_1 { # initial state state BACKUP interface eth0 # arbitary unique number 0..255 # used to differentiate multiple instances of vrrpd virtual_router_id 51 # for electing MASTER, highest priority wins. # to be MASTER, make 50 more than other machines. priority 50 advert_int 1 nopreempt authentication { auth_type PASS auth_pass xxx } virtual_ipaddress { 192.147.147.15/24 } notify_master "service iscsitarget restart" notify_backup "service iscsitarget restart" }
Éditez le fichier /etc/sysctl.conf
et décommentez la ligne : net.ipv4.ip_forward=1
Déconnectez-vous du SAN N°2 en tapant « exit » (ou Crtl+D).
Redémarrez le service keepalived :
service keepalived restart && ssh 192.147.147.47 "service keepalived restart"
Restarting keepalived keepalived.... Restarting keepalived keepalived....
Redémarrez les SANs :
ssh 192.147.147.47 "reboot" && reboot
Vérifiez maintenant que l’adresse IP a bien été affectée au SAN N°1 :
echo "SAN N°1" && ip addr sh eth0 && echo "SAN N°2" && ssh 192.147.147.47 "ip addr sh eth0"
SAN N°1 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:35:84:ad brd ff:ff:ff:ff:ff:ff inet 192.147.147.30/24 brd 192.147.147.255 scope global eth0 inet 192.147.147.15/24 scope global secondary eth0 SAN N°2 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:3e:87:b9 brd ff:ff:ff:ff:ff:ff inet 192.147.147.47/24 brd 192.147.147.255 scope global eth0
Maintenant, admettons que l’on perde SAN N°1 (on l’éteint malencontreusement…Ooops), alors, si on se connecte en SSH sur le SAN N°2 et qu’on exécute la commande suivante :
ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:3e:87:b9 brd ff:ff:ff:ff:ff:ff inet 192.147.147.47/24 brd 192.147.147.255 scope global eth0 inet 192.147.147.15/24 scope global secondary eth0
Le but de tout ça, c’est quoi?
Très bonne question de moi-même!
En fait, maintenant que notre adresse IP transite entre le SAN N°1 et le SAN N°2 en cas de perte du SAN N°1 nous permet de conserver une connexion iSCSI. De ce fait, si vous êtes en train de copier des données dans votre disque iSCSI et que le SAN N°1 s’éteint, vous ressentirez une microcoupure, mais vos données continueront à être copiées!
Pour que cela fonctionne, il faut paramétrer votre initiateur pour qu’il interroge l’adresse IP virtuelle. Pour mon exemple, l’adresse est 192.147.147.15
!
Voilà! Vous pouvez maintenant tester tout ça!
Conclusion
Bon, ça y est, vous savez tout (ou presque)! Amusez-vous pendant vos vacances (ou pas)! Moi, je vais me reposer! Des tutos comme ça, c’est un peu long et je suis sur les rotules!!!!
Je vais bien me reposer et vous donner d’autres fils à retordre !
En attendant, je vous souhaite de très bonnes fêtes de fin d’année, un Joyeux Noël et une bonne années!