[MAJ] – Installer 2 serveurs de données (SAN) répliqués avec OpenMediaVault et DRBD

— 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.serveurs servers power

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

  1. La dernière version de OpenMediaVault (basé sur Linux Debian[le top]) téléchargeable ici
  2. 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 :

VM-Serveur
– 1 disque de 8Go pour le système d’exploitation (une Clé USB pour un PC réel)
– 4 Disques de différentes tailles pour mon stockage
– 3 cartes réseau (LAN/DRBD/HA)
(on pourra optimiser la mémoire au besoin)
– L’image ISO de OpenMediaVault allouée dans le lecteur CD virtuel

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.

OpenMediaVault1

OpenMediaVault2

OpenMediaVault3

OpenMediaVault4

OpenMediaVault5
Entrez une 1ère fois le mot de passe superutilisateur
OpenMediaVault6
Entrez une seconde fois le mot de passe superutilisateur
OpenMediaVault7
Sélectionné le disque système

OpenMediaVault8

OpenMediaVault9
Sélectionnez le serveur de packages Debian
OpenMediaVault10
Si vous avez un serveur proxy, entrez ici son adresse et son port.
OpenMediaVault11
Voilà ! L’installation est terminée

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 :

OpenMediaVault12

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

OpenMediaVault13

Après connexion, nous retrouvons l’interface de gestion d’OpenMediaVault qui, je trouve, est d’assez belle facture!

OpenMediaVault14

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

Network_1

Cliquez sur « Modifier »

Network_2

Validez et faites de même pour la 3ème interface eth2 (Attention, pas la même adresse IP)

Network_3

Paramétrage du SSH

Dans le Menu de gauche, cliquez sur Services->SSH.

Cochez « Activer » et cliquez sur OK.

OpenMediaVault_SSH

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]

OpenMediaVault_putty1

OpenMediaVault_putty2

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

OpenMediaVault_plugins

Cliquez sur le bouton OpenMediaVault_plugins_install

 

L’installation débute

OpenMediaVault_plugins_install_start

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 »)

OpenMediaVault_LVM1

Cliquez sur le bouton OpenMediaVault_LVM_créer

OpenMediaVault_LVM_sélection_disque

Sélectionnez un disque (on va les faire dans l’ordre, ici le 1er), puis cliquez sur OK.

OpenMediaVault_LVM_PV_confirmer

Confirmer la création.

Faites ceci pour tous les autres disques! A la fin, vous obtenez le résultat suivant :

OpenMediaVault_LVM_all_PV_created

Création des Groupes de Volumes (VG dans le jargon « LVMique »)

Sélectionnez l’onglet « Groupes de volumes »

OpenMediaVault_LVM_VG

Cliquez sur le bouton OpenMediaVault_LVM_créer

OpenMediaVault_LVM_VG_select_PV

Sélectionnez les disques qui vont faire partie du groupe (ici, tous les disques), nommez le groupe (ici « DATAS ») puis cliquez sur OK.

OpenMediaVault_LVM_VG_confirmer

Confirmez

OpenMediaVault_LVM_VG_created

Et voilà le groupe « DATAS » est créé!

Création des Volumes Logiques (LV dans le jargon LVMique)

Sélectionnez l’onglet « Volumes logiques »

OpenMediaVault_LVM_LV

Cliquez sur le bouton OpenMediaVault_LVM_créer

OpenMediaVault_LVM_LV_select

Nommez votre volume, sélectionnez le groupe auquel il appartient et définissez-lui une taille. Cliquez sur OK pour valider.

OpenMediaVault_LVM_LV_confirmerConfirmez!

Répétez cette opération afin de créer les Volumes Logiques souhaitez (ici 3 volumes nommés D1, D2 et D3).

OpenMediaVault_LVM_all_LV_created

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

