Projet

Général

Profil

Cluster Ganeti » Historique » Version 30

Mehdi Abaakouk, 11/07/2012 16:09

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