Projet

Général

Profil

Cluster Ganeti » Historique » Version 32

Laurent GUERBY, 22/07/2012 13:36

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 30 Mehdi Abaakouk
h3. Création du VG pour ganeti
50 30 Mehdi Abaakouk
51 30 Mehdi Abaakouk
<pre>
52 19 Laurent GUERBY
pvcreate /dev/sda2 
53 1 Mehdi Abaakouk
vgcreate vg_ganeti /dev/sda2
54 30 Mehdi Abaakouk
</pre>
55 18 Laurent GUERBY
56 30 Mehdi Abaakouk
S'il existe déjà vider le volume group et le recreer
57 18 Laurent GUERBY
58 18 Laurent GUERBY
<pre>
59 18 Laurent GUERBY
pvs
60 1 Mehdi Abaakouk
vgs
61 1 Mehdi Abaakouk
lvs
62 18 Laurent GUERBY
lvremove
63 18 Laurent GUERBY
vgcreate kvmvg /dev/sdb... #TODO check
64 18 Laurent GUERBY
</pre>
65 18 Laurent GUERBY
66 23 Laurent GUERBY
h3. Network
67 23 Laurent GUERBY
68 20 Laurent GUERBY
<pre>
69 20 Laurent GUERBY
# dans /etc/network/interfaces
70 20 Laurent GUERBY
# The primary network interface
71 20 Laurent GUERBY
auto eth0
72 20 Laurent GUERBY
iface eth0 inet manual
73 20 Laurent GUERBY
74 20 Laurent GUERBY
# dans /etc/rc.local     
75 20 Laurent GUERBY
ip l set eth0 up    
76 20 Laurent GUERBY
                    
77 20 Laurent GUERBY
brctl addbr ganeti-br0
78 20 Laurent GUERBY
ip li set ganeti-br0 up
79 1 Mehdi Abaakouk
brctl addif ganeti-br0 eth0
80 20 Laurent GUERBY
                    
81 20 Laurent GUERBY
ip a a 10.42.0.13/24 dev ganeti-br0
82 20 Laurent GUERBY
ip r a default via 10.42.0.1 
83 20 Laurent GUERBY
              
84 20 Laurent GUERBY
</pre>
85 18 Laurent GUERBY
86 23 Laurent GUERBY
h3. DNS
87 21 Laurent GUERBY
88 1 Mehdi Abaakouk
<pre>
89 1 Mehdi Abaakouk
# Dans /etc/hosts              
90 21 Laurent GUERBY
10.42.0.10 tmaster.thsf tmaster
91 21 Laurent GUERBY
10.42.0.11 t1.thsf t1     
92 21 Laurent GUERBY
10.42.0.12 t2.thsf t2
93 21 Laurent GUERBY
10.42.0.13 t3.thsf t3
94 21 Laurent GUERBY
</pre>
95 23 Laurent GUERBY
96 23 Laurent GUERBY
h3. Ganeti Service
97 21 Laurent GUERBY
98 31 Mehdi Abaakouk
On master:
99 1 Mehdi Abaakouk
100 31 Mehdi Abaakouk
Initialiser le cluster:
101 21 Laurent GUERBY
<pre>
102 21 Laurent GUERBY
gnt-cluster init --nic-parameters mode=bridged,link=ganeti-br0 --master-netdev=ganeti-br0 \                       
103 1 Mehdi Abaakouk
 --vg-name vg_ganeti --enabled-hypervisors=kvm tmaster.thsf
