Le SSD¶
- Table of contents
- Le SSD
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.
Liens¶
- http://mkp.net/pubs/storage-topology.pdf
- 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
- http://wiki.debian.org/SSDOptimization
ISCSI (Internet Small Computer Systems Interface), recommandé¶
http://en.wikipedia.org/wiki/ISCSI
Installation de iscsi côté server¶
apt-get install iscsitarget-dkms iscsitarget
Dans "/etc/iet/initiators.allow" et dans "/etc/iet/targets.allow" commenter la ligne suivante:
ALL ALL
Puis démarrer le iscsi
/etc/init.d/iscsitarget start
Configuration d'un nouveau volume réseau¶
Configuration sur le serveur¶
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
Dans le fichier /etc/iet/ietd.conf ajouter un "target iscsi":
Target iqn.2012-02.net.tetaneutral:debug-gnt.disk1 IncomingUser OutgoingUser Lun 0 Path=/dev/vgssd/debug-gnt,Type=fileio Alias disk1
Dans le fichier /etc/iet/initiators.allow, autorisé la machine:
iqn.2012-02.net.tetaneutral:nagios.disk1 91.224.149.236
Puis on reload
/etc/init.d/iscsitarget restart
En iscsi, on peut aussi utiliser des login/password en plus des ip pour les ACL
Configuration sur le client¶
# 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
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
Puis ajouter l'entré dans le fstab:
# 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)
C'est fini :)
Supprimer un disk iscsi¶
Sur le client, arrêter open-iscsi:
/etc/init.d/open-iscsi stop
Sur le serveur, récupérer le tid du volume à supprimer, ici le 1 pour le volume sileht:
# 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
Puis supprimer, le volume comme ceci:
ietadm --op delete --tid=1 lvremove -f /dev/vgssd/sileht
Puis supprimer le Target de ce volume dans le fichier /etc/iet/ietd.conf, pour qu'il ne soit pas remonté au prochaine reboot.
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"
node.conn[0].timeo.login_timeout = 30 # (au lieu de 15) node.session.initial_login_retry_max = 20 (au lieu de 8)
Nous aurons ainsi un timeout de 600 seconds au lieu des 120 par défaut.
Redimentionnement du disque d'un client existant:¶
sur la machine ssd1.ttn
lvresize -L+6G /dev/vgssd/nagios service iscsitarget restart
Note: si ça marche pas (ie: device busy), réessayer.
Ensuite sur la machine nagios:
iscsiadm --mode node -R resize2fs /dev/sda
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 _
NBD (Network Block Device)¶
http://en.wikipedia.org/wiki/Network_block_device
Installation de nbd côté serveur¶
apt-get install nbd-server echo '[general]' > /etc/nbd-server/conf /etc/init.d/nbd-server restart
Configuration d'un nouveau volume réseau¶
Configuration sur le serveur¶
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
Le port est par convention pour tetaneutral :
1 + 3 last ip digit (ie: 1231 pour 91.224.149.231)
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
Configuration sur le client¶
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
AoE (ATA over Ethernet)¶
http://en.wikipedia.org/wiki/ATA_over_Ethernet
Installation de AoE côté serveur¶
apt-get install vblade vblade-persist
Configuration d'un nouveau volume réseau¶
Configuration sur le serveur¶
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
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
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
Configuration sur le client¶
apt-get install aoe-tools
dans /etc/default/aoetools changer INTERFACES comme ceci:
INTERFACES="eth0"
/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
Installation d'une machine SSDx¶
Préparation du disque sur h5 et h6¶
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!
Création du lvm
pvcreate /dev/sda3 vgcreate kvmvgssd /dev/sda3
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
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
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 :
gnt-instance list -o network_port ssd1
Une fois la vm installé voici la configuration à effectuer:
Via un terminal sur la vm (en vnc toujours)
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
- Décommenter cette ligne dans /etc/inittab
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
update-grub apt-get install -t squeeze-backports linux-image-2.6.39-bpo.2-amd64