DRBD1

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.

  1. Le nom de la ressource : resource rD1
  2. 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!
  3. 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 , …)
  4. 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!
  5. 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.
  6. 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 ».
  7. 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.
  8. 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!
  9. Les paramètres syncer : rate 100M
    Ces paramètres servent à régler la bande passante utilisée par la synchronisation des données.
  10. 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 :

  1. 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!
  2. Le partage Samba
    Pour partager vos ressources avec Samba, suivez ce tuto!
  3. 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 :

  1. Connectez-vous à l’interface web du SAN N°1 avec votre navigateur
  2. Dans le Menu gauche, Services->iSCSI, Activez l’option puis cliquez sur OK
    iSCSI1
  3. Connectez-vous sur le 2e SAN et faites de même
  4. Rendez-vous maintenant en SSH sur le SAN N°1
  5. É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)

  6. 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:.
     .
  7. 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
  8. 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 !

Initiateur_iSCSI_XP1

Sélectionnez l’onglet « Discovery » (« Découverte »)

Initiateur_iSCSI_XP2

Cliquez sur le bouton « Add » (« Découvrir un portail »)

Initiateur_iSCSI_XP3

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 »)

Initiateur_iSCSI_XP4

Sélectionnez la ressource que vous souhaitez et cliquez sur « Log On… » (« Connexion »)

Initiateur_iSCSI_XP5

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.

Initiateur_iSCSI_XP18

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.

Initiateur_iSCSI_XP6

Placez-vous sur Stockage->Gesion des disques, une fenêtre d’assistant d’initialisation de disque va apparaître automatiquement.

Initiateur_iSCSI_XP7

Cliquez sur « Suivant » et sélectionnez le nouveau disque pour l’initialiser (en théorie le disque iSCSI qui vient d’être ajouté!)

Initiateur_iSCSI_XP8

Désélectionnez la conversion de ce même disque (inutile pour l’instant)Initiateur_iSCSI_XP9

Puis terminez l’initialisation.Initiateur_iSCSI_XP10

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.

Initiateur_iSCSI_XP11

Assistant de création de partitions et formatageInitiateur_iSCSI_XP16

Initiateur_iSCSI_XP15

Initiateur_iSCSI_XP14

Initiateur_iSCSI_XP13

Initiateur_iSCSI_XP12

Tadaaaaaa… Votre disque est maintenant prêt à être utilisé par Windows ! Ce n’est pas beau tout ça ?

Initiateur_iSCSI_XP17

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 »

Initiateur_iSCSI_MacOSX_Download_1

Initiateur_iSCSI_MacOSX_Download_2

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

Initiateur_iSCSI_MacOSX_1

Initiateur_iSCSI_MacOSX_2

Initiateur_iSCSI_MacOSX_3

Initiateur_iSCSI_MacOSX_4

Initiateur_iSCSI_MacOSX_5

Initiateur_iSCSI_MacOSX_6

Initiateur_iSCSI_MacOSX_7

Configurez l’initiateur en lançant l’application globalSAN :

Initiateur_iSCSI_MacOSX_Param_1

Une fois lancée, déverrouillez le cadenas en bas à gauche pour pouvoir effectuer des modifs

Initiateur_iSCSI_MacOSX_Param_2

Une fois déverrouillée, cliquez sur le bouton « Licence » juste au-dessus du cadenas

Initiateur_iSCSI_MacOSX_Param_12

Cliquez sur le bouton « Get Activation Key », vous allez être redirigé sur la page d’enregistrement de l’initiateur

Initiateur_iSCSI_MacOSX_Param_13

N’entrez pas d’information et cliquez sur « Sign Up »

Initiateur_iSCSI_MacOSX_Param_14

Entrez maintenant un mail valide et un mot de passe (celui de votre choix), puis cliquez sur le bouton « SUBMIT »

Initiateur_iSCSI_MacOSX_Param_15

Cliquez sur « START TRIAL »

Initiateur_iSCSI_MacOSX_Param_16