104 31 Mehdi Abaakouk
</pre>
105 1 Mehdi Abaakouk
106 31 Mehdi Abaakouk
Ajouter un noeud au cluster (t2):
107 31 Mehdi Abaakouk
<pre>
108 21 Laurent GUERBY
gnt-node add t2
109 31 Mehdi Abaakouk
</pre>
110 21 Laurent GUERBY
111 31 Mehdi Abaakouk
Installation d'outils d'administration de ganeti:
112 21 Laurent GUERBY
113 31 Mehdi Abaakouk
<pre>apt-get install ganeti-htools ganeti-instance-debootstrap</pre>
114 21 Laurent GUERBY
115 31 Mehdi Abaakouk
Ajout d'une VM
116 22 Laurent GUERBY
117 31 Mehdi Abaakouk
<pre># vi /etc/hosts
118 22 Laurent GUERBY
10.42.0.101 vm1.thsf vm1
119 22 Laurent GUERBY
120 22 Laurent GUERBY
gnt-cluster copyfile /etc/hosts
121 22 Laurent GUERBY
122 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 \
123 21 Laurent GUERBY
-t drbd -B memory=512M,vcpus=1 --disk 0:size=5G -I hail -o debootstrap+default vm1.thsf
124 21 Laurent GUERBY
</pre>
125 10 Mehdi Abaakouk
126 1 Mehdi Abaakouk
h2. Administration des VMs
127 27 Laurent GUERBY
128 18 Laurent GUERBY
h3. Gestion d'un disque en I/O error
129 27 Laurent GUERBY
130 1 Mehdi Abaakouk
First put the disk in failure offline:
131 28 Mehdi Abaakouk
132 28 Mehdi Abaakouk
<pre>echo offline > /sys/block/sdb/device/state</pre>
133 27 Laurent GUERBY
134 1 Mehdi Abaakouk
Then we need to remove the volume group, here /dev/kvmvg
135 27 Laurent GUERBY
We need to do it manually because vgremove will not work in this case
136 28 Mehdi Abaakouk
137 27 Laurent GUERBY
<pre>/dev/kvmvg# for i in *; do echo === $(date) == $i ; dmsetup remove /dev/kvmvg/"$i"; echo $?; done</pre>
138 1 Mehdi Abaakouk
139 27 Laurent GUERBY
This will leave a few lv when ganeti hasnt detected for some reason the disk failure. 
140 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
141 28 Mehdi Abaakouk
142 27 Laurent GUERBY
<pre>drbdsetup /dev/drbd47 detach</pre>
143 27 Laurent GUERBY
144 27 Laurent GUERBY
Then gnt-instance info VM to force ganeti to recognize the disk failure (it will take a few minutes)
145 27 Laurent GUERBY
146 27 Laurent GUERBY
Then dmsetup remove will work.
147 27 Laurent GUERBY
148 27 Laurent GUERBY
After the last dmsetup remove /dev/kvmvg will disappear.
149 27 Laurent GUERBY
150 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)
151 27 Laurent GUERBY
Then create a LVM partition then vgcreate kvmvg /dev/sdX
152 1 Mehdi Abaakouk
153 27 Laurent GUERBY
Now we need to recreate redundancy 
154 27 Laurent GUERBY
155 1 Mehdi Abaakouk
On the still running VM you can use 
156 28 Mehdi Abaakouk
157 27 Laurent GUERBY
<pre>gnt-instance replace-disks --submit -a VMname</pre>
158 1 Mehdi Abaakouk
159 27 Laurent GUERBY
On the stopped VM you need to do manually
160 28 Mehdi Abaakouk
161 28 Mehdi Abaakouk
<pre>gnt-instance replace-disks --submit -p VMname # if primary to reconstruct
162 1 Mehdi Abaakouk
gnt-instance replace-disks --submit -s VMname # if secondary to reconstruct</pre>
163 1 Mehdi Abaakouk
164 1 Mehdi Abaakouk
At 15 MByte/s 1 TB to reconstruct will take about 18h30.
165 28 Mehdi Abaakouk
166 27 Laurent GUERBY
Before remove the disk from the server, we must prepare the disk for unplug:
167 29 Mehdi Abaakouk
168 28 Mehdi Abaakouk
<pre>echo 1 > /sys/block/sdX/device/delete</pre>
169 28 Mehdi Abaakouk
170 28 Mehdi Abaakouk
171 28 Mehdi Abaakouk
Links:
172 27 Laurent GUERBY
173 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#preparing-for-disk-operations
174 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#generalized-storage-handling
175 28 Mehdi Abaakouk
http://www.lancealbertson.com/2011/02/handling-hdd-failures-with-ganeti/
176 27 Laurent GUERBY
http://www.sakana.fr/blog/2009/05/04/linux-sata-hot-plug-unplug/
177 10 Mehdi Abaakouk
178 1 Mehdi Abaakouk
h3. Demarrer et arrêter une instance ?
179 10 Mehdi Abaakouk
180 10 Mehdi Abaakouk
<pre>
181 10 Mehdi Abaakouk
gnt-instance start vm1
182 10 Mehdi Abaakouk
gnt-instance stop vm1
183 1 Mehdi Abaakouk
</pre>
184 26 Mehdi Abaakouk
185 26 Mehdi Abaakouk
Si pendant l'extinction de la VM le message suivant apparait:
186 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>
187 26 Mehdi Abaakouk
188 26 Mehdi Abaakouk
Sur h6 on peut remarquer que l'on a un status non nominal sur drbd:
189 26 Mehdi Abaakouk
<pre>$ grep -A4 45: /proc/drbd
190 26 Mehdi Abaakouk
45: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
191 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
192 26 Mehdi Abaakouk
</pre>
193 26 Mehdi Abaakouk
194 26 Mehdi Abaakouk
Pour résoudre le probléme taper:
195 26 Mehdi Abaakouk
<pre>drbdsetup /dev/drbd45 down</pre>
196 26 Mehdi Abaakouk
197 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:
198 26 Mehdi Abaakouk
<pre>dmsetup ls | grep drbd45</pre>
199 26 Mehdi Abaakouk
200 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
201 10 Mehdi Abaakouk
202 1 Mehdi Abaakouk
h3. Comment tout savoir sur une vm ?
203 1 Mehdi Abaakouk
204 1 Mehdi Abaakouk
<pre>
205 1 Mehdi Abaakouk
gnt-instance info vm1
206 1 Mehdi Abaakouk
</pre>
207 10 Mehdi Abaakouk
208 1 Mehdi Abaakouk
h3. Déplacement le(s) disque(s) dur d'une VM
209 1 Mehdi Abaakouk
210 1 Mehdi Abaakouk
Si la machine a ces disques au format plain (sans drbd), taper:
211 1 Mehdi Abaakouk
212 1 Mehdi Abaakouk
<pre>
213 1 Mehdi Abaakouk
gnt-instance stop vm1
214 1 Mehdi Abaakouk
gnt-instance move -n h6 vm1
215 1 Mehdi Abaakouk
gnt-instance start vm1
216 1 Mehdi Abaakouk
</pre>
217 1 Mehdi Abaakouk
218 1 Mehdi Abaakouk
Si la machine utilise drbd (uniquement le disque de la node secondaire bascule):
219 1 Mehdi Abaakouk
220 1 Mehdi Abaakouk
<pre>
221 1 Mehdi Abaakouk
gnt-instance replace-disks -n h6 vm1
222 10 Mehdi Abaakouk
</pre>
223 1 Mehdi Abaakouk
224 1 Mehdi Abaakouk
Si vous voulais déplacer l'autre disque du drbd, il faut basculer la machine, puis refaire la même chose
225 10 Mehdi Abaakouk
226 1 Mehdi Abaakouk
h3. Basculer/migrer une machine qui utilise drbd
227 1 Mehdi Abaakouk
228 1 Mehdi Abaakouk
Bascule avec arret de la machine:
229 1 Mehdi Abaakouk
230 1 Mehdi Abaakouk
<pre>
231 1 Mehdi Abaakouk
gnt-instance failover vm1
232 1 Mehdi Abaakouk
</pre>
233 10 Mehdi Abaakouk
234 10 Mehdi Abaakouk
Sans arrêt, migration à chaud:
235 1 Mehdi Abaakouk
236 1 Mehdi Abaakouk
<pre>
237 1 Mehdi Abaakouk
gnt-instance migrate vm1
238 10 Mehdi Abaakouk
</pre>
239 1 Mehdi Abaakouk
240 1 Mehdi Abaakouk
En cas de soucis primaire/secondaire:
241 1 Mehdi Abaakouk
242 1 Mehdi Abaakouk
<pre>
243 1 Mehdi Abaakouk
gnt-instance migrate --cleanup vm1
244 1 Mehdi Abaakouk
</pre>
245 10 Mehdi Abaakouk
246 1 Mehdi Abaakouk
h3. Création d'une machine
247 10 Mehdi Abaakouk
248 10 Mehdi Abaakouk
Un script est présent sur h1 voici ca doc:
249 10 Mehdi Abaakouk
<pre>
250 10 Mehdi Abaakouk
# /root/gnt-addvm
251 10 Mehdi Abaakouk
usage: gnt-addvm [options] VIRTUAL_MACHINE_HOSTNAME
252 10 Mehdi Abaakouk
       -o OS | --os OS          OS can be default natty32 natty64 sid64 squeeze32 squeeze64 wheezy64
