Projet

Général

Profil

Cluster Ganeti » Historique » Version 60

Mehdi Abaakouk, 14/07/2013 13:21

1 16 Mehdi Abaakouk
h1. Cluster Ganeti
2 1 Mehdi Abaakouk
3 9 Mehdi Abaakouk
{{>toc}}
4 9 Mehdi Abaakouk
5 25 Laurent GUERBY
h2. Liens
6 25 Laurent GUERBY
7 25 Laurent GUERBY
talk par iustin a google I/O sur ganeti : a 28:00 http://youtu.be/TELArK6SmyY
8 32 Laurent GUERBY
extlinux pour ganeti http://anonscm.debian.org/gitweb/?p=mirror/dsa-puppet.git;a=blob;f=modules/ganeti2/templates/instance-debootstrap/hooks/20-dsa-install-bootloader.erb;h=2bbba5e762b512c1c7b081049cf8ffd6cc472f96;hb=master
9 25 Laurent GUERBY
10 18 Laurent GUERBY
h2. Installation from scratch
11 18 Laurent GUERBY
12 23 Laurent GUERBY
h3. Ganeti
13 23 Laurent GUERBY
14 18 Laurent GUERBY
apt-get install ganeti2
15 1 Mehdi Abaakouk
16 30 Mehdi Abaakouk
h3. configuration LVM
17 18 Laurent GUERBY
18 30 Mehdi Abaakouk
Dans le fichier */etc/lvm/lvm.conf* changer le filter lvm pour:
19 23 Laurent GUERBY
20 18 Laurent GUERBY
<pre>
21 18 Laurent GUERBY
# filter = [ "a/.*/" ]
22 18 Laurent GUERBY
filter = ["r|/dev/cdrom|", "r|/dev/drbd[0-9]+|" ]
23 1 Mehdi Abaakouk
</pre>
24 1 Mehdi Abaakouk
25 29 Mehdi Abaakouk
Evite les soucis avec DRBD (ie: pour que la machine hôte ne detecte pas les LVM qui sont dans le VM lors du vgscan and co)
26 1 Mehdi Abaakouk
27 30 Mehdi Abaakouk
h3. configuration DRBD
28 23 Laurent GUERBY
29 19 Laurent GUERBY
* activer drbd
30 19 Laurent GUERBY
31 19 Laurent GUERBY
<pre>
32 24 Christophe Moille
# echo "options drbd minor_count=128 usermode_helper=/bin/true" >> /etc/modprobe.d/drbd-ganeti.conf
33 19 Laurent GUERBY
# rmmod drbd
34 1 Mehdi Abaakouk
# modprobe drbd
35 19 Laurent GUERBY
# cat /sys/module/drbd/parameters/usermode_helper 
36 1 Mehdi Abaakouk
/bin/true
37 1 Mehdi Abaakouk
</pre>
38 1 Mehdi Abaakouk
39 30 Mehdi Abaakouk
h3. Partitionnement
40 1 Mehdi Abaakouk
41 1 Mehdi Abaakouk
<pre>
42 30 Mehdi Abaakouk
# fdisk /dev/sda
43 23 Laurent GUERBY
new primary part
44 1 Mehdi Abaakouk
hex code 8e
45 30 Mehdi Abaakouk
46 30 Mehdi Abaakouk
# partprobe
47 1 Mehdi Abaakouk
</pre>
48 19 Laurent GUERBY
49 57 Laurent GUERBY
Ou avec parted:
50 57 Laurent GUERBY
51 57 Laurent GUERBY
<pre>
52 57 Laurent GUERBY
(parted) mkpart primary XXgb 100%   
53 57 Laurent GUERBY
(parted) set NN lvm on          
54 57 Laurent GUERBY
</pre>
55 57 Laurent GUERBY
56 30 Mehdi Abaakouk
h3. Création du VG pour ganeti
57 30 Mehdi Abaakouk
58 30 Mehdi Abaakouk
<pre>
59 57 Laurent GUERBY
apt-get install lvm2
60 19 Laurent GUERBY
pvcreate /dev/sda2 
61 1 Mehdi Abaakouk
vgcreate vg_ganeti /dev/sda2
62 30 Mehdi Abaakouk
</pre>
63 18 Laurent GUERBY
64 30 Mehdi Abaakouk
S'il existe déjà vider le volume group et le recreer
65 18 Laurent GUERBY
66 18 Laurent GUERBY
<pre>
67 18 Laurent GUERBY
pvs
68 1 Mehdi Abaakouk
vgs
69 1 Mehdi Abaakouk
lvs
70 18 Laurent GUERBY
lvremove
71 18 Laurent GUERBY
vgcreate kvmvg /dev/sdb... #TODO check
72 18 Laurent GUERBY
</pre>
73 18 Laurent GUERBY
74 23 Laurent GUERBY
h3. Network
75 23 Laurent GUERBY
76 20 Laurent GUERBY
<pre>
77 20 Laurent GUERBY
# dans /etc/network/interfaces
78 20 Laurent GUERBY
# The primary network interface
79 20 Laurent GUERBY
auto eth0
80 20 Laurent GUERBY
iface eth0 inet manual
81 20 Laurent GUERBY
82 20 Laurent GUERBY
# dans /etc/rc.local     
83 20 Laurent GUERBY
ip l set eth0 up    
84 20 Laurent GUERBY
                    
85 20 Laurent GUERBY
brctl addbr ganeti-br0
86 20 Laurent GUERBY
ip li set ganeti-br0 up
87 1 Mehdi Abaakouk
brctl addif ganeti-br0 eth0
88 20 Laurent GUERBY
                    
89 20 Laurent GUERBY
ip a a 10.42.0.13/24 dev ganeti-br0
90 20 Laurent GUERBY
ip r a default via 10.42.0.1 
91 20 Laurent GUERBY
              
92 20 Laurent GUERBY
</pre>
93 18 Laurent GUERBY
94 23 Laurent GUERBY
h3. DNS
95 21 Laurent GUERBY
96 1 Mehdi Abaakouk
<pre>
97 1 Mehdi Abaakouk
# Dans /etc/hosts              
98 21 Laurent GUERBY
10.42.0.10 tmaster.thsf tmaster
99 21 Laurent GUERBY
10.42.0.11 t1.thsf t1     
100 21 Laurent GUERBY
10.42.0.12 t2.thsf t2
101 21 Laurent GUERBY
10.42.0.13 t3.thsf t3
102 21 Laurent GUERBY
</pre>
103 23 Laurent GUERBY
104 23 Laurent GUERBY
h3. Ganeti Service
105 21 Laurent GUERBY
106 31 Mehdi Abaakouk
On master:
107 1 Mehdi Abaakouk
108 31 Mehdi Abaakouk
Initialiser le cluster:
109 21 Laurent GUERBY
<pre>
110 21 Laurent GUERBY
gnt-cluster init --nic-parameters mode=bridged,link=ganeti-br0 --master-netdev=ganeti-br0 \                       
111 1 Mehdi Abaakouk
 --vg-name vg_ganeti --enabled-hypervisors=kvm tmaster.thsf