Vous n’avez normalement rien à saisir, votre clé est déjà présaisie, cliquez sur « VERIFY »

Initiateur_iSCSI_MacOSX_Param_17

Après un court instant, le site vous fournit votre clé d’activation temporaire. Copiez là (Pomme + A = tout sélectionner / Pomme + C = copier)

Initiateur_iSCSI_MacOSX_Param_18

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 »

Initiateur_iSCSI_MacOSX_Param_19

Cliquez sur le bouton « + » juste au-dessus du cadenas pour ajouter un nouveau serveur et sélectionnez « Portal/Group »

Initiateur_iSCSI_MacOSX_Param_9

Puis définissez un nom de Groupe et saisissez l’adresse IP du SAN N°1

Initiateur_iSCSI_MacOSX_Param_11

Choisissez maintenant la ressource que vous souhaitez

Initiateur_iSCSI_MacOSX_Param_21

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 »

Initiateur_iSCSI_MacOSX_Param_22

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 »

Initiateur_iSCSI_MacOSX_Param_23

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.

Initiateur_iSCSI_MacOSX_Param_24

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!

  1. Bonjour,
    Tres bien comme travail,
    J’ai une petite remarque ou plutôt une question.
    Voila, dans ta configuration tu utilises 3 cartes réseau;
    1 pour le LAN
    1 pour DRDB
    et 1 pour HA

    Dans ta doc tu parles de la 1ere et la 2eme mais à aucun moment tu parles de la 3 eme dans toute la doc à part le paramétrage réseau.

    A t-elle une configuration differentes, si elle secours la 2eme carte qui gere DRDB ne devrait-elle pas etre aussi dans cette configuration?

    Pour l’instant je ne vois vraiment à quoi cette 3eme carte?

    1. Je pense que c’est une patte administrative – de backup, comme s’est souvent le cas 🙂 (mais je peux me tromper)

      1. Merci Razique pour ta réponse perspicace qui pourrait être très utile! cf la réponse à Miranthil!

    2. Salut Miranthil!

      Mea culpa!

      Tu as effectivement raison, le lien HA n’est absolument pas utile. Il est même à banir dans la mesure ou ce lien doit se faire exclusivement sur le lien LAN, et cela pour une bonne raison :

      Si le SAN 1 perd le lien LAN (carte réseau HS, Patte du switch HS ou simplement une coupure/un débranchement physique du câble réseau), le SAN 2 doit prendre le relai en prenant les rôles iSCSI!

      Pour cela, il ne doivent communiquer que sur un seul lien, le LAN.

      Si le lien HA existait et que nous nous trouvions dans une des situations précédentes, le SAN 2 ne prendrait pas le relai et les rôles iSCSI seraient perdus!!!

      Toutefois, le lien HA sur un lien dédié n’a qu’une utilité en cas de monitoring (daemon « mon » pour linux) d’un ou de plusieurs services. Dans ce cas là, il serait effectivement pertinent.

      Vous pouvez aussi allez plus loin dans le paramétrage de keepalived en arrêtant ce service si un des services « iscsitarget » ou « drbd » s’arrêtait! Mais c’est une config plus poussée, mais faisable!

      Bref, vous pouvez donc ne pas tenir compte de ce lien si vous vous en tenez à cette config!

      Merci pour vos remarques et @ bientôt!

  2. Bonjour,

    Très bon tuto apparemment (je confirmerai certainement sous peu).

    Juste une petite question :

    Pourquoi ceci…

    notify_master « service iscsitarget restart »
    notify_backup « service iscsitarget restart »

    .. dans le fichier /etc/keepalived/keepalived.conf ?

    S’agit-il d’un redémarrage du service iscsi en cas de failover du san1 ?

    Est-ce indispensable ?

    1. Bonjour Franck et désolé d’avoir mis 100 ans à te répondre, ça n’est pas 2.0!

      Effectivement, il est nécessaire d’effectué ce redémarrage pour que le SAN secondaire, après avoir récupéré sa nouvelle adresse IP, récupère les connexions des serveurs connectés!

      Si les SANs sont virtuels et sont stockés dans le même ESX ou Workstation, ça ne sera pas utile car les connexions réseau arrivent sur la même carte au final, mais si ce sont 2 PC bien distincts, il faut le faire!

      Keepalived va informer tous les serveurs connectés de la nouvelle association MAC/IP!

      Voilou!

    2. Bonjour Franck et désolé d’avoir mis 100 ans à te répondre, ça n’est pas 2.0!

      Effectivement, il est nécessaire d’effectué ce redémarrage pour que
      le SAN secondaire, après avoir récupéré sa nouvelle adresse IP, récupère
      les connexions des serveurs connectés!

      Si les SANs sont virtuels et sont stockés dans le même ESX ou
      Workstation, ça ne sera pas utile car les connexions réseau arrivent sur
      la même carte au final, mais si ce sont 2 PC bien distincts, il faut le
      faire!

      Keepalived va informer tous les serveurs connectés de la nouvelle association MAC/IP!

      Voilou!

      1. Merci pour la réponse, mieux vaut tard que jamais comme on dit.

        Pour continuer le fil, si tu redémarres le service iscsi (les VMS étant démarrées), la coupure du lien doit les faire planter non ?

        1. Saloute!

          J’utilise cette solution à titre professionnelle. J’ai donc effectué une bonne batterie de tests afin d’être sûre de mon choix!

          Pour l’instant, tout roule! J’ai eu des soucis de déconnexion mais quand j’utilisais un autre moteur de HA, à savoir « heartbeat ».

          J’ai atteins ses limites et je me suis donc tourné vers « keepalived » qui fait mieux son taf!

          En effet, keepalive qui utilise VRRP (utilisé par tous les systèmes pro concernant la Haute Dispo) va informer tous les matériels de l’infrastructure afin de fournir la nouvelle adresse MAC correspondante à l’IP flottante!

          Je serais intéressé par un retour, même négatif, concernant ce tuto! En effet, je ne cherche qu’à m’améliorer!

          Tu peux me contacter directement sur mon twitter (@jchenavas) ou sur mon mail jchenavas@cachem.fr...

          N’hésites pas au besoin!!!

        2. Saloute!

          J’utilise cette solution à titre professionnelle. J’ai donc effectué une bonne batterie de tests afin d’être sûre de mon choix!

          Pour l’instant, tout roule! J’ai eu des soucis de déconnexion mais quand j’utilisais un autre moteur de HA, à savoir « heartbeat ».

          J’ai atteins ses limites et je me suis donc tourné vers « keepalived » qui fait mieux son taf!

          En effet, keepalive qui utilise VRRP (utilisé par tous les systèmes pro concernant la Haute Dispo) va informer tous les matériels de l’infrastructure afin de fournir la nouvelle adresse MAC correspondante à l’IP flottante!

          Il devrait donc se produire une micro-coupure mais ça devrait tenir!

          Je serais intéressé par un retour, même négatif, concernant ce tuto! En effet, je ne cherche qu’à m’améliorer!

          Tu peux me contacter directement sur mon twitter (@jchenavas) ou sur mon mail jchenavas@cachem.fr...

          N’hésites pas au besoin!!!

  3. Bonjour, tuto très complet.
    Mon seul soucis comment exploiter les ressources DRBD via l’interface web de OpenMediavault ???je vois bien ma ressource dans système de fichier mais je ne la vois plus lorsque je veux créer un dossier partagé alors qu’elle st bien monté et en ligne
    Peux t’on m’aider sur ce point svp ???

    1. Salut jo43!

      Je suis vraiment navré de ne pas t’avoir répondu plus tôt!

      As-tu trouvé ta réponse entre temps?

      Sinon, tes ressources DRBD (/dev/drbd0 par exemple) représente un disque dur à part entière. En d’autre terme, il est de même nature que la ressource /dev/sda. Il ne possède pas de partition.

      D’autre part, c’est au niveau d’OpenMediaVault que le soucis se produit. En effet, ils ne listent que les disques durs physiques, c’est-à-dire /dev/hdX /dev/sdX, …

      Il faut donc aller dans les fichiers sources php afin d’ajouter à l’expression régulière les ressources /dev/drbdX

      Il fût un temps ou j’avais tenté de le faire mais sans réèl succès!

      Si tu y arrives, n’hésites pas à nous en faire part!

      Je retenterai l’expérience à l’occasion et si je trouve, je publierai une MAJ du code.

      Voilà, encore désolé pour le délai de réponse!

      @+

    1. Salut aandi!

      Même discours que pour jo43, un grand désolé pour le temps de réponse.

      Oui, tu peux t’en servir comme stockage de machines virtuelles. Toutefois, je te conseil de paramétrer les disques iSCSI sur le vSphere Server qui gèrera mieux le failover du iSCSI.

      Voilà!

      @+

  4. Bonjour et merci pour ce superbe tuto !
    J’ai une question : Serait-il possible de répliquer également la config d’OMV d’une façon ou d’une autre ? Je trouve assez laborieux de devoir configurer chaque machine à l’identique notamment pour tout ce qui est des utilisateurs, des partages etc…

    1. Salut Billok!

      Désolé aussi pour le délai de réponse!!!

      Sinon, pour ta question, il y a certainement moyen de le faire. Ceci-dit, il faut faire attention au nom du serveur.

      Si tu veux, une fois terminé la configuration d’un SAN, tu peux l’arrêter, le cloner (clone autonome), reparamètrer la conf réseau pour avoir une autre adresse MAC dans VMWare, démarrer le second, changer son IP si tu l’as créée en fixe, lui donner un autre nom, et le tour sera joué…

      Tu peux aussi sauvegarder les config d’un serveur sur l’autre et vice et versa pour pouvoir faire un restart from scratch en rappliquant la conf!

      @+

  5. Un grand merci pour cet article qui sert toujours même après 3 ans, une bonne initiation pour bien comprendre le principe du SAN. Merci Julien …

    ( Bechir … )

    1. Merci à toi Bechir! Ca fait toujours plaisirs d’entendre (de lire) que son travail est utile! Merci et à bientôt sur Cachem! 😉

  6. Bonjour Julien,

    Super tuto, qui m’intéresse au plus haut point.

    J’ai déjà 2 Nas OMV (Master et Slave) persos dont je suis content, à part, peut-être, sur la partie lecteur media. MiniDLNA fonctionnant mal, la meilleure solution trouvée est Serviio, gratuit mais pas libre.

    Mais là n’est pas le sujet, je m’explique:

    N’ayant pas l’utilité de tous les services proposés par OMV (lvm, iscsi, NFS, samba, …) pour mon projet, et ainsi apprendre à « travailler », aussi, en ligne de commande, j’ai monté deux serveurs identiques en Debian Jessie x64, chacun avec deux cartes Ethernet.

    Le serveur Master servira uniquement pour des « clients » chrootés qui ne pourront y accéder qu’en sftp. C’est un choix.

    1/ Il faut donc que j’installe le Slave en miroir, non? Ou suis-je obligé de faire du iSCSI?

    2/ Je compte placer le Slave à un autre endroit géographique, et qu’il prenne le relais automatiquement en cas de crash du Master. Comment adapter ton tuto, sachant qu’ils auront une adresse no-ip.org différente?

    1. Salut Pow Pix,

      Merci pour ton compliment, ça fait plaisir.

      Apriori, il ne devrait pas y avoir de grosses différences sauf concernant les versions les outils.

      Si tu fais l’essai, n’hésite pas à nous le faire savoir

      Julien, l’auteur

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.