253 10 Mehdi Abaakouk
       -s SIZE | --size SIZE    default SIZE is 10G
254 10 Mehdi Abaakouk
       -m MEM | --mem MEM       default MEM is 256M
255 10 Mehdi Abaakouk
       -c CPU | --cpu CPU               default CPU is 1
256 10 Mehdi Abaakouk
       -n NODES | --nodes NODES         default NODES is
257 10 Mehdi Abaakouk
       -d MODE | --disk MODE      default MODE is drbd
258 10 Mehdi Abaakouk
       -q | --quick             don't wait drbd sync
259 10 Mehdi Abaakouk
       --dry-run                        show executed command
260 10 Mehdi Abaakouk
       --cdrom PATH             installation from iso file
261 1 Mehdi Abaakouk
</pre>
262 10 Mehdi Abaakouk
263 10 Mehdi Abaakouk
264 10 Mehdi Abaakouk
h3. Supprimer une machine
265 1 Mehdi Abaakouk
266 10 Mehdi Abaakouk
<pre>
267 1 Mehdi Abaakouk
gnt-instance remove vm1
268 1 Mehdi Abaakouk
</pre>
269 10 Mehdi Abaakouk
270 1 Mehdi Abaakouk
si la vm est en drbd et que une des nodes du drbd ne fonctionne plus
271 10 Mehdi Abaakouk
272 1 Mehdi Abaakouk
<pre>
273 1 Mehdi Abaakouk
gnt-instance remove --ignore-failures vm1
274 10 Mehdi Abaakouk
</pre>
275 14 Mehdi Abaakouk
276 10 Mehdi Abaakouk
277 10 Mehdi Abaakouk
h3. Changer les cractéristique d'une VM, upgrade disk, net, cpu, mem
278 1 Mehdi Abaakouk
279 10 Mehdi Abaakouk
Et hop une nouvelle carte réseau sur le vlan tsf
280 1 Mehdi Abaakouk
<pre>
281 1 Mehdi Abaakouk
gnt-instance  modify --net add:link=br1 vm1
282 10 Mehdi Abaakouk
</pre>
283 10 Mehdi Abaakouk
284 10 Mehdi Abaakouk
Un petit disk en plus
285 10 Mehdi Abaakouk
<pre>
286 1 Mehdi Abaakouk
gnt-instance  modify --disk add:size=50G vm1
287 10 Mehdi Abaakouk
</pre>
288 10 Mehdi Abaakouk
289 10 Mehdi Abaakouk
Un petite upgrade cpu et mémoire
290 10 Mehdi Abaakouk
<pre>
291 1 Mehdi Abaakouk
gnt-instance modify -B vcpus=2,memory=512M vm1
292 10 Mehdi Abaakouk
</pre>
293 1 Mehdi Abaakouk
294 10 Mehdi Abaakouk
Reboot pour prendre en compte le tout
295 1 Mehdi Abaakouk
<pre>
296 1 Mehdi Abaakouk
gnt-instance reboot -t full vm1
297 10 Mehdi Abaakouk
</pre>
298 10 Mehdi Abaakouk
299 1 Mehdi Abaakouk
== Je voudrais bien booter mon kernel ! ou un cdrom==
300 10 Mehdi Abaakouk
Je peux désactivé le kernel commun pour une vm
301 10 Mehdi Abaakouk
302 10 Mehdi Abaakouk
<pre>
303 10 Mehdi Abaakouk
gnt-instance modify -H kernel_path="" vm1
304 1 Mehdi Abaakouk
</pre>
305 1 Mehdi Abaakouk
Ou booter sur le cdrom pour le prochain démarrage commme ceci:
306 10 Mehdi Abaakouk
307 1 Mehdi Abaakouk
<pre>
308 1 Mehdi Abaakouk
gnt-instance start -H boot_order=cdrom,cdrom_image_path=/path/to/debian-504-amd64-netinst.iso vm1
309 10 Mehdi Abaakouk
</pre>
310 1 Mehdi Abaakouk
311 27 Laurent GUERBY
312 10 Mehdi Abaakouk
h3. Relocaliser les disques secondaires si un serveur est HS.
313 10 Mehdi Abaakouk
314 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
315 1 Mehdi Abaakouk
316 10 Mehdi Abaakouk
<pre>
317 1 Mehdi Abaakouk
gnt-instance replace-disks -I hail vm1
318 1 Mehdi Abaakouk
</pre>
319 1 Mehdi Abaakouk
320 11 Mehdi Abaakouk
321 11 Mehdi Abaakouk
h3. Importer une image disque venant de l’extérieur
322 11 Mehdi Abaakouk
323 11 Mehdi Abaakouk
Convertion de l'image au format raw (si c'est pas déjà le cas)
324 11 Mehdi Abaakouk
<pre>
325 11 Mehdi Abaakouk
kvm-img convert DISQUEVM.qcow -O raw DISQUEVM.raw
326 11 Mehdi Abaakouk
</pre>
327 11 Mehdi Abaakouk
328 11 Mehdi Abaakouk
Copie du disque au format raw sur un lvm
329 11 Mehdi Abaakouk
<pre>
330 11 Mehdi Abaakouk
size=$(kvm-img info DISQUEVM.raw | sed -n -e 's/^virtual size:[^(]*(\([[:digit:]]*\).*)/\1/gp')
331 11 Mehdi Abaakouk
lvcreate -L ${size}b -n lv_migration_DISQUEVM kvmvg
332 11 Mehdi Abaakouk
dd if=DISQUEVM.raw of=/dev/kvmvg/lv_migration_DISQUEVM
333 11 Mehdi Abaakouk
</pre>
334 11 Mehdi Abaakouk
335 11 Mehdi Abaakouk
Création de la VM
336 11 Mehdi Abaakouk
<pre>
337 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
338 11 Mehdi Abaakouk
</pre>
339 11 Mehdi Abaakouk
340 11 Mehdi Abaakouk
Et pour finir, on transforme le format de disque de la VM en drbd:
341 11 Mehdi Abaakouk
<pre>
342 11 Mehdi Abaakouk
gnt-instance modify -t drbd -n h6 VMNAME.tetaneutral.net
343 11 Mehdi Abaakouk
</pre>
344 17 Mehdi Abaakouk
345 11 Mehdi Abaakouk
h3. Copier une VM sur une autre machine
346 11 Mehdi Abaakouk
347 11 Mehdi Abaakouk
Seul la machine *h1* a l'espace configurer pour faire des dumps de machine virtuelle.
348 11 Mehdi Abaakouk
349 11 Mehdi Abaakouk
On lance un backup de celle-ci (attention cette commande *éteint* la machine):
350 11 Mehdi Abaakouk
<pre>
351 11 Mehdi Abaakouk
gnt-backup export -n h1 sileht2
352 11 Mehdi Abaakouk
</pre>
353 11 Mehdi Abaakouk
354 11 Mehdi Abaakouk
Les fichiers sont ensuite sur h1 dans /exports/sileht2.tetaneutral.net/
355 11 Mehdi Abaakouk
356 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:
357 11 Mehdi Abaakouk
<pre>
358 11 Mehdi Abaakouk
09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap
359 11 Mehdi Abaakouk
</pre>
360 11 Mehdi Abaakouk
361 11 Mehdi Abaakouk
Pour la démonstration je copie ce fichier sur h2:
362 11 Mehdi Abaakouk
<pre>
363 11 Mehdi Abaakouk
scp /exportfs/sileht2.tetaneutral.net/09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap h2:/root/sileht.raw
364 11 Mehdi Abaakouk
</pre>
365 11 Mehdi Abaakouk
366 11 Mehdi Abaakouk
Et je le test avec kvm:
367 11 Mehdi Abaakouk
<pre>
368 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
369 1 Mehdi Abaakouk
</pre>
370 15 Mehdi Abaakouk
371 15 Mehdi Abaakouk
A savoir l'image utilise les pilotes kvm "virtio", si on souhaite utiliser la VM avec un autre logiciel de virtualisation,
372 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
373 14 Mehdi Abaakouk
374 11 Mehdi Abaakouk
h3. Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)
375 11 Mehdi Abaakouk
376 11 Mehdi Abaakouk
Arret de la machine et activation des disques
377 11 Mehdi Abaakouk
<pre>
378 11 Mehdi Abaakouk
 $ gnt-instance stop VMNAME.tetaneutral.net