112 31 Mehdi Abaakouk
</pre>
113 1 Mehdi Abaakouk
114 31 Mehdi Abaakouk
Ajouter un noeud au cluster (t2):
115 31 Mehdi Abaakouk
<pre>
116 21 Laurent GUERBY
gnt-node add t2
117 31 Mehdi Abaakouk
</pre>
118 21 Laurent GUERBY
119 31 Mehdi Abaakouk
Installation d'outils d'administration de ganeti:
120 21 Laurent GUERBY
121 31 Mehdi Abaakouk
<pre>apt-get install ganeti-htools ganeti-instance-debootstrap</pre>
122 21 Laurent GUERBY
123 31 Mehdi Abaakouk
Ajout d'une VM
124 22 Laurent GUERBY
125 31 Mehdi Abaakouk
<pre># vi /etc/hosts
126 22 Laurent GUERBY
10.42.0.101 vm1.thsf vm1
127 22 Laurent GUERBY
128 22 Laurent GUERBY
gnt-cluster copyfile /etc/hosts
129 22 Laurent GUERBY
130 21 Laurent GUERBY
gnt-instance add -H kernel_path=/boot/vmlinuz-3.2.0-2-amd64,initrd_path=/boot/initrd.img-3.2.0-2-amd64 \
131 21 Laurent GUERBY
-t drbd -B memory=512M,vcpus=1 --disk 0:size=5G -I hail -o debootstrap+default vm1.thsf
132 21 Laurent GUERBY
</pre>
133 10 Mehdi Abaakouk
134 1 Mehdi Abaakouk
h2. Administration des VMs
135 27 Laurent GUERBY
136 60 Mehdi Abaakouk
137 48 Fabien Dupont
h3. Création d'une VM sous FreeBSD (ou autre)
138 48 Fabien Dupont
139 48 Fabien Dupont
Exemple avec la VM anapivirtua :
140 48 Fabien Dupont
141 48 Fabien Dupont
Détermination du nœud primaire de la VM (ici, h6) :
142 48 Fabien Dupont
143 48 Fabien Dupont
<pre>
144 48 Fabien Dupont
# gnt-instance list anapivirtua.tetaneutral.net 
145 48 Fabien Dupont
Instance                    Hypervisor OS                    Primary_node       Status  Memory
146 48 Fabien Dupont
anapivirtua.tetaneutral.net kvm        debootstrap+squeeze64 h6.tetaneutral.net running   512M
147 48 Fabien Dupont
</pre>
148 48 Fabien Dupont
149 48 Fabien Dupont
Téléchargement de l'ISO de FreeBSD sur le nœud primaire :
150 48 Fabien Dupont
151 48 Fabien Dupont
<pre>
152 48 Fabien Dupont
# cd ~/fab
153 48 Fabien Dupont
# wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-amd64-bootonly.iso
154 48 Fabien Dupont
</pre>
155 48 Fabien Dupont
156 48 Fabien Dupont
Sur le master ganeti (h4 actuellement) :
157 48 Fabien Dupont
158 50 Fabien Dupont
FreeBSD ne fonctionne bien qu'avec les cartes ETH émulée de type e1000 et les disques émulés en ide, de plus il ne faut pas que KVM boote un kernel et active la console :
159 50 Fabien Dupont
160 48 Fabien Dupont
<pre>
161 48 Fabien Dupont
# gnt-instance modify -H serial_console=false anapivirtua.tetaneutral.net
162 1 Mehdi Abaakouk
# gnt-instance modify -H kernel_path="" anapivirtua.tetaneutral.net
163 50 Fabien Dupont
# gnt-instance modify -H nic_type="e1000" anapivirtua.tetaneutral.net
164 50 Fabien Dupont
# gnt-instance modify -H disk_type="ide" anapivirtua.tetaneutral.net
165 1 Mehdi Abaakouk
</pre>
166 1 Mehdi Abaakouk
167 50 Fabien Dupont
Et on n'a plus qu'à démarrer sur le CD d'install :
168 1 Mehdi Abaakouk
169 1 Mehdi Abaakouk
<pre>
170 50 Fabien Dupont
# gnt-instance start -H boot_order=cdrom,cdrom_image_path=/root/fab/FreeBSD-9.1-RELEASE-amd64-bootonly.iso anapivirtua.tetaneutral.net
171 48 Fabien Dupont
</pre>
172 48 Fabien Dupont
173 50 Fabien Dupont
Retour sur le nœud primaire, ouverture de VNC pour que l'adhérent puisse effectuer l'installation :
174 48 Fabien Dupont
175 48 Fabien Dupont
<pre>
176 48 Fabien Dupont
# iptables -L -v -n | grep anapivirtua.tetaneutral.net
177 48 Fabien Dupont
    0     0 REJECT     tcp  --  *      *      !91.224.149.193       0.0.0.0/0           tcp dpt:12647 /* VNC for anapivirtua.tetaneutral.net */ reject-with icmp-port-unreachable 
178 48 Fabien Dupont
# iptables -D INPUT -p tcp ! -s 91.224.149.193 --dport 12647 -j REJECT
179 48 Fabien Dupont
</pre>
180 48 Fabien Dupont
181 48 Fabien Dupont
Communiquer à l'adhérent l'IP et le port pour VNC (ici h6.tetaneutral.net:12647)
182 48 Fabien Dupont
183 48 Fabien Dupont
Une fois qu'il a fini l'installation, il faut refermer VNC et voilà !
184 48 Fabien Dupont
185 48 Fabien Dupont
<pre>
186 51 Fabien Dupont
# iptables -A INPUT -p tcp ! -s 91.224.149.193 --dport 12647 -j REJECT -m comment --comment "VNC for anapivirtua.tetaneutral.net"
187 48 Fabien Dupont
</pre>
188 60 Mehdi Abaakouk
189 60 Mehdi Abaakouk
h3. Réparation de grub dans une VM debian (ou debian like)
190 60 Mehdi Abaakouk
191 60 Mehdi Abaakouk
On va faire booter la VM sur system rescue CD:
192 60 Mehdi Abaakouk
193 60 Mehdi Abaakouk
Sur ganeti master node:
194 60 Mehdi Abaakouk
195 60 Mehdi Abaakouk
<pre>
196 60 Mehdi Abaakouk
gnt-instance modify -H boot_order=cdrom,cdrom_image_path=/root/systemrescuecd-x86-3.7.0.iso coop-integrale.tetaneutral.net
197 60 Mehdi Abaakouk
gnt-instance reboot --type=full --shutdown-timeout=0 coop-integrale.tetaneutral.net
198 60 Mehdi Abaakouk
</pre>
199 60 Mehdi Abaakouk
200 60 Mehdi Abaakouk
De chez soit on se connecte au vnc de la VM
201 60 Mehdi Abaakouk
202 60 Mehdi Abaakouk
On voit l'invite syslinux de system rescue CD, une fois l'OS démarrer, on répare Grub comme ceci:
203 60 Mehdi Abaakouk
                                                                                    
