Projet

Général

Profil

SSD » Historique » Version 18

Version 17 (Mehdi Abaakouk, 11/11/2012 18:00) → Version 18/53 (Mehdi Abaakouk, 11/11/2012 19:31)

h1. Le SSD

{{>toc}}

Afin de mettre à disposition des volumes provenant du SSD sans pour autant perdre 128 MB par volume en utilisant ganeti voici la solution adoptée.

Elle permet d'avoir le SSD en raid 1 réseau (drbd de ganeti) et d'utiliser les fonctionnalités de redondance sans gaspiller de l'espace SSD

Une vm ganeti en drbd qui utilise tout l'espace de 2 SSD (ie: 24G sur h5 et h6)

La vm créé un lvm sur son disque virtuel, puis ensuite on partage des logical volume de ce lvm via NBD, ISCSI ou AoE

Ci-dessous les éléments de configuration de ceci.

h2. Liens

* http://www.extremetech.com/gaming/133637-cache-of-the-titans-ssd-storage-accelerators-from-intel-and-corsair-face-off/
* http://hardware.slashdot.org/story/12/08/07/238230/are-ssd-accelerators-any-good
* http://bcache.evilpiepirate.org/
* http://visa.cs.fiu.edu/tiki/dm-cache
* https://github.com/mingzhao/dm-cache

h2. ISCSI (Internet Small Computer Systems Interface), *recommandé*

http://en.wikipedia.org/wiki/ISCSI

h3. Installation de iscsi côté server

<pre>
apt-get install iscsitarget-dkms iscsitarget
</pre>

Dans "/etc/iet/initiators.allow" et dans "/etc/iet/targets.allow" commenter la ligne suivante:
<pre>
ALL ALL
</pre>

Puis démarrer le iscsi

<pre>
/etc/init.d/iscsitarget start
</pre>

h3. Configuration d'un nouveau volume réseau

h4. Configuration sur le serveur

<pre>
lvcreate -n debug-gnt-2 -L 2G vgssd
mkfs.ext4 /dev/vgssd/debug-gnt-2
# tune2fs -o discard /dev/vgssd/debug-gnt-2 # ne marche pas sur squeeze
</pre>

Dans le fichier /etc/iet/ietd.conf ajouter un "target iscsi":

<pre>
Target iqn.2012-02.net.tetaneutral:debug-gnt.disk1
IncomingUser
OutgoingUser
Lun 0 Path=/dev/vgssd/debug-gnt,Type=fileio
Alias disk1
</pre>

Dans le fichier /etc/iet/initiators.allow, autorisé la machine:

<pre>
iqn.2012-02.net.tetaneutral:nagios.disk1 91.224.149.236
</pre>

Puis on reload
<pre>
/etc/init.d/iscsitarget restart
</pre>

En iscsi, on peut aussi utiliser des login/password en plus des ip pour les ACL

h4. Configuration sur le client

