Définition d'un stockage distribué en iSCSI

Les notes disponibles ci-dessous sont issues des rushs de documentation d'installation sur le cluster du CBP : 48 noeuds Sun v22z.

L'objectif est d'installer iSCSI sur les noeuds v22z de 25 à 32 avec la machine x2100 comme maître.

Prérequis

  • le système installé est une Debian stable Squeeze 6, sur le maître comme sur les noeuds
  • le paquet clustershell est installé sur le maître
  • le maître peut se connecter sur les noeuds sans login/mot de passe

Parmi les outils de clustershell se trouve clush, lequel permet de lancer sur un ensemble de noeuds la même commande. Dans notre cas, il s'agit des noeuds 25 à 32 des v22z à disposition.

Pour simplifier l'appel des fonctions distantes, nous définissons l'alias :

alias jacadi='clush -w v22z[25-32]'

Installation

Création d'une cible iSCSI sur les noeuds v22z[25-32]

Les commandes suivantes sont à taper comme root.

Installation de iSCSItarget sur les noeuds :

jacadi 'apt-get install tgt'

Création d'un fichier type de déclaration de partage iSCSI :

tee /root/targets.conf.master <<EOF
include /etc/tgt/temp/*.conf
default-driver iscsi
ignore-errors yes
<target iqn.2012-01.fr.ens-lyon:<MyHostName>.sda>
    direct-store /dev/sda
    incominguser inputname ExpoInPassWORD
</target>
EOF

Copie du fichier type sur les différents noeuds :

jacadi --copy /root/targets.conf.master --dest /etc/tgt

Sauvegarde du fichier originel :

jacadi "cd /etc/tgt ; mv targets.conf targets.conf.orig" 

Remplacement dans le fichier type de la variable par le nom de la machine :

jacadi 'cd /etc/tgt ; cat targets.conf.master | sed -e "s/<MyHostName>/$HOSTNAME/g" > targets.conf'

Verification du fichier de configuration /etc/tgt/targets.conf :

jacadi 'cat /etc/tgt/targets.conf'

Vérification de la disponibilité du périphérique pointé :

jacadi 'fdisk -l /dev/sda'

Activation de la cible :

jacadi 'tgtd --iscsi portal=$HOSTNAME'
jacadi 'tgt-admin -e'

Vérification du partage :


Installation sur l'aggrégateur iSCSI

Installation du paquet client iSCSI :

apt-get install open-iscsi

Préparation du nouveau fichier de configuration iSCSI :

cd /etc/iscsi
mv iscsid.conf iscsid.conf.orig

Création du nouveau fichier de configuration iSCSI

tee iscsid.conf <<EOF
# /etc/iscsi/iscsid.conf
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = discoveryname
discovery.sendtargets.auth.password = DiscExpoPassWORD
EOF

Ajout des paramètres de tuning iSCSI récupérés du fichier par défaut :

cat iscsid.conf.orig | grep -v "^#" >> iscsid.conf

Lancement du démon iSCSI :

/etc/init.d/open-iscsi restart

Initialisation de la grappe

Découverte des cibles iSCSI par la commande nodeset de clustershell :

for node in $(nodeset -e v22z[25-32] );  do iscsiadm -m discovery -t st -p $node; done

La sortie est la suivante :

172.16.20.125:3260,1 iqn.2012-01.fr.ens-lyon:v22z25.sda
172.16.20.126:3260,1 iqn.2012-01.fr.ens-lyon:v22z26.sda
172.16.20.127:3260,1 iqn.2012-01.fr.ens-lyon:v22z27.sda
172.16.20.128:3260,1 iqn.2012-01.fr.ens-lyon:v22z28.sda
172.16.20.129:3260,1 iqn.2012-01.fr.ens-lyon:v22z29.sda
172.16.20.130:3260,1 iqn.2012-01.fr.ens-lyon:v22z30.sda
172.16.20.131:3260,1 iqn.2012-01.fr.ens-lyon:v22z31.sda
172.16.20.132:3260,1 iqn.2012-01.fr.ens-lyon:v22z32.sda

Deux sorties parce qu'il y a aussi un attachement IB

Accrochage des cibles iSCSI par la commande nodeset de clustershell :

for node in $(nodeset -e v22z[25-32] );  
do 
   IQN="iqn.2012-01.fr.ens-lyon:$node.sda" 
   iscsistart -a $(host $node | awk '{ print $4 }') -i $node -t $IQN -g 1 -u inputname -w ExpoInPassWORD
done

iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z25.sda 172.16.20.125:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection18:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z26.sda 172.16.20.126:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection19:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z27.sda 172.16.20.127:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection20:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z28.sda 172.16.20.128:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection21:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z29.sda 172.16.20.129:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection22:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z30.sda 172.16.20.130:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection23:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z31.sda 172.16.20.131:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection24:0 is operational now
iscsistart: transport class version 2.0-870. iscsid version 2.0-871
iscsistart: Logging into iqn.2012-01.fr.ens-lyon:v22z32.sda 172.16.20.132:3260,1
iscsistart: can not connect to iSCSI daemon (111)!
iscsistart: version 2.0-871
iscsistart: connection25:0 is operational now
dmesg | grep "Attached SCSI disk" 
[39131.733952] sd 6:0:0:0: [sdc] Attached SCSI disk
[39134.032564] sd 7:0:0:0: [sdd] Attached SCSI disk
[39135.353910] sd 8:0:0:0: [sde] Attached SCSI disk
[39137.638197] sd 9:0:0:0: [sdf] Attached SCSI disk
[39139.930900] sd 10:0:0:0: [sdg] Attached SCSI disk
[39142.206885] sd 11:0:0:0: [sdh] Attached SCSI disk
[39144.518260] sd 12:0:0:0: [sdi] Attached SCSI disk
[39146.801402] sd 13:0:0:0: [sdj] Attached SCSI disk

Les disques disponibles sont donc /dev/sdc à /dev/sdj

Aggrégation des volumes

Création de volumes MDADM/LVM

# Création de la grappe RAID6
mdadm --create /dev/md4 -binternal --level=6 --force --raid-devices=8 /dev/sd[c-j]
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md6 started.
#
vgcreate iscsi /dev/md4
# Formatage de la partition 
mkfs.btrfs /dev/md4
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on /dev/md6
    nodesize 4096 leafsize 4096 sectorsize 4096 size 410.19GB
Btrfs Btrfs v0.19
# Création du point de montage
mkdir /media/iscsi.raid6
# Montage 
mount -o noatime,nodiratime /dev/md6 /media/iscsi.raid6/
# Vérification de la création
cat /proc/mdstat 
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md6 : active raid6 sdj[7] sdi[6] sdh[5] sdg[4] sdf[3] sde[2] sdd[1] sdc[0]
      430116864 blocks super 1.2 level 6, 512k chunk, algorithm 2 [8/8] [UUUUUUUU]
      [>....................]  resync =  0.4% (311296/71686144) finish=103.1min speed=11529K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

Création de volume ZFS

zpool create -f iscsipool raidz /dev/sd[c-i] spare /dev/sdj
zpool status
  pool: iscsipool
 state: ONLINE
 scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    iscsipool   ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        sdc     ONLINE       0     0     0
        sdd     ONLINE       0     0     0
        sde     ONLINE       0     0     0
        sdf     ONLINE       0     0     0
        sdg     ONLINE       0     0     0
        sdh     ONLINE       0     0     0
        sdi     ONLINE       0     0     0
    spares
      sdj       AVAIL   

errors: No known data errors

Pour monter le volume de manière globale, l'usage de la commande zfs s'impose :

zfs mount iscsipool

La commande zfs list permet de visualiser les volumes ZFS disponibles

zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
iscsipool   181K   798G  46.0K  /iscsipool

df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0              44214336  15957296  26011056  39% /
tmpfs                  2063292         0   2063292   0% /lib/init/rw
udev                   2057780       256   2057524   1% /dev
tmpfs                  2063292         0   2063292   0% /dev/shm
iscsipool            836784896         0 836784896   0% /iscsipool
aoepool              836784640   6803072 829981568   1% /aoepool