204 60 Mehdi Abaakouk
<pre>
205 60 Mehdi Abaakouk
mount /dev/vda1 /mnt/custom
206 60 Mehdi Abaakouk
mount -o bind /proc /mnt/custom/proc
207 60 Mehdi Abaakouk
mount -o bind /sys /mnt/custom/sys
208 60 Mehdi Abaakouk
mount -o bind /sys /mnt/custom/sys
209 60 Mehdi Abaakouk
chroot /mnt/custom /bin/bash
210 60 Mehdi Abaakouk
211 60 Mehdi Abaakouk
dpkg-reconfigure grub-pc
212 60 Mehdi Abaakouk
213 60 Mehdi Abaakouk
# quand debconf demande de choisir le device pour grub prendre au moins: /dev/vda
214 60 Mehdi Abaakouk
215 60 Mehdi Abaakouk
exit
216 60 Mehdi Abaakouk
umount /mnt/custom/*
217 60 Mehdi Abaakouk
umount /mnt/custom
218 60 Mehdi Abaakouk
219 60 Mehdi Abaakouk
reboot
220 60 Mehdi Abaakouk
</pre>
221 60 Mehdi Abaakouk
222 60 Mehdi Abaakouk
Choisir au reboot "boot from first disk" pour tester le grub.
223 60 Mehdi Abaakouk
224 60 Mehdi Abaakouk
225 60 Mehdi Abaakouk
Puis on reconfigure le boot the le disque à partir du ganeti master node:
226 60 Mehdi Abaakouk
227 60 Mehdi Abaakouk
<pre>
228 60 Mehdi Abaakouk
gnt-instance modify -H boot_order=disk,cdrom_image_path= coop-integrale.tetaneutral.net
229 60 Mehdi Abaakouk
gnt-instance reboot --type=full coop-integrale.tetaneutral.net
230 60 Mehdi Abaakouk
</pre>
231 60 Mehdi Abaakouk
232 48 Fabien Dupont
233 46 Laurent GUERBY
h3. Backup et effacement d'une VM
234 46 Laurent GUERBY
235 46 Laurent GUERBY
Vers h2 :
236 46 Laurent GUERBY
<pre>
237 47 Laurent GUERBY
gnt-instance shutdown xxx
238 46 Laurent GUERBY
gnt-instance activate-disks xxx
239 46 Laurent GUERBY
VM=xxx.gz; cd /backup/ganeti-vm-raw/20130429 ; if [ ! -f ${VM} ]; then socat -u tcp4-listen:50555 - > $VM ; zcat $VM | md5sum -; du -hs *; else echo $VM already present;fi
240 46 Laurent GUERBY
DB=nnn; cat /dev/drbd$DB | gzip --fast|socat -u - tcp4:h2:50555;md5sum /dev/drbd$DB
241 46 Laurent GUERBY
gnt-instance deactivate-disks xxx
242 46 Laurent GUERBY
gnt-instance remove xxx
243 46 Laurent GUERBY
</pre>
244 46 Laurent GUERBY
245 34 Mehdi Abaakouk
h3. Gestion d'un gnt-instance migrate qui reste bloquer
246 34 Mehdi Abaakouk
247 34 Mehdi Abaakouk
Symptôme: la progression du "gnt-instance migrate <vmname>" ne progresse plus"
248 34 Mehdi Abaakouk
249 34 Mehdi Abaakouk
<pre>
250 34 Mehdi Abaakouk
# gnt-instance info -s nagios  | grep 'node.:' -A1
251 34 Mehdi Abaakouk
      nodeA:       h4.tetaneutral.net, minor=18
252 34 Mehdi Abaakouk
      nodeB:       h6.tetaneutral.net, minor=27
253 34 Mehdi Abaakouk
      port:        12589
254 34 Mehdi Abaakouk
</pre>
255 34 Mehdi Abaakouk
256 34 Mehdi Abaakouk
Donc si on regarde sur la machine primaire et secondaire l'état:
257 34 Mehdi Abaakouk
258 34 Mehdi Abaakouk
<pre>
259 34 Mehdi Abaakouk
# grep '18:' -A5 /proc/drbd # (et sur la secondaire: grep '27:' -A5 /proc/drbd)
260 34 Mehdi Abaakouk
0: cs:SyncSource st:Primary/Primary ds:UpToDate/UpToDate C r---
261 34 Mehdi Abaakouk
ns:601729944 nr:0 dw:0 dr:601737980 al:0 bm:429909 lo:0 pe:0 ua:0 ap:0 oos:0
262 34 Mehdi Abaakouk
[===================>] sync'ed:100.0% (965/6869678)M 
263 34 Mehdi Abaakouk
stalled 
264 34 Mehdi Abaakouk
</pre>
265 34 Mehdi Abaakouk
266 34 Mehdi Abaakouk
Si on tente un commande drbd on a:
267 34 Mehdi Abaakouk
268 34 Mehdi Abaakouk
<pre>
269 34 Mehdi Abaakouk
# drbdsetup /dev/drbd18 sh-status
270 34 Mehdi Abaakouk
(longue attente)
271 34 Mehdi Abaakouk
No response from the DRBD driver! Is the module loaded?
272 34 Mehdi Abaakouk
</pre>
273 34 Mehdi Abaakouk
274 36 Mehdi Abaakouk
Bref Drbd est dans les choux, ca semble être un bug connu des versions <= 8.3.12
275 34 Mehdi Abaakouk
276 37 Laurent GUERBY
Sources : 
277 37 Laurent GUERBY
# http://www.mentby.com/Group/drbd-user/recovering-from-erroneous-sync-state.html
278 37 Laurent GUERBY
# http://lists.linbit.com/pipermail/drbd-dev/2007-May/000751.html
279 37 Laurent GUERBY
# https://encrypted.google.com/search?q=drbd+stall+100%25&hl=en
280 35 Laurent GUERBY
281 34 Mehdi Abaakouk
Pour réparer sur la machine h4, le node primaire, faire:
282 34 Mehdi Abaakouk
<pre>
283 34 Mehdi Abaakouk
# /etc/ganeti/iptables-to-reset-drbd-connection.sh 12589 # <-- 12589 le port de drbd récupéré plus haut
284 34 Mehdi Abaakouk
285 34 Mehdi Abaakouk
** Attention à être sur la bonne machine **
286 34 Mehdi Abaakouk
Pour couper la connection
287 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
288 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
289 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
290 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
291 34 Mehdi Abaakouk
292 34 Mehdi Abaakouk
Pour remettre la connection
293 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
294 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
295 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
296 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
297 34 Mehdi Abaakouk
</pre>
298 34 Mehdi Abaakouk
299 34 Mehdi Abaakouk
Exécuter la première partie puis vérifier dans /proc/drbd qui celui-ci est en WFConnection.
300 34 Mehdi Abaakouk
301 34 Mehdi Abaakouk
Puis rétablir la connexion avec la seconde partie et vérifier /proc/drbd que c'est bien reconnecté.
302 34 Mehdi Abaakouk
303 34 Mehdi Abaakouk
Ensuite si ganeti n'a pas vu la réparation, faire sur le master node et le node primaire de la machine:
304 34 Mehdi Abaakouk
305 34 Mehdi Abaakouk
<pre>
306 34 Mehdi Abaakouk
# /etc/init.d/ganeti restart
307 34 Mehdi Abaakouk
</pre>
308 34 Mehdi Abaakouk
Ceci passe en error le job de migration
309 34 Mehdi Abaakouk
310 34 Mehdi Abaakouk
Puis sur le master node, on nettoye les résidu de la migration échouée:
311 34 Mehdi Abaakouk
<pre>
312 34 Mehdi Abaakouk
# gnt-instance migrate --cleanup nagios
313 34 Mehdi Abaakouk
</pre>
314 34 Mehdi Abaakouk
315 34 Mehdi Abaakouk
316 18 Laurent GUERBY
h3. Gestion d'un disque en I/O error
317 27 Laurent GUERBY
318 1 Mehdi Abaakouk
First put the disk in failure offline:
319 28 Mehdi Abaakouk
320 28 Mehdi Abaakouk
<pre>echo offline > /sys/block/sdb/device/state</pre>
321 27 Laurent GUERBY
322 1 Mehdi Abaakouk
Then we need to remove the volume group, here /dev/kvmvg
323 27 Laurent GUERBY
We need to do it manually because vgremove will not work in this case
324 28 Mehdi Abaakouk
325 27 Laurent GUERBY
<pre>/dev/kvmvg# for i in *; do echo === $(date) == $i ; dmsetup remove /dev/kvmvg/"$i"; echo $?; done</pre>
326 1 Mehdi Abaakouk
327 27 Laurent GUERBY
This will leave a few lv when ganeti hasnt detected for some reason the disk failure. 
328 27 Laurent GUERBY
For those left we need to force drbd to go Diskless, use either gnt-instance info or ls -l /var/run/ganeti/instance-disks/ or /var/lib/ganeti/config.data to find the VM and /dev/drbdNNN then
329 28 Mehdi Abaakouk
330 27 Laurent GUERBY
<pre>drbdsetup /dev/drbd47 detach</pre>
331 27 Laurent GUERBY
332 27 Laurent GUERBY
Then gnt-instance info VM to force ganeti to recognize the disk failure (it will take a few minutes)
333 27 Laurent GUERBY
334 27 Laurent GUERBY
Then dmsetup remove will work.
335 27 Laurent GUERBY
336 27 Laurent GUERBY
After the last dmsetup remove /dev/kvmvg will disappear.
337 27 Laurent GUERBY
338 27 Laurent GUERBY
Now you can physically remove the disk and plug a new disk on a new SATA port (on the same SATA port the kernel didn't recognize the new drive)
339 27 Laurent GUERBY
Then create a LVM partition then vgcreate kvmvg /dev/sdX
340 1 Mehdi Abaakouk
341 27 Laurent GUERBY
Now we need to recreate redundancy 
342 27 Laurent GUERBY
343 1 Mehdi Abaakouk
On the still running VM you can use 
344 28 Mehdi Abaakouk
345 27 Laurent GUERBY
<pre>gnt-instance replace-disks --submit -a VMname</pre>
346 1 Mehdi Abaakouk
347 27 Laurent GUERBY
On the stopped VM you need to do manually
348 28 Mehdi Abaakouk
349 28 Mehdi Abaakouk
<pre>gnt-instance replace-disks --submit -p VMname # if primary to reconstruct
350 1 Mehdi Abaakouk
gnt-instance replace-disks --submit -s VMname # if secondary to reconstruct</pre>
351 1 Mehdi Abaakouk
352 1 Mehdi Abaakouk
At 15 MByte/s 1 TB to reconstruct will take about 18h30.
353 28 Mehdi Abaakouk
354 27 Laurent GUERBY
Before remove the disk from the server, we must prepare the disk for unplug:
355 29 Mehdi Abaakouk
356 28 Mehdi Abaakouk
<pre>echo 1 > /sys/block/sdX/device/delete</pre>
357 28 Mehdi Abaakouk
358 28 Mehdi Abaakouk
359 28 Mehdi Abaakouk
Links:
360 27 Laurent GUERBY
361 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#preparing-for-disk-operations
362 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#generalized-storage-handling
363 28 Mehdi Abaakouk
http://www.lancealbertson.com/2011/02/handling-hdd-failures-with-ganeti/
364 27 Laurent GUERBY
http://www.sakana.fr/blog/2009/05/04/linux-sata-hot-plug-unplug/
365 10 Mehdi Abaakouk
366 1 Mehdi Abaakouk
h3. Demarrer et arrêter une instance ?
367 10 Mehdi Abaakouk
368 10 Mehdi Abaakouk
<pre>
369 10 Mehdi Abaakouk
gnt-instance start vm1
370 10 Mehdi Abaakouk
gnt-instance stop vm1
371 1 Mehdi Abaakouk
</pre>
372 26 Mehdi Abaakouk
373 26 Mehdi Abaakouk
Si pendant l'extinction de la VM le message suivant apparait:
374 26 Mehdi Abaakouk
<pre>WARNING: Could not shutdown block device disk/0 on node h6.tetaneutral.net: drbd45: can't shutdown drbd device: /dev/drbd45: State change failed: (-12) Device is held open by someone</pre>
375 26 Mehdi Abaakouk
376 26 Mehdi Abaakouk
Sur h6 on peut remarquer que l'on a un status non nominal sur drbd:
377 26 Mehdi Abaakouk
<pre>$ grep -A4 45: /proc/drbd
378 26 Mehdi Abaakouk
45: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
379 26 Mehdi Abaakouk
    ns:68584404 nr:0 dw:67728388 dr:2484540 al:535 bm:237 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
380 26 Mehdi Abaakouk
</pre>
381 26 Mehdi Abaakouk
382 26 Mehdi Abaakouk
Pour résoudre le probléme taper:
383 26 Mehdi Abaakouk
<pre>drbdsetup /dev/drbd45 down</pre>
384 26 Mehdi Abaakouk
385 26 Mehdi Abaakouk
Si le message persiste, il faut vérifier que plus aucun processus n'utilise le drbd45 sur h6, par exemple vérifier devmapper:
386 26 Mehdi Abaakouk
<pre>dmsetup ls | grep drbd45</pre>
387 26 Mehdi Abaakouk
388 26 Mehdi Abaakouk
Référence dans la doc ganeti: http://docs.ganeti.org/ganeti/2.5/html/walkthrough.html#in-use-disks-at-instance-shutdown
389 10 Mehdi Abaakouk
390 1 Mehdi Abaakouk
h3. Comment tout savoir sur une vm ?
391 1 Mehdi Abaakouk
392 1 Mehdi Abaakouk
<pre>
393 1 Mehdi Abaakouk
gnt-instance info vm1
394 1 Mehdi Abaakouk
</pre>
395 10 Mehdi Abaakouk
396 1 Mehdi Abaakouk
h3. Déplacement le(s) disque(s) dur d'une VM
397 1 Mehdi Abaakouk
398 1 Mehdi Abaakouk
Si la machine a ces disques au format plain (sans drbd), taper:
399 1 Mehdi Abaakouk
400 1 Mehdi Abaakouk
<pre>
401 1 Mehdi Abaakouk
gnt-instance stop vm1
402 1 Mehdi Abaakouk
gnt-instance move -n h6 vm1
403 1 Mehdi Abaakouk
gnt-instance start vm1
404 1 Mehdi Abaakouk
</pre>
405 1 Mehdi Abaakouk
406 1 Mehdi Abaakouk
Si la machine utilise drbd (uniquement le disque de la node secondaire bascule):
407 1 Mehdi Abaakouk
408 1 Mehdi Abaakouk
<pre>
409 1 Mehdi Abaakouk
gnt-instance replace-disks -n h6 vm1
410 10 Mehdi Abaakouk
</pre>
411 1 Mehdi Abaakouk
412 1 Mehdi Abaakouk
Si vous voulais déplacer l'autre disque du drbd, il faut basculer la machine, puis refaire la même chose
413 10 Mehdi Abaakouk
414 1 Mehdi Abaakouk
h3. Basculer/migrer une machine qui utilise drbd
415 1 Mehdi Abaakouk
416 1 Mehdi Abaakouk
Bascule avec arret de la machine:
417 1 Mehdi Abaakouk
418 1 Mehdi Abaakouk
<pre>
419 1 Mehdi Abaakouk
gnt-instance failover vm1
420 1 Mehdi Abaakouk
</pre>
421 10 Mehdi Abaakouk
422 10 Mehdi Abaakouk
Sans arrêt, migration à chaud:
423 1 Mehdi Abaakouk
424 1 Mehdi Abaakouk
<pre>
425 1 Mehdi Abaakouk
gnt-instance migrate vm1
426 10 Mehdi Abaakouk
</pre>
427 1 Mehdi Abaakouk
428 1 Mehdi Abaakouk
En cas de soucis primaire/secondaire:
429 1 Mehdi Abaakouk
430 1 Mehdi Abaakouk
<pre>
431 1 Mehdi Abaakouk
gnt-instance migrate --cleanup vm1
432 1 Mehdi Abaakouk
</pre>
433 10 Mehdi Abaakouk
434 42 Laurent GUERBY
cleanup marche en cas de split brain, example de /proc/drbd :
435 42 Laurent GUERBY
<pre>
436 42 Laurent GUERBY
h5: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
437 42 Laurent GUERBY
h1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----
438 42 Laurent GUERBY
</pre>
439 42 Laurent GUERBY
440 1 Mehdi Abaakouk
h3. Création d'une machine
441 10 Mehdi Abaakouk
442 10 Mehdi Abaakouk
Un script est présent sur h1 voici ca doc:
443 10 Mehdi Abaakouk
<pre>
444 10 Mehdi Abaakouk
# /root/gnt-addvm
445 10 Mehdi Abaakouk
usage: gnt-addvm [options] VIRTUAL_MACHINE_HOSTNAME
446 10 Mehdi Abaakouk
       -o OS | --os OS          OS can be default natty32 natty64 sid64 squeeze32 squeeze64 wheezy64
447 10 Mehdi Abaakouk
       -s SIZE | --size SIZE    default SIZE is 10G
448 10 Mehdi Abaakouk
       -m MEM | --mem MEM       default MEM is 256M
449 10 Mehdi Abaakouk
       -c CPU | --cpu CPU               default CPU is 1
450 10 Mehdi Abaakouk
       -n NODES | --nodes NODES         default NODES is
451 10 Mehdi Abaakouk
       -d MODE | --disk MODE      default MODE is drbd
452 10 Mehdi Abaakouk
       -q | --quick             don't wait drbd sync
453 10 Mehdi Abaakouk
       --dry-run                        show executed command
454 10 Mehdi Abaakouk
       --cdrom PATH             installation from iso file
455 1 Mehdi Abaakouk
</pre>
456 10 Mehdi Abaakouk
457 10 Mehdi Abaakouk
458 10 Mehdi Abaakouk
h3. Supprimer une machine
459 1 Mehdi Abaakouk
460 10 Mehdi Abaakouk
<pre>
461 1 Mehdi Abaakouk
gnt-instance remove vm1
462 1 Mehdi Abaakouk
</pre>
463 10 Mehdi Abaakouk
464 1 Mehdi Abaakouk
si la vm est en drbd et que une des nodes du drbd ne fonctionne plus
465 10 Mehdi Abaakouk
466 1 Mehdi Abaakouk
<pre>
467 1 Mehdi Abaakouk
gnt-instance remove --ignore-failures vm1
468 10 Mehdi Abaakouk
</pre>
469 14 Mehdi Abaakouk
470 10 Mehdi Abaakouk
471 10 Mehdi Abaakouk
h3. Changer les cractéristique d'une VM, upgrade disk, net, cpu, mem
472 1 Mehdi Abaakouk
473 10 Mehdi Abaakouk
Et hop une nouvelle carte réseau sur le vlan tsf
474 1 Mehdi Abaakouk
<pre>
475 1 Mehdi Abaakouk
gnt-instance  modify --net add:link=br1 vm1
476 10 Mehdi Abaakouk
</pre>
477 10 Mehdi Abaakouk
478 10 Mehdi Abaakouk
Un petit disk en plus
479 10 Mehdi Abaakouk
<pre>
480 1 Mehdi Abaakouk
gnt-instance  modify --disk add:size=50G vm1
481 10 Mehdi Abaakouk
</pre>
482 10 Mehdi Abaakouk
483 10 Mehdi Abaakouk
Un petite upgrade cpu et mémoire
484 10 Mehdi Abaakouk
<pre>
485 1 Mehdi Abaakouk
gnt-instance modify -B vcpus=2,memory=512M vm1
486 10 Mehdi Abaakouk
</pre>
487 1 Mehdi Abaakouk
488 10 Mehdi Abaakouk
Reboot pour prendre en compte le tout
489 1 Mehdi Abaakouk
<pre>
490 1 Mehdi Abaakouk
gnt-instance reboot -t full vm1
491 10 Mehdi Abaakouk
</pre>
492 10 Mehdi Abaakouk
493 1 Mehdi Abaakouk
== Je voudrais bien booter mon kernel ! ou un cdrom==
494 10 Mehdi Abaakouk
Je peux désactivé le kernel commun pour une vm
495 10 Mehdi Abaakouk
496 10 Mehdi Abaakouk
<pre>
497 10 Mehdi Abaakouk
gnt-instance modify -H kernel_path="" vm1
498 1 Mehdi Abaakouk
</pre>
499 1 Mehdi Abaakouk
Ou booter sur le cdrom pour le prochain démarrage commme ceci:
500 10 Mehdi Abaakouk
501 1 Mehdi Abaakouk
<pre>
502 1 Mehdi Abaakouk
gnt-instance start -H boot_order=cdrom,cdrom_image_path=/path/to/debian-504-amd64-netinst.iso vm1
503 10 Mehdi Abaakouk
</pre>
504 1 Mehdi Abaakouk
505 27 Laurent GUERBY
506 10 Mehdi Abaakouk
h3. Relocaliser les disques secondaires si un serveur est HS.
507 10 Mehdi Abaakouk
508 10 Mehdi Abaakouk
Ceci déplace le disque redondant (qui n'est plus présent si le serveur est HS) est le reconstruit sur un autre serveur
509 1 Mehdi Abaakouk
510 10 Mehdi Abaakouk
<pre>
511 1 Mehdi Abaakouk
gnt-instance replace-disks -I hail vm1
512 1 Mehdi Abaakouk
</pre>
513 1 Mehdi Abaakouk
514 11 Mehdi Abaakouk
515 11 Mehdi Abaakouk
h3. Importer une image disque venant de l’extérieur
516 11 Mehdi Abaakouk
517 11 Mehdi Abaakouk
Convertion de l'image au format raw (si c'est pas déjà le cas)
518 11 Mehdi Abaakouk
<pre>
519 11 Mehdi Abaakouk
kvm-img convert DISQUEVM.qcow -O raw DISQUEVM.raw
520 11 Mehdi Abaakouk
</pre>
521 11 Mehdi Abaakouk
522 11 Mehdi Abaakouk
Copie du disque au format raw sur un lvm
523 11 Mehdi Abaakouk
<pre>
524 11 Mehdi Abaakouk
size=$(kvm-img info DISQUEVM.raw | sed -n -e 's/^virtual size:[^(]*(\([[:digit:]]*\).*)/\1/gp')
525 11 Mehdi Abaakouk
lvcreate -L ${size}b -n lv_migration_DISQUEVM kvmvg
526 11 Mehdi Abaakouk
dd if=DISQUEVM.raw of=/dev/kvmvg/lv_migration_DISQUEVM
527 11 Mehdi Abaakouk
</pre>
528 11 Mehdi Abaakouk
529 11 Mehdi Abaakouk
Création de la VM
530 11 Mehdi Abaakouk
<pre>
531 11 Mehdi Abaakouk
gnt-instance add -B memory=512M --no-start -t plain -n $(hostname) --disk 0:adopt=lv_migration_DISQUEVM --net 0 -o debootstrap+default VMNAME.tetaneutral.net
532 11 Mehdi Abaakouk
</pre>
533 11 Mehdi Abaakouk
534 11 Mehdi Abaakouk
Et pour finir, on transforme le format de disque de la VM en drbd:
535 11 Mehdi Abaakouk
<pre>
536 11 Mehdi Abaakouk
gnt-instance modify -t drbd -n h6 VMNAME.tetaneutral.net
537 11 Mehdi Abaakouk
</pre>
538 17 Mehdi Abaakouk
539 11 Mehdi Abaakouk
h3. Copier une VM sur une autre machine
540 11 Mehdi Abaakouk
541 11 Mehdi Abaakouk
Seul la machine *h1* a l'espace configurer pour faire des dumps de machine virtuelle.
542 11 Mehdi Abaakouk
543 11 Mehdi Abaakouk
On lance un backup de celle-ci (attention cette commande *éteint* la machine):
544 11 Mehdi Abaakouk
<pre>
545 11 Mehdi Abaakouk
gnt-backup export -n h1 sileht2
546 11 Mehdi Abaakouk
</pre>
547 11 Mehdi Abaakouk
548 11 Mehdi Abaakouk
Les fichiers sont ensuite sur h1 dans /exports/sileht2.tetaneutral.net/
549 11 Mehdi Abaakouk
550 11 Mehdi Abaakouk
Le fichier qui nous intéresse est celui qui fini par *.snap* qui est le disque dur au format raw de la VM, dans mon cas:
551 11 Mehdi Abaakouk
<pre>
552 11 Mehdi Abaakouk
09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap
553 11 Mehdi Abaakouk
</pre>
554 11 Mehdi Abaakouk
555 11 Mehdi Abaakouk
Pour la démonstration je copie ce fichier sur h2:
556 11 Mehdi Abaakouk
<pre>
557 11 Mehdi Abaakouk
scp /exportfs/sileht2.tetaneutral.net/09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap h2:/root/sileht.raw
558 11 Mehdi Abaakouk
</pre>
559 11 Mehdi Abaakouk
560 11 Mehdi Abaakouk
Et je le test avec kvm:
561 11 Mehdi Abaakouk
<pre>
562 11 Mehdi Abaakouk
kvm -m 256 -drive file=sileht.raw,format=raw,if=virtio,boot=on,cache=writeback -usbdevice tablet -netdev type=tap,id=netdev0,fd=10 -device virtio-net-pci,mac=aa:00:00:62:e3:a0,netdev=netdev0
563 1 Mehdi Abaakouk
</pre>
564 15 Mehdi Abaakouk
565 15 Mehdi Abaakouk
A savoir l'image utilise les pilotes kvm "virtio", si on souhaite utiliser la VM avec un autre logiciel de virtualisation,
566 11 Mehdi Abaakouk
il faudra modifié le fstab pour mettre /dev/sda1 au lieu de /dev/vda1 et supprimer le fichier /etc/udev/rules.d/70-persistent-net.rules
567 14 Mehdi Abaakouk
568 44 Laurent GUERBY
h3. Backup disque seul
569 44 Laurent GUERBY
570 44 Laurent GUERBY
gnt-instance activate-disks VMNAME.tetaneutral.net
571 44 Laurent GUERBY
=> affiche le drbd
572 44 Laurent GUERBY
=> copie avec dd
573 44 Laurent GUERBY
puis gnt-instance deactivate-disks VMNAME.tetaneutral.net
574 44 Laurent GUERBY
575 11 Mehdi Abaakouk
h3. Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)
576 11 Mehdi Abaakouk
577 43 Mehdi Abaakouk
Sur le +master node+, arret de la machine et activation des disques
578 11 Mehdi Abaakouk
<pre>
579 11 Mehdi Abaakouk
 $ gnt-instance stop VMNAME.tetaneutral.net
580 11 Mehdi Abaakouk
 $ gnt-instance activate-disks VMNAME.tetaneutral.net
581 43 Mehdi Abaakouk
 h5.tetaneutral.net:disk/0:/dev/drbd34
582 1 Mehdi Abaakouk
</pre>
583 1 Mehdi Abaakouk
584 43 Mehdi Abaakouk
Ensuite se connecter à la machine ou ganeti à préparer le disque, ici +h5+
585 43 Mehdi Abaakouk
586 43 Mehdi Abaakouk
Donc sur +h5+, pour voir les partitions du disque, ici le +/dev/drbd34+:
587 1 Mehdi Abaakouk
<pre>
588 11 Mehdi Abaakouk
kpartx -l /dev/drbd34
589 11 Mehdi Abaakouk
</pre>
590 11 Mehdi Abaakouk
591 43 Mehdi Abaakouk
Sur +h5+, on créé ensuite les partitions dans /dev avec devmapper
592 1 Mehdi Abaakouk
<pre>
593 11 Mehdi Abaakouk
kpartx -a /dev/drbd34
594 11 Mehdi Abaakouk
ls -la /dev/mapper/drbd34*
595 11 Mehdi Abaakouk
</pre>
596 11 Mehdi Abaakouk
597 43 Mehdi Abaakouk
Sur +h5+, a partir de maintenant on peut faire mumuse avec la partition, exemple:
598 11 Mehdi Abaakouk
<pre>
599 11 Mehdi Abaakouk
mount /dev/mapper/drbd34p1 /mnt/
600 1 Mehdi Abaakouk
....
601 1 Mehdi Abaakouk
umount /mnt
602 1 Mehdi Abaakouk
</pre>
603 1 Mehdi Abaakouk
604 43 Mehdi Abaakouk
Puis *très important*, il faut nettoyer devmapper, sur +h5+
605 11 Mehdi Abaakouk
<pre>
606 11 Mehdi Abaakouk
kpartx -d /dev/drbd34
607 43 Mehdi Abaakouk
</pre>
608 43 Mehdi Abaakouk
609 43 Mehdi Abaakouk
Et pour finir sur +master node+, on désactive les disques pour ganeti et on boot la vm:
610 43 Mehdi Abaakouk
<pre>
611 11 Mehdi Abaakouk
gnt-instance deactivate-disks VMNAME.tetaneutral.net
612 11 Mehdi Abaakouk
gnt-instance start VMNAME.tetaneutral.net
613 11 Mehdi Abaakouk
</pre>
614 1 Mehdi Abaakouk
615 10 Mehdi Abaakouk
h2. Administration des serveurs/nodes
616 10 Mehdi Abaakouk
617 58 Laurent GUERBY
h3. Fichiers
618 58 Laurent GUERBY
619 58 Laurent GUERBY
* /var/cache/ganeti-instance-debootstrap/cache-squeeze-amd64.tar  => cache de debootstrap
620 58 Laurent GUERBY
* /etc/default/ganeti-instance-debootstrap => variables de configuration dont CLEAN_CACHE pour la duree de vie du cache
621 58 Laurent GUERBY
* /var/log/ganeti/os/add-debootstrap+wheezy64-elmer.tetaneutral.net-2013-06-24_14_35_12.log => log de création de VM
622 58 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/hooks => hooks de creation de VM
623 59 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/variants.list => liste des version OS
624 59 Laurent GUERBY
* /etc/ganeti/instance-debootstrap/variants/wheezy64.conf => script de definition des variables de configuration specifique a chaque version OS
625 58 Laurent GUERBY
626 58 Laurent GUERBY
627 10 Mehdi Abaakouk
h3. Éteindre/rebooter provisoirement un des serveurs sans coupure de service
628 10 Mehdi Abaakouk
629 10 Mehdi Abaakouk
La procédure est la suivante:
630 10 Mehdi Abaakouk
 - migration des machines virtuelles sur leurs secondaires
631 10 Mehdi Abaakouk
 - Arret/Ralummage ou reboot du serveur
632 1 Mehdi Abaakouk
 - remigration des machines virtuelles sur le serveur hX
633 10 Mehdi Abaakouk
634 10 Mehdi Abaakouk
<pre>
635 10 Mehdi Abaakouk
gnt-node migrate hX
636 1 Mehdi Abaakouk
shutdown -h now # ou reboot
637 1 Mehdi Abaakouk
hbal -L --no-disk-moves -X
638 10 Mehdi Abaakouk
</pre>
639 10 Mehdi Abaakouk
640 10 Mehdi Abaakouk
La resynchro drbd est automatique.
641 10 Mehdi Abaakouk
642 1 Mehdi Abaakouk
h3. L'extinction d'une node proprement dans le but de la désactivé du cluster
643 10 Mehdi Abaakouk
644 10 Mehdi Abaakouk
<pre>
645 10 Mehdi Abaakouk
gnt-node migrate hX # gnt-node failover hX
646 1 Mehdi Abaakouk
gnt-node evacuate -I hail hX
647 1 Mehdi Abaakouk
gnt-node modify -O yes hX
648 10 Mehdi Abaakouk
</pre>
649 1 Mehdi Abaakouk
650 10 Mehdi Abaakouk
Ici toutes les VMs seront migrés et les données auront été déplacé vers les autres nodes.
651 1 Mehdi Abaakouk
652 10 Mehdi Abaakouk
h3. Vérifier l'état du cluster
653 10 Mehdi Abaakouk
654 1 Mehdi Abaakouk
Sur le masternode normalement h1 faire:
655 10 Mehdi Abaakouk
656 1 Mehdi Abaakouk
<pre>
657 1 Mehdi Abaakouk
gnt-cluster verify
658 10 Mehdi Abaakouk
</pre>
659 1 Mehdi Abaakouk
660 10 Mehdi Abaakouk
h3. Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.
661 1 Mehdi Abaakouk
662 1 Mehdi Abaakouk
Allez sur un node, taper ceci et il deviendra "maternode":
663 1 Mehdi Abaakouk
664 1 Mehdi Abaakouk
<pre>
665 41 Laurent GUERBY
gnt-cluster master-failover
666 10 Mehdi Abaakouk
</pre>
667 1 Mehdi Abaakouk
668 10 Mehdi Abaakouk
h3. Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)
669 1 Mehdi Abaakouk
670 1 Mehdi Abaakouk
Tous les fichiers de configuration à synchroniser entre toutes les nodes du cluster sont contenues dans ce script:
671 1 Mehdi Abaakouk
672 1 Mehdi Abaakouk
<pre>
673 1 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
674 10 Mehdi Abaakouk
</pre>
675 1 Mehdi Abaakouk
676 10 Mehdi Abaakouk
Le lancer recopie ces fichiers du masternode vers les autres nodes.
677 10 Mehdi Abaakouk
678 10 Mehdi Abaakouk
h3. Désactiver un serveur qui serait HS du cluster provisoirement.
679 10 Mehdi Abaakouk
680 10 Mehdi Abaakouk
On bascule les machines qui n'ont pas le failover en automatique
681 10 Mehdi Abaakouk
682 10 Mehdi Abaakouk
<pre>
683 10 Mehdi Abaakouk
gnt-node failover [ --ignore-consistency ] h2
684 10 Mehdi Abaakouk
</pre>
685 10 Mehdi Abaakouk
686 10 Mehdi Abaakouk
le --ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
687 10 Mehdi Abaakouk
688 10 Mehdi Abaakouk
On peux (optionnellement) déplacer les disques durs secondaires des VMs
689 10 Mehdi Abaakouk
690 39 Mehdi Abaakouk
<pre>
691 1 Mehdi Abaakouk
gnt-node evacuate [--early-release]  -I hail hX
692 39 Mehdi Abaakouk
</pre>
693 10 Mehdi Abaakouk
le --early-release permet de forcer ganeti à ne pas contrôler le disk avant le basculement (utile si le disk de h2 est HS)
694 10 Mehdi Abaakouk
695 10 Mehdi Abaakouk
Puis on désactive la node:
696 10 Mehdi Abaakouk
697 10 Mehdi Abaakouk
<pre>
698 10 Mehdi Abaakouk
gnt-node modify -O yes h2
699 10 Mehdi Abaakouk
</pre>
700 1 Mehdi Abaakouk
701 11 Mehdi Abaakouk
702 10 Mehdi Abaakouk
h3. Réinsertion dans le cluster d'un node désactivé
703 10 Mehdi Abaakouk
704 10 Mehdi Abaakouk
- On réactive la node
705 10 Mehdi Abaakouk
- On remet dessus des machines et des disques en répartissant la charge du cluster
706 10 Mehdi Abaakouk
707 10 Mehdi Abaakouk
<pre>
708 10 Mehdi Abaakouk
gnt-node modify -O no h2
709 10 Mehdi Abaakouk
hbal -L -X
710 10 Mehdi Abaakouk
</pre>
711 10 Mehdi Abaakouk
712 10 Mehdi Abaakouk
713 10 Mehdi Abaakouk
h2. Setup d'un nouveau NODE
714 10 Mehdi Abaakouk
715 10 Mehdi Abaakouk
h3. Installation
716 1 Mehdi Abaakouk
717 1 Mehdi Abaakouk
* Installer squeeze basique avec juste ssh
718 1 Mehdi Abaakouk
* Ajouter wheezy dans /etc/apt/sources.list
719 1 Mehdi Abaakouk
720 1 Mehdi Abaakouk
<pre>
721 1 Mehdi Abaakouk
# deb http://ftp.fr.debian.org/debian/ squeeze main
722 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
723 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
724 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
725 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
726 1 Mehdi Abaakouk
deb http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
727 3 Mehdi Abaakouk
deb-src http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
728 3 Mehdi Abaakouk
deb http://security.debian.org/ squeeze/updates main
729 4 Mehdi Abaakouk
deb-src http://security.debian.org/ squeeze/updates main
730 3 Mehdi Abaakouk
# squeeze-updates, previously known as 'volatile'
731 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze-updates main
732 8 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main
733 8 Mehdi Abaakouk
</pre>
734 8 Mehdi Abaakouk
735 8 Mehdi Abaakouk
* Allouer un port avec 3131, 3175, 3195 tagged sur le procurve
736 7 Mehdi Abaakouk
* Monter le reseau manuellement IP X
737 8 Mehdi Abaakouk
738 7 Mehdi Abaakouk
<pre>
739 8 Mehdi Abaakouk
ip link add link eth0 name eth0.3131 type vlan id 3131
740 7 Mehdi Abaakouk
ip link set eth0.3131 up
741 8 Mehdi Abaakouk
ip addr add 91.224.149.15X/25 dev eth0.3131
742 8 Mehdi Abaakouk
</pre>
743 8 Mehdi Abaakouk
744 7 Mehdi Abaakouk
* Creer /etc/rc.local.conf avec X et Y
745 5 Mehdi Abaakouk
746 5 Mehdi Abaakouk
<pre>
747 6 Mehdi Abaakouk
IP_3131="91.224.149.15X/25"
748 5 Mehdi Abaakouk
GW_3131="91.224.149.254"
749 1 Mehdi Abaakouk
IP_3175="192.168.3.Y/24"
750 5 Mehdi Abaakouk
KVM_DISKS="sdb"
751 1 Mehdi Abaakouk
</pre>
752 1 Mehdi Abaakouk
753 1 Mehdi Abaakouk
* Installer les packages
754 1 Mehdi Abaakouk
755 1 Mehdi Abaakouk
<pre>
756 1 Mehdi Abaakouk
#TODO liste en fichier commit qqpart
757 1 Mehdi Abaakouk
#TODO: passer a une version compilée en local de ganeti pour eviter les update de version wheezy
758 1 Mehdi Abaakouk
dpkg --get-selections | ssh root@h48 dpkg --set-selections
759 5 Mehdi Abaakouk
ssh root@h48 apt-get dselect-upgrade
760 5 Mehdi Abaakouk
</pre>
761 6 Mehdi Abaakouk
762 6 Mehdi Abaakouk
763 5 Mehdi Abaakouk
764 5 Mehdi Abaakouk
* munin:
765 5 Mehdi Abaakouk
dans /etc/munin/munin-node.conf ajouter: allow ^91\.224\.149\.194$
766 1 Mehdi Abaakouk
* TODO patch munin Loic
767 5 Mehdi Abaakouk
http://trac.fsffrance.org/wiki/PatchInventory#Munin
768 1 Mehdi Abaakouk
* reboot
769 5 Mehdi Abaakouk
* Installer le node dans le cluster ganeti apres s'etre assure que la version de ganeti est bien la meme
770 1 Mehdi Abaakouk
771 1 Mehdi Abaakouk
<pre>
772 5 Mehdi Abaakouk
dpkg -l|grep -i ganeti
773 5 Mehdi Abaakouk
gnt-node add h48
774 5 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
775 5 Mehdi Abaakouk
</pre>
776 5 Mehdi Abaakouk
777 5 Mehdi Abaakouk
Appliquer ce patch à ganeti-instance-debootstrap:
778 5 Mehdi Abaakouk
779 5 Mehdi Abaakouk
<pre>
780 5 Mehdi Abaakouk
--- /usr/share/ganeti/os/debootstrap/common.sh.ori  2010-09-15 22:34:12.000000000 +0200
781 5 Mehdi Abaakouk
+++ /usr/share/ganeti/os/debootstrap/common.sh  2011-07-27 12:33:55.695617766 +0200
782 5 Mehdi Abaakouk
@@ -91,7 +91,7 @@
783 1 Mehdi Abaakouk
# some versions of sfdisk need manual specification of
784 5 Mehdi Abaakouk
# head/sectors for devices such as drbd which don't
785 5 Mehdi Abaakouk
# report geometry
786 5 Mehdi Abaakouk
-  sfdisk -H 255 -S 63 --quiet --Linux "$1" <<EOF
787 6 Mehdi Abaakouk
+  sfdisk -H 255 -S 63 -D --quiet --Linux "$1" <<EOF
788 5 Mehdi Abaakouk
0,,L,*
789 3 Mehdi Abaakouk
EOF
790 1 Mehdi Abaakouk
}
791 1 Mehdi Abaakouk
</pre>
792 11 Mehdi Abaakouk
793 3 Mehdi Abaakouk
Ci dessous ajouter dkms et r8168 si nécessaire.
794 15 Mehdi Abaakouk
795 1 Mehdi Abaakouk
h3. Pilotes additionnel
796 1 Mehdi Abaakouk
797 1 Mehdi Abaakouk
Sur h1,h2,h4,h5 et h6, le pilote (r8169.ko) de la carte réseau (r8168/8111) provoque des kernels panic, il a été remplacé la version du constructeur (r8168.ko).
798 1 Mehdi Abaakouk
Pilote dispo ici: (http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false)
799 1 Mehdi Abaakouk
800 1 Mehdi Abaakouk
<pre>
801 1 Mehdi Abaakouk
apt-get install gcc dkms
802 1 Mehdi Abaakouk
cd /usr/src
803 1 Mehdi Abaakouk
wget http://url_to_pilot/r8168-8.024.00.tar.bz2
804 1 Mehdi Abaakouk
tar -xjf r8168-8.024.00.tar.bz2
805 1 Mehdi Abaakouk
cd r8168-8.024.00
806 1 Mehdi Abaakouk
cat > dkms.conf << EOF
807 1 Mehdi Abaakouk
PACKAGE_NAME=r8168
808 1 Mehdi Abaakouk
PACKAGE_VERSION=8.024.00
809 1 Mehdi Abaakouk
MAKE[0]="make"
810 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=r8168
811 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
812 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
813 1 Mehdi Abaakouk
AUTOINSTALL="YES"
814 1 Mehdi Abaakouk
EOF
815 1 Mehdi Abaakouk
dkms add -m r8168 -v 8.024.00
816 1 Mehdi Abaakouk
dkms build -m r8168 -v 8.024.00
817 1 Mehdi Abaakouk
dkms install -m r8168 -v 8.024.00
818 1 Mehdi Abaakouk
echo "r8168" >> /etc/modules
819 1 Mehdi Abaakouk
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
820 1 Mehdi Abaakouk
update-initramfs -u
821 1 Mehdi Abaakouk
reboot
822 1 Mehdi Abaakouk
</pre>
823 1 Mehdi Abaakouk
824 1 Mehdi Abaakouk
Pour les machines a base de e1000e:
825 1 Mehdi Abaakouk
826 1 Mehdi Abaakouk
<pre>
827 1 Mehdi Abaakouk
apt-get install gcc dkms
828 1 Mehdi Abaakouk
cd /usr/src
829 1 Mehdi Abaakouk
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.3.17.tar.gz
830 1 Mehdi Abaakouk
tar -xzf e1000e-1.3.17.tar.gz
831 1 Mehdi Abaakouk
cd e1000e-1.3.17
832 1 Mehdi Abaakouk
cat > dkms.conf << EOF
833 1 Mehdi Abaakouk
PACKAGE_NAME=e1000e
834 1 Mehdi Abaakouk
PACKAGE_VERSION=1.3.17
835 1 Mehdi Abaakouk
CLEAN="make -C src/ clean"
836 1 Mehdi Abaakouk
MAKE[0]="make -C src/"
837 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=e1000e
838 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
839 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
840 1 Mehdi Abaakouk
AUTOINSTALL="YES"
841 1 Mehdi Abaakouk
EOF
842 1 Mehdi Abaakouk
dkms add -m e1000e -v 1.3.17
843 1 Mehdi Abaakouk
dkms build -m e1000e -v 1.3.17
844 1 Mehdi Abaakouk
dkms install -m e1000e -v 1.3.17
845 1 Mehdi Abaakouk
reboot
846 1 Mehdi Abaakouk
</pre>
847 1 Mehdi Abaakouk
848 1 Mehdi Abaakouk
849 13 Mehdi Abaakouk
h2. Annexe 
850 13 Mehdi Abaakouk
851 13 Mehdi Abaakouk
h3. Configuration réseau
852 13 Mehdi Abaakouk
853 13 Mehdi Abaakouk
le script /etc/rc.local, qui s'occupe de préparer la configuration réseaux pour ganeti (avec les vlan, bridge and co)
854 1 Mehdi Abaakouk
le script /etc/rc.local.conf, contient les adresses IP de la machine et les gw
855 11 Mehdi Abaakouk
856 11 Mehdi Abaakouk
h3. Protection VNC
857 11 Mehdi Abaakouk
858 11 Mehdi Abaakouk
Le VNC de kvm est utiliser sur chaque MV.
859 11 Mehdi Abaakouk
Des règles de firewall sont automatiquement mise en place par le script /etc/ganeti/vnc-firewall pour que seul la machine gntwebmgr.tetaneutral.net soit autoriser a s'y connecter
860 11 Mehdi Abaakouk
Ce script est appelé par les hooks ganeti.
861 11 Mehdi Abaakouk
862 11 Mehdi Abaakouk
h3. Mac spoofing configuration (Actuellement désactivé)
863 1 Mehdi Abaakouk
864 1 Mehdi Abaakouk
Le script ifup de ganeti pour kvm a été modifier (ie: /etc/ganeti/kvm-vif-bridge) pour écrire la relation entre la vm, le numero de ces interfaces réseaux et ces tap.
865 1 Mehdi Abaakouk
Le fichier prends la forme suivante:
866 1 Mehdi Abaakouk
munin.tetaneutral.net:0:tap3
867 1 Mehdi Abaakouk
trac.tetaneutral.net:0:tap5
868 1 Mehdi Abaakouk
munin.tetaneutral.net:1:tap5
869 1 Mehdi Abaakouk
Les règles ebtables sont écrites par le script /etc/ganeti/spoofing/spoofing-protection avec les informations de ce fichier.
870 1 Mehdi Abaakouk
Les scripts de hook de ganeti (ie:/etc/ganeti/hook/) utilise ce script, pour lancer ou arreter le spoofing.
871 11 Mehdi Abaakouk
872 33 Mehdi Abaakouk
h3. Debootstrap du nouvelle ubuntu >= oneiric:
873 33 Mehdi Abaakouk
874 33 Mehdi Abaakouk
pour les ubuntu oneiric, precise et supérieur il faut créer des liens symbolique pour debootstrap:
875 33 Mehdi Abaakouk
876 33 Mehdi Abaakouk
<pre>
877 33 Mehdi Abaakouk
cd /usr/share/debootstrap/scripts
878 33 Mehdi Abaakouk
ln -s gutsy oneiric
879 33 Mehdi Abaakouk
ln -s gutsy precise
880 33 Mehdi Abaakouk
</pre>
881 33 Mehdi Abaakouk
882 33 Mehdi Abaakouk
ensuite la variante peux être ajouter à ganeti-instace-debootstrap dans /etc/ganeti/instace-debootstrap/variants/...
883 33 Mehdi Abaakouk
884 1 Mehdi Abaakouk
h3. Patch maison pour ganeti
885 11 Mehdi Abaakouk
886 11 Mehdi Abaakouk
Ajout de l'option -D à sfdisk au script /usr/share/ganeti/os/debootstrap/common.sh ligne 84 pour créer des partitions avec assez d'espace pour grub
887 1 Mehdi Abaakouk
Celui-ci est décrit dans l'installation d'une node aussi.
888 11 Mehdi Abaakouk
889 1 Mehdi Abaakouk
h3. J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!
890 11 Mehdi Abaakouk
891 11 Mehdi Abaakouk
Voici quelques ressources:
892 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/current/html/
893 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/2.1/man/
894 11 Mehdi Abaakouk
* http://wiki.osuosl.org/public/ganeti/
895 1 Mehdi Abaakouk
Ou bien je demande à sileht d'écrire le use case qui me manque s'il à le temps
896 45 Laurent GUERBY
897 45 Laurent GUERBY
h3. Tuning IO
898 45 Laurent GUERBY
899 45 Laurent GUERBY
<pre>
900 45 Laurent GUERBY
KVM_DISKS="WDC_WD20EARS-00_WD-WMAZA0732072"
901 45 Laurent GUERBY
902 45 Laurent GUERBY
for diskname in $KVM_DISKS ; do
903 45 Laurent GUERBY
	disk=$(basename $(readlink -e /dev/disk/by-id/scsi-SATA_$diskname) 2>/dev/null)
904 45 Laurent GUERBY
	[ -z "$disk" -o ! -d "/sys/block/$disk" ] && continue
905 45 Laurent GUERBY
	echo deadline > /sys/block/${disk}/queue/scheduler
906 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/fifo_batch
907 45 Laurent GUERBY
	echo 0 > /sys/block/${disk}/queue/iosched/front_merges
908 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/read_expire
909 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/write_expire
910 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/writes_starved
911 45 Laurent GUERBY
done
912 45 Laurent GUERBY
</pre>
913 52 Fabien Dupont
914 52 Fabien Dupont
h3. Hooks
915 52 Fabien Dupont
916 54 Fabien Dupont
h4. Généralités
917 54 Fabien Dupont
918 53 Fabien Dupont
Les hooks sont des scripts dans le répertoire /etc/ganeti/instance-debootstrap/hooks (pour les VM de type instance-debootstrap) exécutés grâce à run-parts.
919 56 Fabien Dupont
Seul les fichier exécutables (chmod +x) seront exécutés.
920 53 Fabien Dupont
921 53 Fabien Dupont
Un hook a la forme suivante :
922 53 Fabien Dupont
923 53 Fabien Dupont
<pre>
924 53 Fabien Dupont
#!/bin/bash
925 53 Fabien Dupont
926 53 Fabien Dupont
set -e
927 53 Fabien Dupont
928 53 Fabien Dupont
. common.sh
929 53 Fabien Dupont
930 53 Fabien Dupont
CLEANUP=( )
931 53 Fabien Dupont
set -x
932 53 Fabien Dupont
trap cleanup EXIT
933 53 Fabien Dupont
934 53 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
935 53 Fabien Dupont
  echo "Missing target directory"
936 53 Fabien Dupont
  exit 1
937 53 Fabien Dupont
fi
938 53 Fabien Dupont
939 53 Fabien Dupont
# Vos modifs ici
940 53 Fabien Dupont
# $TARGET contient le chemin, sur l'hôte, où est monté le disque dur de la VM
941 53 Fabien Dupont
942 53 Fabien Dupont
cleanup
943 53 Fabien Dupont
trap - EXIT
944 53 Fabien Dupont
945 53 Fabien Dupont
exit 0
946 53 Fabien Dupont
</pre>
947 1 Mehdi Abaakouk
948 56 Fabien Dupont
Les hooks sont séparés en fichiers, un par « fonction », afin d'encourager la réutilisation.
949 56 Fabien Dupont
950 56 Fabien Dupont
<pre>
951 56 Fabien Dupont
# ls /etc/ganeti/instance-debootstrap/hooks
952 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/10extlinux
953 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/20clear-root-password
954 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/30network-config
955 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/40locales
956 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/50apt
957 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/60openssh
958 56 Fabien Dupont
/etc/ganeti/instance-debootstrap/hooks/90puppet
959 56 Fabien Dupont
</pre>
960 1 Mehdi Abaakouk
961 55 Fabien Dupont
*Important :* Le répertoire /etc/ganeti/instance-debootstrap/hooks doit être identique sur tous les nœuds du cluster. Le script /etc/ganeti/pushconf.sh permet de les synchroniser.
962 55 Fabien Dupont
963 54 Fabien Dupont
h4. Exemple de hook : Installation d'extlinux en tant que bootloader
964 52 Fabien Dupont
965 52 Fabien Dupont
<pre>
966 52 Fabien Dupont
#!/bin/bash
967 52 Fabien Dupont
968 52 Fabien Dupont
set -e
969 52 Fabien Dupont
970 52 Fabien Dupont
. common.sh
971 52 Fabien Dupont
972 52 Fabien Dupont
CLEANUP=( )
973 52 Fabien Dupont
set -x
974 52 Fabien Dupont
trap cleanup EXIT
975 52 Fabien Dupont
976 52 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
977 52 Fabien Dupont
  echo "Missing target directory"
978 52 Fabien Dupont
  exit 1
979 52 Fabien Dupont
fi
980 52 Fabien Dupont
981 52 Fabien Dupont
# allow extlinux to find device
982 52 Fabien Dupont
mount --bind /dev $TARGET/dev
983 52 Fabien Dupont
CLEANUP+=("umount $TARGET/dev")
984 52 Fabien Dupont
mount --bind /proc $TARGET/proc
985 52 Fabien Dupont
CLEANUP+=("umount $TARGET/proc")
986 52 Fabien Dupont
987 52 Fabien Dupont
# generate configuration
988 52 Fabien Dupont
echo 'EXTLINUX_PARAMETERS="ro console=ttyS0,38400n8"' > $TARGET/etc/default/extlinux
989 52 Fabien Dupont
chroot "$TARGET" extlinux-update
990 52 Fabien Dupont
991 52 Fabien Dupont
# install extlinux
992 52 Fabien Dupont
chroot "$TARGET" extlinux -i /boot/extlinux
993 52 Fabien Dupont
994 52 Fabien Dupont
# install boot record
995 52 Fabien Dupont
dd if="$TARGET/usr/lib/extlinux/mbr.bin" of=$BLOCKDEV
996 52 Fabien Dupont
997 52 Fabien Dupont
cleanup
998 52 Fabien Dupont
trap - EXIT
999 52 Fabien Dupont
1000 52 Fabien Dupont
exit 0
1001 52 Fabien Dupont
</pre>