SSD » Historique » Version 13
Version 12 (Mehdi Abaakouk, 24/07/2012 00:04) → Version 13/53 (Laurent GUERBY, 08/08/2012 09:38)
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://bcache.evilpiepirate.org/
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
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
cat >> /etc/fstab <<EOF
/dev/sda /myssd2 ext4 discard,noatime,_netdev 0 0
EOF
mkdir /myssd2
/etc/init.d/open-iscsi restart
</pre>
h4. Supprimer un disk iscsi
Sur le client, arrêter open-iscsi:
<pre>
/etc/init.d/open-iscsi stop
</pre>
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>
{{>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://bcache.evilpiepirate.org/
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
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
cat >> /etc/fstab <<EOF
/dev/sda /myssd2 ext4 discard,noatime,_netdev 0 0
EOF
mkdir /myssd2
/etc/init.d/open-iscsi restart
</pre>
h4. Supprimer un disk iscsi
Sur le client, arrêter open-iscsi:
<pre>
/etc/init.d/open-iscsi stop
</pre>
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>