379 11 Mehdi Abaakouk
 $ gnt-instance activate-disks VMNAME.tetaneutral.net
380 11 Mehdi Abaakouk
 h1.tetaneutral.net:disk/0:/dev/drbd34
381 11 Mehdi Abaakouk
</pre>
382 11 Mehdi Abaakouk
383 11 Mehdi Abaakouk
Ensuite pour voir les partitions du disque, ici le /dev/drbd34:
384 11 Mehdi Abaakouk
<pre>
385 11 Mehdi Abaakouk
kpartx -l /dev/drbd34
386 11 Mehdi Abaakouk
</pre>
387 11 Mehdi Abaakouk
388 11 Mehdi Abaakouk
On créé ensuite les partitions dans /dev avec devmapper
389 11 Mehdi Abaakouk
<pre>
390 11 Mehdi Abaakouk
kpartx -a /dev/drbd34
391 11 Mehdi Abaakouk
ls -la /dev/mapper/drbd34*
392 11 Mehdi Abaakouk
</pre>
393 11 Mehdi Abaakouk
394 11 Mehdi Abaakouk
A partir de maintenant on peut faire mumuse avec la partition, exemple:
395 11 Mehdi Abaakouk
<pre>
396 11 Mehdi Abaakouk
mount /dev/mapper/drbd34p1 /mnt/
397 11 Mehdi Abaakouk
....
398 11 Mehdi Abaakouk
umount /mnt
399 11 Mehdi Abaakouk
</pre>
400 11 Mehdi Abaakouk
401 11 Mehdi Abaakouk
Puis *très important*, il faut nettoyer devmapper et déactiver les disk pour ganeti
402 11 Mehdi Abaakouk
403 11 Mehdi Abaakouk
<pre>
404 11 Mehdi Abaakouk
kpartx -d /dev/drbd34
405 11 Mehdi Abaakouk
gnt-instance deactivate-disks VMNAME.tetaneutral.net
406 11 Mehdi Abaakouk
gnt-instance start VMNAME.tetaneutral.net
407 11 Mehdi Abaakouk
</pre>
408 1 Mehdi Abaakouk
409 10 Mehdi Abaakouk
h2. Administration des serveurs/nodes
410 10 Mehdi Abaakouk
411 10 Mehdi Abaakouk
h3. Éteindre/rebooter provisoirement un des serveurs sans coupure de service
412 10 Mehdi Abaakouk
413 10 Mehdi Abaakouk
La procédure est la suivante:
414 10 Mehdi Abaakouk
 - migration des machines virtuelles sur leurs secondaires