<pre>
# apt-get install open-iscsi multipath-tools
# sed -i -e '/node.startup/s/manual/automatic/g' /etc/iscsi/iscsid.conf
# /etc/init.d/open-iscsi start
# iscsi_discovery 91.224.149.251
# /etc/init.d/open-iscsi restart
# modprobe dm-multipath
# multipath -l
149455400000000005183dc136916d4cea134d5b5b016fe46 dm-0 IET,VIRTUAL-DISK
size=1.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=0 status=active
`- 4:0:0:0 sda 8:0 inactive undef stopped
</pre>

Noter le WWID (le long chiffre en hexa) et le mettre dans le fichier suviant:



cat > /etc/multipath.conf <<EOF
defaults {
user_friendly_names yes
features "1 queue_if_no_path"
}

blacklist {
devnode "^vd"
}

multipaths {
multipath {
wwid 149455400000000005183dc136916d4cea134d5b5b016fe46
alias ssd1.sda
}
}
EOF
</pre>

Puis ajouter l'entré dans le fstab:
<pre>
# cat
>> /etc/fstab <<EOF
/dev/sda /myssd2 ext4 discard,noatime,_netdev 0 0
EOF
# mkdir /myssd2
# /etc/init.d/multipath-tools restart
#
/etc/init.d/open-iscsi restart
# mount | grep myssd
/dev/mapper/ssd1.sda on /myssd type ext4 (rw,noatime,user_xattr,acl,barrier=1,data=ordered,discard,_netdev)
</pre>

C'est fini :)


h4. Supprimer un disk iscsi

Sur le client, arrêter open-iscsi:
<pre>
/etc/init.d/open-iscsi stop
</pre>

Sur le serveur, récupérer le tid du volume à supprimer, ici le 1 pour le volume sileht:
<pre>
# cat /proc/net/iet/volume
tid:2 name:iqn.2012-02.net.tetaneutral:nagios.disk1
lun:0 state:0 iotype:fileio iomode:wt blocks:25165824 blocksize:512 path:/dev/vgssd/nagios
tid:1 name:iqn.2012-02.net.tetaneutral:sileht.disk1
lun:0 state:0 iotype:fileio iomode:wt blocks:25165824 blocksize:512 path:/dev/vgssd/sileht
</pre>

Puis supprimer, le volume comme ceci:
<pre>
ietadm --op delete --tid=1
lvremove -f /dev/vgssd/sileht
</pre>

Puis supprimer le Target de ce volume dans le fichier /etc/iet/ietd.conf, pour qu'il ne soit pas remonté au prochaine reboot.

h4. Tunning

Dans certain cas si la VM ssd1.ttn boot aprés votre VM, le disque iscsi n'est pas encore prêt et le timeout de login par défaut n'est pas suffisant,
On peux alors ajuster sur le client les valeurs suivantes dans le fichier de configuration "/etc/iscsi/iscsid.conf"
<pre>
node.conn[0].timeo.login_timeout = 30 # (au lieu de 15)
node.session.initial_login_retry_max = 20 (au lieu de 8)
</pre>

Nous aurons ainsi un timeout de 600 seconds au lieu des 120 par défaut.

h3. Redimentionnement du disque d'un client existant:

sur la machine ssd1.ttn

<pre>
lvresize -L+6G /dev/vgssd/nagios
service iscsitarget restart
</pre>

_Note: si ça marche pas (ie: device busy), réessayer._

Ensuite sur la machine nagios:

<pre>
iscsiadm --mode node -R
resize2fs /dev/sda
</pre>

C'est fini !

_Note: au lieu de redémarrer on peut aussi relancer le daemon open-iscsi, mais cela demande d'arrêter tout les services qui utilisent le disque iscsi _

h2. NBD (Network Block Device)

http://en.wikipedia.org/wiki/Network_block_device

h3. Installation de nbd côté serveur

<pre>
apt-get install nbd-server
echo '[general]' > /etc/nbd-server/conf
/etc/init.d/nbd-server restart
</pre>

h3. Configuration d'un nouveau volume réseau

h4. Configuration sur le serveur

<pre>
lvcreate -n debug-gnt -L 2G vgssd
mkfs.ext4 /dev/vgssd/debug-gnt
# tune2fs -o discard /dev/vgssd/debug-gnt # ne marche pas sur squeeze
</pre>

Le port est par convention pour tetaneutral :
1 + 3 last ip digit (ie: 1231 pour 91.224.149.231)

<pre>
cat >> /etc/nbd-server/conf <<EOF
[debug-gnt]
exportname = /dev/vgssd/debug-gnt
port = 1231
authfile = /etc/nbd-server/allow-231
EOF

cat > /etc/nbd-server/allow-231 <<EOF
91.224.149.231
EOF
</pre>

h4. Configuration sur le client

<pre>
apt-get install nbd-client

cat > /etc/nbd-client <<EOF
KILLALL="true"
NBD_DEVICE[0]=/dev/nbd0
NBD_TYPE[0]=f
NBD_HOST[0]=ssd1
NBD_PORT[0]=1231 # < 1 + 3 last ip digit
NBD_EXTRA[0]=
EOF

mkdir /myssd1

cat >> /etc/fstab <<EOF
/dev/nbd0 /myssd ext4 defaults,discard,noauto 0 2
EOF

/etc/init.d/nbd-client restart
mount -a
</pre>

h2. AoE (ATA over Ethernet)

http://en.wikipedia.org/wiki/ATA_over_Ethernet

h3. Installation de AoE côté serveur

<pre>
apt-get install vblade vblade-persist
</pre>

h3. Configuration d'un nouveau volume réseau

h4. Configuration sur le serveur

<pre>
lvcreate -n debug-gnt-3 -L 2G vgssd
mkfs.ext4 /dev/vgssd/debug-gnt-3
# tune2fs -o discard /dev/vgssd/debug-gnt-3 # ne marche pas sur squeeze
</pre>

<pre>
vblade-persist setup 0 0 eth0 /dev/vgssd/debug-gnt-3
vblade-persist mac 0 0 add aa:00:00:be:8f:d0
vblade-persist auto 0 0
vblade-persist restart 0 0
</pre>

Le 0 0 est un identifiant unique du disque
Dans AoE les acl s'applique sur les adresses MAC

AoE communique sur la couche ethernet comme son nom l'indique
Il n'est donc pas routable

h4. Configuration sur le client

<pre>
apt-get install aoe-tools
</pre>

dans /etc/default/aoetools changer INTERFACES comme ceci:

<pre>
INTERFACES="eth0"
</pre>

<pre>
/etc/init.d/aoetools start
aoe-discover

cat >> /etc/fstab <<EOF
/dev/etherd/e0.0 /myssd2 ext4 discard,noatime,_netdev 0 0
EOF

mkdir /myssd2

/etc/init.d/aoetools restart
mount -a
</pre>

h2. Installation d'une machine SSDx

h3. Préparation du disque sur h5 et h6

<pre>
root@h5:~# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): c
DOS Compatibility flag is not set

Command (m for help): p

Disk /dev/sda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001def5

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1216 9764864 83 Linux
/dev/sda2 1216 1703 3906560 82 Linux swap / Solaris

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (1703-4865, default 1703):
Using default value 1703
Last cylinder, +cylinders or +size{K,M,G} (1703-4865, default 4865):
Using default value 4865

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!
</pre>

Création du lvm

<pre>
pvcreate /dev/sda3
vgcreate kvmvgssd /dev/sda3
</pre>

*Création de la vm, sur le master node (ie: h1):*

La taille du disque sera de 24680M: 24680M + 128M (drbd) = 24808M dispo sur le SSD

<pre>
gnt-instance add -t drbd -B memory=512,vcpus=2 --disk 0:size=24680M,vg=kvmvgssd -n h5:h6 -o debootstrap+default --no-wait-for-sync -H kvm:boot_order=cdrom,cdrom_image_path=/root/debian-6.0.3-amd64-netinst.iso ssd1
</pre>

Ensuite se connecter en vnc pour faire l'installation classique, uniquement SSH server est installé
Le FS c'est un VG appelé vgssd, puis un lv 'root' de 4G en ext4 avec l'option discard et noatime

Pour le vnc, il faut redigirer de la machine ou tourne la vm (ie: h5 pour ssd1) sur le port retourné par la commande suivante :
<pre>
gnt-instance list -o network_port ssd1
</pre>

*Une fois la vm installé voici la configuration à effectuer:*
Via un terminal sur la vm (en vnc toujours)

<pre>
cat >> /etc/apt/sources.list <<EOF
deb http://backports.debian.org/debian-backports squeeze-backports main
deb-src http://backports.debian.org/debian-backports squeeze-backports main
EOF

sed -i -e 's/^.*Port.*$/Port 2222/' -e 's/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/' $TARGET/etc/ssh/sshd_configentication.*$/PasswordAuthentication no/' /etc/ssh/sshd_config

cat > /etc/resolv.conf <<EOF
domain tetaneutral.net
search tetaneutral.net
nameserver 91.224.149.254
nameserver 8.8.8.8
EOF

cat >/etc/hosts <<EOF
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

91.224.149.251 ssd1.tetaneutral.net ssd1
2a01:6600:8081:fb00::1 ssd1.tetaneutral.net ssd1
EOF

cat > /etc/network/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 91.224.149.251
netmask 255.255.255.0
network 91.224.149.0
broadcast 91.224.149.255
gateway 91.224.149.254

iface eth0 inet6 static
address 2a01:6600:8081:fb00::1
netmask 56
gateway fe80::31
EOF

cat >> /etc/default/grub <<EOF
GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX elevator=noop console=ttyS0,38400"
GRUB_TERMINAL=console
EOF
</pre>

# Décommenter cette ligne dans /etc/inittab
<pre>
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
</pre>

<pre>
update-grub
apt-get install -t squeeze-backports linux-image-2.6.39-bpo.2-amd64
</pre>