Project

General

Profile

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

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
  1. 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