415 10 Mehdi Abaakouk
 - Arret/Ralummage ou reboot du serveur
416 1 Mehdi Abaakouk
 - remigration des machines virtuelles sur le serveur hX
417 10 Mehdi Abaakouk
418 10 Mehdi Abaakouk
<pre>
419 10 Mehdi Abaakouk
gnt-node migrate hX
420 1 Mehdi Abaakouk
shutdown -h now # ou reboot
421 1 Mehdi Abaakouk
hbal -L --no-disk-moves -X
422 10 Mehdi Abaakouk
</pre>
423 10 Mehdi Abaakouk
424 10 Mehdi Abaakouk
La resynchro drbd est automatique.
425 10 Mehdi Abaakouk
426 1 Mehdi Abaakouk
h3. L'extinction d'une node proprement dans le but de la désactivé du cluster
427 10 Mehdi Abaakouk
428 10 Mehdi Abaakouk
<pre>
429 10 Mehdi Abaakouk
gnt-node migrate hX # gnt-node failover hX
430 1 Mehdi Abaakouk
gnt-node evacuate -I hail hX
431 1 Mehdi Abaakouk
gnt-node modify -O yes hX
432 10 Mehdi Abaakouk
</pre>
433 1 Mehdi Abaakouk
434 10 Mehdi Abaakouk
Ici toutes les VMs seront migrés et les données auront été déplacé vers les autres nodes.
435 1 Mehdi Abaakouk
436 10 Mehdi Abaakouk
h3. Vérifier l'état du cluster
437 10 Mehdi Abaakouk
438 1 Mehdi Abaakouk
Sur le masternode normalement h1 faire:
439 10 Mehdi Abaakouk
440 1 Mehdi Abaakouk
<pre>
441 1 Mehdi Abaakouk
gnt-cluster verify
442 10 Mehdi Abaakouk
</pre>
443 1 Mehdi Abaakouk
444 10 Mehdi Abaakouk
h3. Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.
445 1 Mehdi Abaakouk
446 1 Mehdi Abaakouk
Allez sur un node, taper ceci et il deviendra "maternode":
447 1 Mehdi Abaakouk
448 1 Mehdi Abaakouk
<pre>
449 1 Mehdi Abaakouk
gnt-node masterfailover
450 10 Mehdi Abaakouk
</pre>
451 1 Mehdi Abaakouk
452 10 Mehdi Abaakouk
h3. Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)
453 1 Mehdi Abaakouk
454 1 Mehdi Abaakouk
Tous les fichiers de configuration à synchroniser entre toutes les nodes du cluster sont contenues dans ce script:
455 1 Mehdi Abaakouk
456 1 Mehdi Abaakouk
<pre>
457 1 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
458 10 Mehdi Abaakouk
</pre>
459 1 Mehdi Abaakouk
460 10 Mehdi Abaakouk
Le lancer recopie ces fichiers du masternode vers les autres nodes.
461 10 Mehdi Abaakouk
462 10 Mehdi Abaakouk
h3. Désactiver un serveur qui serait HS du cluster provisoirement.
463 10 Mehdi Abaakouk
464 10 Mehdi Abaakouk
On bascule les machines qui n'ont pas le failover en automatique
465 10 Mehdi Abaakouk
466 10 Mehdi Abaakouk
<pre>
467 10 Mehdi Abaakouk
gnt-node failover [ --ignore-consistency ] h2
468 10 Mehdi Abaakouk
</pre>
469 10 Mehdi Abaakouk
470 10 Mehdi Abaakouk
le --ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
471 10 Mehdi Abaakouk
472 10 Mehdi Abaakouk
On peux (optionnellement) déplacer les disques durs secondaires des VMs
473 10 Mehdi Abaakouk
474 10 Mehdi Abaakouk
gnt-node evacuate [--early-release]  -I hail hX
475 10 Mehdi Abaakouk
476 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)
477 10 Mehdi Abaakouk
478 10 Mehdi Abaakouk
Puis on désactive la node:
479 10 Mehdi Abaakouk
480 10 Mehdi Abaakouk
<pre>
481 10 Mehdi Abaakouk
gnt-node modify -O yes h2
482 10 Mehdi Abaakouk
</pre>
483 1 Mehdi Abaakouk
484 11 Mehdi Abaakouk
485 10 Mehdi Abaakouk
h3. Réinsertion dans le cluster d'un node désactivé
486 10 Mehdi Abaakouk
487 10 Mehdi Abaakouk
- On réactive la node
488 10 Mehdi Abaakouk
- On remet dessus des machines et des disques en répartissant la charge du cluster
489 10 Mehdi Abaakouk
490 10 Mehdi Abaakouk
<pre>
491 10 Mehdi Abaakouk
gnt-node modify -O no h2
492 10 Mehdi Abaakouk
hbal -L -X
493 10 Mehdi Abaakouk
</pre>
494 10 Mehdi Abaakouk
495 10 Mehdi Abaakouk
496 10 Mehdi Abaakouk
h2. Setup d'un nouveau NODE
497 10 Mehdi Abaakouk
498 10 Mehdi Abaakouk
h3. Installation
499 1 Mehdi Abaakouk
500 1 Mehdi Abaakouk
* Installer squeeze basique avec juste ssh
501 1 Mehdi Abaakouk
* Ajouter wheezy dans /etc/apt/sources.list
502 1 Mehdi Abaakouk
503 1 Mehdi Abaakouk
<pre>
504 1 Mehdi Abaakouk
# deb http://ftp.fr.debian.org/debian/ squeeze main
505 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
506 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
507 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
508 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
509 1 Mehdi Abaakouk
deb http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
510 3 Mehdi Abaakouk
deb-src http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
511 3 Mehdi Abaakouk
deb http://security.debian.org/ squeeze/updates main
512 4 Mehdi Abaakouk
deb-src http://security.debian.org/ squeeze/updates main
513 3 Mehdi Abaakouk
# squeeze-updates, previously known as 'volatile'
514 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze-updates main
515 8 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main
516 8 Mehdi Abaakouk
</pre>
517 8 Mehdi Abaakouk
518 8 Mehdi Abaakouk
* Allouer un port avec 3131, 3175, 3195 tagged sur le procurve
519 7 Mehdi Abaakouk
* Monter le reseau manuellement IP X
520 8 Mehdi Abaakouk
521 7 Mehdi Abaakouk
<pre>
522 8 Mehdi Abaakouk
ip link add link eth0 name eth0.3131 type vlan id 3131
523 7 Mehdi Abaakouk
ip link set eth0.3131 up
524 8 Mehdi Abaakouk
ip addr add 91.224.149.15X/25 dev eth0.3131
525 8 Mehdi Abaakouk
</pre>
526 8 Mehdi Abaakouk
527 7 Mehdi Abaakouk
* Creer /etc/rc.local.conf avec X et Y
528 5 Mehdi Abaakouk
529 5 Mehdi Abaakouk
<pre>
530 6 Mehdi Abaakouk
IP_3131="91.224.149.15X/25"
531 5 Mehdi Abaakouk
GW_3131="91.224.149.254"
532 1 Mehdi Abaakouk
IP_3175="192.168.3.Y/24"
533 5 Mehdi Abaakouk
KVM_DISKS="sdb"
534 1 Mehdi Abaakouk
</pre>
535 1 Mehdi Abaakouk
536 1 Mehdi Abaakouk
* Installer les packages
537 1 Mehdi Abaakouk
538 1 Mehdi Abaakouk
<pre>
539 1 Mehdi Abaakouk
#TODO liste en fichier commit qqpart
540 1 Mehdi Abaakouk
#TODO: passer a une version compilée en local de ganeti pour eviter les update de version wheezy
541 1 Mehdi Abaakouk
dpkg --get-selections | ssh root@h48 dpkg --set-selections
542 5 Mehdi Abaakouk
ssh root@h48 apt-get dselect-upgrade
543 5 Mehdi Abaakouk
</pre>
544 6 Mehdi Abaakouk
545 6 Mehdi Abaakouk
546 5 Mehdi Abaakouk
547 5 Mehdi Abaakouk
* munin:
548 5 Mehdi Abaakouk
dans /etc/munin/munin-node.conf ajouter: allow ^91\.224\.149\.194$
549 1 Mehdi Abaakouk
* TODO patch munin Loic
550 5 Mehdi Abaakouk
http://trac.fsffrance.org/wiki/PatchInventory#Munin
551 1 Mehdi Abaakouk
* reboot
552 5 Mehdi Abaakouk
* Installer le node dans le cluster ganeti apres s'etre assure que la version de ganeti est bien la meme
553 1 Mehdi Abaakouk
554 1 Mehdi Abaakouk
<pre>
555 5 Mehdi Abaakouk
dpkg -l|grep -i ganeti
556 5 Mehdi Abaakouk
gnt-node add h48
557 5 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
558 5 Mehdi Abaakouk
</pre>
559 5 Mehdi Abaakouk
560 5 Mehdi Abaakouk
Appliquer ce patch à ganeti-instance-debootstrap:
561 5 Mehdi Abaakouk
562 5 Mehdi Abaakouk
<pre>
563 5 Mehdi Abaakouk
--- /usr/share/ganeti/os/debootstrap/common.sh.ori  2010-09-15 22:34:12.000000000 +0200
564 5 Mehdi Abaakouk
+++ /usr/share/ganeti/os/debootstrap/common.sh  2011-07-27 12:33:55.695617766 +0200
565 5 Mehdi Abaakouk
@@ -91,7 +91,7 @@
566 1 Mehdi Abaakouk
# some versions of sfdisk need manual specification of
567 5 Mehdi Abaakouk
# head/sectors for devices such as drbd which don't
568 5 Mehdi Abaakouk
# report geometry
569 5 Mehdi Abaakouk
-  sfdisk -H 255 -S 63 --quiet --Linux "$1" <<EOF
570 6 Mehdi Abaakouk
+  sfdisk -H 255 -S 63 -D --quiet --Linux "$1" <<EOF
571 5 Mehdi Abaakouk
0,,L,*
572 3 Mehdi Abaakouk
EOF
573 1 Mehdi Abaakouk
}
574 1 Mehdi Abaakouk
</pre>
575 11 Mehdi Abaakouk
576 3 Mehdi Abaakouk
Ci dessous ajouter dkms et r8168 si nécessaire.
577 15 Mehdi Abaakouk
578 1 Mehdi Abaakouk
h3. Pilotes additionnel
579 1 Mehdi Abaakouk
580 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).
581 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)
582 1 Mehdi Abaakouk
583 1 Mehdi Abaakouk
<pre>
584 1 Mehdi Abaakouk
apt-get install gcc dkms
585 1 Mehdi Abaakouk
cd /usr/src
586 1 Mehdi Abaakouk
wget http://url_to_pilot/r8168-8.024.00.tar.bz2
587 1 Mehdi Abaakouk
tar -xjf r8168-8.024.00.tar.bz2
588 1 Mehdi Abaakouk
cd r8168-8.024.00
589 1 Mehdi Abaakouk
cat > dkms.conf << EOF
590 1 Mehdi Abaakouk
PACKAGE_NAME=r8168
591 1 Mehdi Abaakouk
PACKAGE_VERSION=8.024.00
592 1 Mehdi Abaakouk
MAKE[0]="make"
593 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=r8168
594 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
595 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
596 1 Mehdi Abaakouk
AUTOINSTALL="YES"
597 1 Mehdi Abaakouk
EOF
598 1 Mehdi Abaakouk
dkms add -m r8168 -v 8.024.00
599 1 Mehdi Abaakouk
dkms build -m r8168 -v 8.024.00
600 1 Mehdi Abaakouk
dkms install -m r8168 -v 8.024.00
601 1 Mehdi Abaakouk
echo "r8168" >> /etc/modules
602 1 Mehdi Abaakouk
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
603 1 Mehdi Abaakouk
update-initramfs -u
604 1 Mehdi Abaakouk
reboot
605 1 Mehdi Abaakouk
</pre>
606 1 Mehdi Abaakouk
607 1 Mehdi Abaakouk
Pour les machines a base de e1000e:
608 1 Mehdi Abaakouk
609 1 Mehdi Abaakouk
<pre>
610 1 Mehdi Abaakouk
apt-get install gcc dkms
611 1 Mehdi Abaakouk
cd /usr/src
612 1 Mehdi Abaakouk
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.3.17.tar.gz
613 1 Mehdi Abaakouk
tar -xzf e1000e-1.3.17.tar.gz
614 1 Mehdi Abaakouk
cd e1000e-1.3.17
615 1 Mehdi Abaakouk
cat > dkms.conf << EOF
616 1 Mehdi Abaakouk
PACKAGE_NAME=e1000e
617 1 Mehdi Abaakouk
PACKAGE_VERSION=1.3.17
618 1 Mehdi Abaakouk
CLEAN="make -C src/ clean"
619 1 Mehdi Abaakouk
MAKE[0]="make -C src/"
620 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=e1000e
621 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
622 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
623 1 Mehdi Abaakouk
AUTOINSTALL="YES"
624 1 Mehdi Abaakouk
EOF
625 1 Mehdi Abaakouk
dkms add -m e1000e -v 1.3.17
626 1 Mehdi Abaakouk
dkms build -m e1000e -v 1.3.17
627 1 Mehdi Abaakouk
dkms install -m e1000e -v 1.3.17
628 1 Mehdi Abaakouk
reboot
629 1 Mehdi Abaakouk
</pre>
630 1 Mehdi Abaakouk
631 1 Mehdi Abaakouk
632 13 Mehdi Abaakouk
h2. Annexe 
633 13 Mehdi Abaakouk
634 13 Mehdi Abaakouk
h3. Configuration réseau
635 13 Mehdi Abaakouk
636 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)
637 1 Mehdi Abaakouk
le script /etc/rc.local.conf, contient les adresses IP de la machine et les gw
638 11 Mehdi Abaakouk
639 11 Mehdi Abaakouk
h3. Protection VNC
640 11 Mehdi Abaakouk
641 11 Mehdi Abaakouk
Le VNC de kvm est utiliser sur chaque MV.
642 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
643 11 Mehdi Abaakouk
Ce script est appelé par les hooks ganeti.
644 11 Mehdi Abaakouk
645 11 Mehdi Abaakouk
h3. Mac spoofing configuration (Actuellement désactivé)
646 1 Mehdi Abaakouk
647 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.
648 1 Mehdi Abaakouk
Le fichier prends la forme suivante:
649 1 Mehdi Abaakouk
munin.tetaneutral.net:0:tap3
650 1 Mehdi Abaakouk
trac.tetaneutral.net:0:tap5
651 1 Mehdi Abaakouk
munin.tetaneutral.net:1:tap5
652 1 Mehdi Abaakouk
Les règles ebtables sont écrites par le script /etc/ganeti/spoofing/spoofing-protection avec les informations de ce fichier.
653 1 Mehdi Abaakouk
Les scripts de hook de ganeti (ie:/etc/ganeti/hook/) utilise ce script, pour lancer ou arreter le spoofing.
654 11 Mehdi Abaakouk
655 1 Mehdi Abaakouk
h3. Patch maison pour ganeti
656 11 Mehdi Abaakouk
657 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
658 1 Mehdi Abaakouk
Celui-ci est décrit dans l'installation d'une node aussi.
659 11 Mehdi Abaakouk
660 1 Mehdi Abaakouk
h3. J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!
661 11 Mehdi Abaakouk
662 11 Mehdi Abaakouk
Voici quelques ressources:
663 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/current/html/
664 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/2.1/man/
665 11 Mehdi Abaakouk
* http://wiki.osuosl.org/public/ganeti/
666 1 Mehdi Abaakouk
Ou bien je demande à sileht d'écrire le use case qui me manque s'il à le temps