Project

General

Profile

Cluster Ganeti » History » Version 54

Fabien Dupont, 06/20/2013 01:32 PM

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 48 Fabien Dupont
h3. Création d'une VM sous FreeBSD (ou autre)
129 48 Fabien Dupont
130 48 Fabien Dupont
Exemple avec la VM anapivirtua :
131 48 Fabien Dupont
132 48 Fabien Dupont
Détermination du nœud primaire de la VM (ici, h6) :
133 48 Fabien Dupont
134 48 Fabien Dupont
<pre>
135 48 Fabien Dupont
# gnt-instance list anapivirtua.tetaneutral.net 
136 48 Fabien Dupont
Instance                    Hypervisor OS                    Primary_node       Status  Memory
137 48 Fabien Dupont
anapivirtua.tetaneutral.net kvm        debootstrap+squeeze64 h6.tetaneutral.net running   512M
138 48 Fabien Dupont
</pre>
139 48 Fabien Dupont
140 48 Fabien Dupont
Téléchargement de l'ISO de FreeBSD sur le nœud primaire :
141 48 Fabien Dupont
142 48 Fabien Dupont
<pre>
143 48 Fabien Dupont
# cd ~/fab
144 48 Fabien Dupont
# wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-amd64-bootonly.iso
145 48 Fabien Dupont
</pre>
146 48 Fabien Dupont
147 48 Fabien Dupont
Sur le master ganeti (h4 actuellement) :
148 48 Fabien Dupont
149 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 :
150 50 Fabien Dupont
151 48 Fabien Dupont
<pre>
152 48 Fabien Dupont
# gnt-instance modify -H serial_console=false anapivirtua.tetaneutral.net
153 1 Mehdi Abaakouk
# gnt-instance modify -H kernel_path="" anapivirtua.tetaneutral.net
154 50 Fabien Dupont
# gnt-instance modify -H nic_type="e1000" anapivirtua.tetaneutral.net
155 50 Fabien Dupont
# gnt-instance modify -H disk_type="ide" anapivirtua.tetaneutral.net
156 1 Mehdi Abaakouk
</pre>
157 1 Mehdi Abaakouk
158 50 Fabien Dupont
Et on n'a plus qu'à démarrer sur le CD d'install :
159 1 Mehdi Abaakouk
160 1 Mehdi Abaakouk
<pre>
161 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
162 48 Fabien Dupont
</pre>
163 48 Fabien Dupont
164 50 Fabien Dupont
Retour sur le nœud primaire, ouverture de VNC pour que l'adhérent puisse effectuer l'installation :
165 48 Fabien Dupont
166 48 Fabien Dupont
<pre>
167 48 Fabien Dupont
# iptables -L -v -n | grep anapivirtua.tetaneutral.net
168 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 
169 48 Fabien Dupont
# iptables -D INPUT -p tcp ! -s 91.224.149.193 --dport 12647 -j REJECT
170 48 Fabien Dupont
</pre>
171 48 Fabien Dupont
172 48 Fabien Dupont
Communiquer à l'adhérent l'IP et le port pour VNC (ici h6.tetaneutral.net:12647)
173 48 Fabien Dupont
174 48 Fabien Dupont
Une fois qu'il a fini l'installation, il faut refermer VNC et voilà !
175 48 Fabien Dupont
176 48 Fabien Dupont
<pre>
177 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"
178 48 Fabien Dupont
</pre>
179 48 Fabien Dupont
180 46 Laurent GUERBY
h3. Backup et effacement d'une VM
181 46 Laurent GUERBY
182 46 Laurent GUERBY
Vers h2 :
183 46 Laurent GUERBY
<pre>
184 47 Laurent GUERBY
gnt-instance shutdown xxx
185 46 Laurent GUERBY
gnt-instance activate-disks xxx
186 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
187 46 Laurent GUERBY
DB=nnn; cat /dev/drbd$DB | gzip --fast|socat -u - tcp4:h2:50555;md5sum /dev/drbd$DB
188 46 Laurent GUERBY
gnt-instance deactivate-disks xxx
189 46 Laurent GUERBY
gnt-instance remove xxx
190 46 Laurent GUERBY
</pre>
191 46 Laurent GUERBY
192 34 Mehdi Abaakouk
h3. Gestion d'un gnt-instance migrate qui reste bloquer
193 34 Mehdi Abaakouk
194 34 Mehdi Abaakouk
Symptôme: la progression du "gnt-instance migrate <vmname>" ne progresse plus"
195 34 Mehdi Abaakouk
196 34 Mehdi Abaakouk
<pre>
197 34 Mehdi Abaakouk
# gnt-instance info -s nagios  | grep 'node.:' -A1
198 34 Mehdi Abaakouk
      nodeA:       h4.tetaneutral.net, minor=18
199 34 Mehdi Abaakouk
      nodeB:       h6.tetaneutral.net, minor=27
200 34 Mehdi Abaakouk
      port:        12589
201 34 Mehdi Abaakouk
</pre>
202 34 Mehdi Abaakouk
203 34 Mehdi Abaakouk
Donc si on regarde sur la machine primaire et secondaire l'état:
204 34 Mehdi Abaakouk
205 34 Mehdi Abaakouk
<pre>
206 34 Mehdi Abaakouk
# grep '18:' -A5 /proc/drbd # (et sur la secondaire: grep '27:' -A5 /proc/drbd)
207 34 Mehdi Abaakouk
0: cs:SyncSource st:Primary/Primary ds:UpToDate/UpToDate C r---
208 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
209 34 Mehdi Abaakouk
[===================>] sync'ed:100.0% (965/6869678)M 
210 34 Mehdi Abaakouk
stalled 
211 34 Mehdi Abaakouk
</pre>
212 34 Mehdi Abaakouk
213 34 Mehdi Abaakouk
Si on tente un commande drbd on a:
214 34 Mehdi Abaakouk
215 34 Mehdi Abaakouk
<pre>
216 34 Mehdi Abaakouk
# drbdsetup /dev/drbd18 sh-status
217 34 Mehdi Abaakouk
(longue attente)
218 34 Mehdi Abaakouk
No response from the DRBD driver! Is the module loaded?
219 34 Mehdi Abaakouk
</pre>
220 34 Mehdi Abaakouk
221 36 Mehdi Abaakouk
Bref Drbd est dans les choux, ca semble être un bug connu des versions <= 8.3.12
222 34 Mehdi Abaakouk
223 37 Laurent GUERBY
Sources : 
224 37 Laurent GUERBY
# http://www.mentby.com/Group/drbd-user/recovering-from-erroneous-sync-state.html
225 37 Laurent GUERBY
# http://lists.linbit.com/pipermail/drbd-dev/2007-May/000751.html
226 37 Laurent GUERBY
# https://encrypted.google.com/search?q=drbd+stall+100%25&hl=en
227 35 Laurent GUERBY
228 34 Mehdi Abaakouk
Pour réparer sur la machine h4, le node primaire, faire:
229 34 Mehdi Abaakouk
<pre>
230 34 Mehdi Abaakouk
# /etc/ganeti/iptables-to-reset-drbd-connection.sh 12589 # <-- 12589 le port de drbd récupéré plus haut
231 34 Mehdi Abaakouk
232 34 Mehdi Abaakouk
** Attention à être sur la bonne machine **
233 34 Mehdi Abaakouk
Pour couper la connection
234 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
235 34 Mehdi Abaakouk
iptables -I INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
236 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
237 34 Mehdi Abaakouk
iptables -I OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
238 34 Mehdi Abaakouk
239 34 Mehdi Abaakouk
Pour remettre la connection
240 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
241 34 Mehdi Abaakouk
iptables -D INPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
242 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --dport 12589 -j REJECT --reject-with tcp-reset
243 34 Mehdi Abaakouk
iptables -D OUTPUT -p tcp --sport 12589 -j REJECT --reject-with tcp-reset
244 34 Mehdi Abaakouk
</pre>
245 34 Mehdi Abaakouk
246 34 Mehdi Abaakouk
Exécuter la première partie puis vérifier dans /proc/drbd qui celui-ci est en WFConnection.
247 34 Mehdi Abaakouk
248 34 Mehdi Abaakouk
Puis rétablir la connexion avec la seconde partie et vérifier /proc/drbd que c'est bien reconnecté.
249 34 Mehdi Abaakouk
250 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:
251 34 Mehdi Abaakouk
252 34 Mehdi Abaakouk
<pre>
253 34 Mehdi Abaakouk
# /etc/init.d/ganeti restart
254 34 Mehdi Abaakouk
</pre>
255 34 Mehdi Abaakouk
Ceci passe en error le job de migration
256 34 Mehdi Abaakouk
257 34 Mehdi Abaakouk
Puis sur le master node, on nettoye les résidu de la migration échouée:
258 34 Mehdi Abaakouk
<pre>
259 34 Mehdi Abaakouk
# gnt-instance migrate --cleanup nagios
260 34 Mehdi Abaakouk
</pre>
261 34 Mehdi Abaakouk
262 34 Mehdi Abaakouk
263 18 Laurent GUERBY
h3. Gestion d'un disque en I/O error
264 27 Laurent GUERBY
265 1 Mehdi Abaakouk
First put the disk in failure offline:
266 28 Mehdi Abaakouk
267 28 Mehdi Abaakouk
<pre>echo offline > /sys/block/sdb/device/state</pre>
268 27 Laurent GUERBY
269 1 Mehdi Abaakouk
Then we need to remove the volume group, here /dev/kvmvg
270 27 Laurent GUERBY
We need to do it manually because vgremove will not work in this case
271 28 Mehdi Abaakouk
272 27 Laurent GUERBY
<pre>/dev/kvmvg# for i in *; do echo === $(date) == $i ; dmsetup remove /dev/kvmvg/"$i"; echo $?; done</pre>
273 1 Mehdi Abaakouk
274 27 Laurent GUERBY
This will leave a few lv when ganeti hasnt detected for some reason the disk failure. 
275 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
276 28 Mehdi Abaakouk
277 27 Laurent GUERBY
<pre>drbdsetup /dev/drbd47 detach</pre>
278 27 Laurent GUERBY
279 27 Laurent GUERBY
Then gnt-instance info VM to force ganeti to recognize the disk failure (it will take a few minutes)
280 27 Laurent GUERBY
281 27 Laurent GUERBY
Then dmsetup remove will work.
282 27 Laurent GUERBY
283 27 Laurent GUERBY
After the last dmsetup remove /dev/kvmvg will disappear.
284 27 Laurent GUERBY
285 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)
286 27 Laurent GUERBY
Then create a LVM partition then vgcreate kvmvg /dev/sdX
287 1 Mehdi Abaakouk
288 27 Laurent GUERBY
Now we need to recreate redundancy 
289 27 Laurent GUERBY
290 1 Mehdi Abaakouk
On the still running VM you can use 
291 28 Mehdi Abaakouk
292 27 Laurent GUERBY
<pre>gnt-instance replace-disks --submit -a VMname</pre>
293 1 Mehdi Abaakouk
294 27 Laurent GUERBY
On the stopped VM you need to do manually
295 28 Mehdi Abaakouk
296 28 Mehdi Abaakouk
<pre>gnt-instance replace-disks --submit -p VMname # if primary to reconstruct
297 1 Mehdi Abaakouk
gnt-instance replace-disks --submit -s VMname # if secondary to reconstruct</pre>
298 1 Mehdi Abaakouk
299 1 Mehdi Abaakouk
At 15 MByte/s 1 TB to reconstruct will take about 18h30.
300 28 Mehdi Abaakouk
301 27 Laurent GUERBY
Before remove the disk from the server, we must prepare the disk for unplug:
302 29 Mehdi Abaakouk
303 28 Mehdi Abaakouk
<pre>echo 1 > /sys/block/sdX/device/delete</pre>
304 28 Mehdi Abaakouk
305 28 Mehdi Abaakouk
306 28 Mehdi Abaakouk
Links:
307 27 Laurent GUERBY
308 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#preparing-for-disk-operations
309 27 Laurent GUERBY
http://docs.ganeti.org/ganeti/2.5/html/admin.html#generalized-storage-handling
310 28 Mehdi Abaakouk
http://www.lancealbertson.com/2011/02/handling-hdd-failures-with-ganeti/
311 27 Laurent GUERBY
http://www.sakana.fr/blog/2009/05/04/linux-sata-hot-plug-unplug/
312 10 Mehdi Abaakouk
313 1 Mehdi Abaakouk
h3. Demarrer et arrêter une instance ?
314 10 Mehdi Abaakouk
315 10 Mehdi Abaakouk
<pre>
316 10 Mehdi Abaakouk
gnt-instance start vm1
317 10 Mehdi Abaakouk
gnt-instance stop vm1
318 1 Mehdi Abaakouk
</pre>
319 26 Mehdi Abaakouk
320 26 Mehdi Abaakouk
Si pendant l'extinction de la VM le message suivant apparait:
321 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>
322 26 Mehdi Abaakouk
323 26 Mehdi Abaakouk
Sur h6 on peut remarquer que l'on a un status non nominal sur drbd:
324 26 Mehdi Abaakouk
<pre>$ grep -A4 45: /proc/drbd
325 26 Mehdi Abaakouk
45: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
326 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
327 26 Mehdi Abaakouk
</pre>
328 26 Mehdi Abaakouk
329 26 Mehdi Abaakouk
Pour résoudre le probléme taper:
330 26 Mehdi Abaakouk
<pre>drbdsetup /dev/drbd45 down</pre>
331 26 Mehdi Abaakouk
332 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:
333 26 Mehdi Abaakouk
<pre>dmsetup ls | grep drbd45</pre>
334 26 Mehdi Abaakouk
335 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
336 10 Mehdi Abaakouk
337 1 Mehdi Abaakouk
h3. Comment tout savoir sur une vm ?
338 1 Mehdi Abaakouk
339 1 Mehdi Abaakouk
<pre>
340 1 Mehdi Abaakouk
gnt-instance info vm1
341 1 Mehdi Abaakouk
</pre>
342 10 Mehdi Abaakouk
343 1 Mehdi Abaakouk
h3. Déplacement le(s) disque(s) dur d'une VM
344 1 Mehdi Abaakouk
345 1 Mehdi Abaakouk
Si la machine a ces disques au format plain (sans drbd), taper:
346 1 Mehdi Abaakouk
347 1 Mehdi Abaakouk
<pre>
348 1 Mehdi Abaakouk
gnt-instance stop vm1
349 1 Mehdi Abaakouk
gnt-instance move -n h6 vm1
350 1 Mehdi Abaakouk
gnt-instance start vm1
351 1 Mehdi Abaakouk
</pre>
352 1 Mehdi Abaakouk
353 1 Mehdi Abaakouk
Si la machine utilise drbd (uniquement le disque de la node secondaire bascule):
354 1 Mehdi Abaakouk
355 1 Mehdi Abaakouk
<pre>
356 1 Mehdi Abaakouk
gnt-instance replace-disks -n h6 vm1
357 10 Mehdi Abaakouk
</pre>
358 1 Mehdi Abaakouk
359 1 Mehdi Abaakouk
Si vous voulais déplacer l'autre disque du drbd, il faut basculer la machine, puis refaire la même chose
360 10 Mehdi Abaakouk
361 1 Mehdi Abaakouk
h3. Basculer/migrer une machine qui utilise drbd
362 1 Mehdi Abaakouk
363 1 Mehdi Abaakouk
Bascule avec arret de la machine:
364 1 Mehdi Abaakouk
365 1 Mehdi Abaakouk
<pre>
366 1 Mehdi Abaakouk
gnt-instance failover vm1
367 1 Mehdi Abaakouk
</pre>
368 10 Mehdi Abaakouk
369 10 Mehdi Abaakouk
Sans arrêt, migration à chaud:
370 1 Mehdi Abaakouk
371 1 Mehdi Abaakouk
<pre>
372 1 Mehdi Abaakouk
gnt-instance migrate vm1
373 10 Mehdi Abaakouk
</pre>
374 1 Mehdi Abaakouk
375 1 Mehdi Abaakouk
En cas de soucis primaire/secondaire:
376 1 Mehdi Abaakouk
377 1 Mehdi Abaakouk
<pre>
378 1 Mehdi Abaakouk
gnt-instance migrate --cleanup vm1
379 1 Mehdi Abaakouk
</pre>
380 10 Mehdi Abaakouk
381 42 Laurent GUERBY
cleanup marche en cas de split brain, example de /proc/drbd :
382 42 Laurent GUERBY
<pre>
383 42 Laurent GUERBY
h5: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----
384 42 Laurent GUERBY
h1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----
385 42 Laurent GUERBY
</pre>
386 42 Laurent GUERBY
387 1 Mehdi Abaakouk
h3. Création d'une machine
388 10 Mehdi Abaakouk
389 10 Mehdi Abaakouk
Un script est présent sur h1 voici ca doc:
390 10 Mehdi Abaakouk
<pre>
391 10 Mehdi Abaakouk
# /root/gnt-addvm
392 10 Mehdi Abaakouk
usage: gnt-addvm [options] VIRTUAL_MACHINE_HOSTNAME
393 10 Mehdi Abaakouk
       -o OS | --os OS          OS can be default natty32 natty64 sid64 squeeze32 squeeze64 wheezy64
394 10 Mehdi Abaakouk
       -s SIZE | --size SIZE    default SIZE is 10G
395 10 Mehdi Abaakouk
       -m MEM | --mem MEM       default MEM is 256M
396 10 Mehdi Abaakouk
       -c CPU | --cpu CPU               default CPU is 1
397 10 Mehdi Abaakouk
       -n NODES | --nodes NODES         default NODES is
398 10 Mehdi Abaakouk
       -d MODE | --disk MODE      default MODE is drbd
399 10 Mehdi Abaakouk
       -q | --quick             don't wait drbd sync
400 10 Mehdi Abaakouk
       --dry-run                        show executed command
401 10 Mehdi Abaakouk
       --cdrom PATH             installation from iso file
402 1 Mehdi Abaakouk
</pre>
403 10 Mehdi Abaakouk
404 10 Mehdi Abaakouk
405 10 Mehdi Abaakouk
h3. Supprimer une machine
406 1 Mehdi Abaakouk
407 10 Mehdi Abaakouk
<pre>
408 1 Mehdi Abaakouk
gnt-instance remove vm1
409 1 Mehdi Abaakouk
</pre>
410 10 Mehdi Abaakouk
411 1 Mehdi Abaakouk
si la vm est en drbd et que une des nodes du drbd ne fonctionne plus
412 10 Mehdi Abaakouk
413 1 Mehdi Abaakouk
<pre>
414 1 Mehdi Abaakouk
gnt-instance remove --ignore-failures vm1
415 10 Mehdi Abaakouk
</pre>
416 14 Mehdi Abaakouk
417 10 Mehdi Abaakouk
418 10 Mehdi Abaakouk
h3. Changer les cractéristique d'une VM, upgrade disk, net, cpu, mem
419 1 Mehdi Abaakouk
420 10 Mehdi Abaakouk
Et hop une nouvelle carte réseau sur le vlan tsf
421 1 Mehdi Abaakouk
<pre>
422 1 Mehdi Abaakouk
gnt-instance  modify --net add:link=br1 vm1
423 10 Mehdi Abaakouk
</pre>
424 10 Mehdi Abaakouk
425 10 Mehdi Abaakouk
Un petit disk en plus
426 10 Mehdi Abaakouk
<pre>
427 1 Mehdi Abaakouk
gnt-instance  modify --disk add:size=50G vm1
428 10 Mehdi Abaakouk
</pre>
429 10 Mehdi Abaakouk
430 10 Mehdi Abaakouk
Un petite upgrade cpu et mémoire
431 10 Mehdi Abaakouk
<pre>
432 1 Mehdi Abaakouk
gnt-instance modify -B vcpus=2,memory=512M vm1
433 10 Mehdi Abaakouk
</pre>
434 1 Mehdi Abaakouk
435 10 Mehdi Abaakouk
Reboot pour prendre en compte le tout
436 1 Mehdi Abaakouk
<pre>
437 1 Mehdi Abaakouk
gnt-instance reboot -t full vm1
438 10 Mehdi Abaakouk
</pre>
439 10 Mehdi Abaakouk
440 1 Mehdi Abaakouk
== Je voudrais bien booter mon kernel ! ou un cdrom==
441 10 Mehdi Abaakouk
Je peux désactivé le kernel commun pour une vm
442 10 Mehdi Abaakouk
443 10 Mehdi Abaakouk
<pre>
444 10 Mehdi Abaakouk
gnt-instance modify -H kernel_path="" vm1
445 1 Mehdi Abaakouk
</pre>
446 1 Mehdi Abaakouk
Ou booter sur le cdrom pour le prochain démarrage commme ceci:
447 10 Mehdi Abaakouk
448 1 Mehdi Abaakouk
<pre>
449 1 Mehdi Abaakouk
gnt-instance start -H boot_order=cdrom,cdrom_image_path=/path/to/debian-504-amd64-netinst.iso vm1
450 10 Mehdi Abaakouk
</pre>
451 1 Mehdi Abaakouk
452 27 Laurent GUERBY
453 10 Mehdi Abaakouk
h3. Relocaliser les disques secondaires si un serveur est HS.
454 10 Mehdi Abaakouk
455 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
456 1 Mehdi Abaakouk
457 10 Mehdi Abaakouk
<pre>
458 1 Mehdi Abaakouk
gnt-instance replace-disks -I hail vm1
459 1 Mehdi Abaakouk
</pre>
460 1 Mehdi Abaakouk
461 11 Mehdi Abaakouk
462 11 Mehdi Abaakouk
h3. Importer une image disque venant de l’extérieur
463 11 Mehdi Abaakouk
464 11 Mehdi Abaakouk
Convertion de l'image au format raw (si c'est pas déjà le cas)
465 11 Mehdi Abaakouk
<pre>
466 11 Mehdi Abaakouk
kvm-img convert DISQUEVM.qcow -O raw DISQUEVM.raw
467 11 Mehdi Abaakouk
</pre>
468 11 Mehdi Abaakouk
469 11 Mehdi Abaakouk
Copie du disque au format raw sur un lvm
470 11 Mehdi Abaakouk
<pre>
471 11 Mehdi Abaakouk
size=$(kvm-img info DISQUEVM.raw | sed -n -e 's/^virtual size:[^(]*(\([[:digit:]]*\).*)/\1/gp')
472 11 Mehdi Abaakouk
lvcreate -L ${size}b -n lv_migration_DISQUEVM kvmvg
473 11 Mehdi Abaakouk
dd if=DISQUEVM.raw of=/dev/kvmvg/lv_migration_DISQUEVM
474 11 Mehdi Abaakouk
</pre>
475 11 Mehdi Abaakouk
476 11 Mehdi Abaakouk
Création de la VM
477 11 Mehdi Abaakouk
<pre>
478 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
479 11 Mehdi Abaakouk
</pre>
480 11 Mehdi Abaakouk
481 11 Mehdi Abaakouk
Et pour finir, on transforme le format de disque de la VM en drbd:
482 11 Mehdi Abaakouk
<pre>
483 11 Mehdi Abaakouk
gnt-instance modify -t drbd -n h6 VMNAME.tetaneutral.net
484 11 Mehdi Abaakouk
</pre>
485 17 Mehdi Abaakouk
486 11 Mehdi Abaakouk
h3. Copier une VM sur une autre machine
487 11 Mehdi Abaakouk
488 11 Mehdi Abaakouk
Seul la machine *h1* a l'espace configurer pour faire des dumps de machine virtuelle.
489 11 Mehdi Abaakouk
490 11 Mehdi Abaakouk
On lance un backup de celle-ci (attention cette commande *éteint* la machine):
491 11 Mehdi Abaakouk
<pre>
492 11 Mehdi Abaakouk
gnt-backup export -n h1 sileht2
493 11 Mehdi Abaakouk
</pre>
494 11 Mehdi Abaakouk
495 11 Mehdi Abaakouk
Les fichiers sont ensuite sur h1 dans /exports/sileht2.tetaneutral.net/
496 11 Mehdi Abaakouk
497 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:
498 11 Mehdi Abaakouk
<pre>
499 11 Mehdi Abaakouk
09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap
500 11 Mehdi Abaakouk
</pre>
501 11 Mehdi Abaakouk
502 11 Mehdi Abaakouk
Pour la démonstration je copie ce fichier sur h2:
503 11 Mehdi Abaakouk
<pre>
504 11 Mehdi Abaakouk
scp /exportfs/sileht2.tetaneutral.net/09d836a0-22e0-4ea4-9104-c301351bb2e2.disk0_data.snap h2:/root/sileht.raw
505 11 Mehdi Abaakouk
</pre>
506 11 Mehdi Abaakouk
507 11 Mehdi Abaakouk
Et je le test avec kvm:
508 11 Mehdi Abaakouk
<pre>
509 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
510 1 Mehdi Abaakouk
</pre>
511 15 Mehdi Abaakouk
512 15 Mehdi Abaakouk
A savoir l'image utilise les pilotes kvm "virtio", si on souhaite utiliser la VM avec un autre logiciel de virtualisation,
513 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
514 14 Mehdi Abaakouk
515 44 Laurent GUERBY
h3. Backup disque seul
516 44 Laurent GUERBY
517 44 Laurent GUERBY
gnt-instance activate-disks VMNAME.tetaneutral.net
518 44 Laurent GUERBY
=> affiche le drbd
519 44 Laurent GUERBY
=> copie avec dd
520 44 Laurent GUERBY
puis gnt-instance deactivate-disks VMNAME.tetaneutral.net
521 44 Laurent GUERBY
522 11 Mehdi Abaakouk
h3. Monter une partition de machine virtuelle sur la machine hôte (!Attention DANGER!)
523 11 Mehdi Abaakouk
524 43 Mehdi Abaakouk
Sur le +master node+, arret de la machine et activation des disques
525 11 Mehdi Abaakouk
<pre>
526 11 Mehdi Abaakouk
 $ gnt-instance stop VMNAME.tetaneutral.net
527 11 Mehdi Abaakouk
 $ gnt-instance activate-disks VMNAME.tetaneutral.net
528 43 Mehdi Abaakouk
 h5.tetaneutral.net:disk/0:/dev/drbd34
529 1 Mehdi Abaakouk
</pre>
530 1 Mehdi Abaakouk
531 43 Mehdi Abaakouk
Ensuite se connecter à la machine ou ganeti à préparer le disque, ici +h5+
532 43 Mehdi Abaakouk
533 43 Mehdi Abaakouk
Donc sur +h5+, pour voir les partitions du disque, ici le +/dev/drbd34+:
534 1 Mehdi Abaakouk
<pre>
535 11 Mehdi Abaakouk
kpartx -l /dev/drbd34
536 11 Mehdi Abaakouk
</pre>
537 11 Mehdi Abaakouk
538 43 Mehdi Abaakouk
Sur +h5+, on créé ensuite les partitions dans /dev avec devmapper
539 1 Mehdi Abaakouk
<pre>
540 11 Mehdi Abaakouk
kpartx -a /dev/drbd34
541 11 Mehdi Abaakouk
ls -la /dev/mapper/drbd34*
542 11 Mehdi Abaakouk
</pre>
543 11 Mehdi Abaakouk
544 43 Mehdi Abaakouk
Sur +h5+, a partir de maintenant on peut faire mumuse avec la partition, exemple:
545 11 Mehdi Abaakouk
<pre>
546 11 Mehdi Abaakouk
mount /dev/mapper/drbd34p1 /mnt/
547 1 Mehdi Abaakouk
....
548 1 Mehdi Abaakouk
umount /mnt
549 1 Mehdi Abaakouk
</pre>
550 1 Mehdi Abaakouk
551 43 Mehdi Abaakouk
Puis *très important*, il faut nettoyer devmapper, sur +h5+
552 11 Mehdi Abaakouk
<pre>
553 11 Mehdi Abaakouk
kpartx -d /dev/drbd34
554 43 Mehdi Abaakouk
</pre>
555 43 Mehdi Abaakouk
556 43 Mehdi Abaakouk
Et pour finir sur +master node+, on désactive les disques pour ganeti et on boot la vm:
557 43 Mehdi Abaakouk
<pre>
558 11 Mehdi Abaakouk
gnt-instance deactivate-disks VMNAME.tetaneutral.net
559 11 Mehdi Abaakouk
gnt-instance start VMNAME.tetaneutral.net
560 11 Mehdi Abaakouk
</pre>
561 1 Mehdi Abaakouk
562 10 Mehdi Abaakouk
h2. Administration des serveurs/nodes
563 10 Mehdi Abaakouk
564 10 Mehdi Abaakouk
h3. Éteindre/rebooter provisoirement un des serveurs sans coupure de service
565 10 Mehdi Abaakouk
566 10 Mehdi Abaakouk
La procédure est la suivante:
567 10 Mehdi Abaakouk
 - migration des machines virtuelles sur leurs secondaires
568 10 Mehdi Abaakouk
 - Arret/Ralummage ou reboot du serveur
569 1 Mehdi Abaakouk
 - remigration des machines virtuelles sur le serveur hX
570 10 Mehdi Abaakouk
571 10 Mehdi Abaakouk
<pre>
572 10 Mehdi Abaakouk
gnt-node migrate hX
573 1 Mehdi Abaakouk
shutdown -h now # ou reboot
574 1 Mehdi Abaakouk
hbal -L --no-disk-moves -X
575 10 Mehdi Abaakouk
</pre>
576 10 Mehdi Abaakouk
577 10 Mehdi Abaakouk
La resynchro drbd est automatique.
578 10 Mehdi Abaakouk
579 1 Mehdi Abaakouk
h3. L'extinction d'une node proprement dans le but de la désactivé du cluster
580 10 Mehdi Abaakouk
581 10 Mehdi Abaakouk
<pre>
582 10 Mehdi Abaakouk
gnt-node migrate hX # gnt-node failover hX
583 1 Mehdi Abaakouk
gnt-node evacuate -I hail hX
584 1 Mehdi Abaakouk
gnt-node modify -O yes hX
585 10 Mehdi Abaakouk
</pre>
586 1 Mehdi Abaakouk
587 10 Mehdi Abaakouk
Ici toutes les VMs seront migrés et les données auront été déplacé vers les autres nodes.
588 1 Mehdi Abaakouk
589 10 Mehdi Abaakouk
h3. Vérifier l'état du cluster
590 10 Mehdi Abaakouk
591 1 Mehdi Abaakouk
Sur le masternode normalement h1 faire:
592 10 Mehdi Abaakouk
593 1 Mehdi Abaakouk
<pre>
594 1 Mehdi Abaakouk
gnt-cluster verify
595 10 Mehdi Abaakouk
</pre>
596 1 Mehdi Abaakouk
597 10 Mehdi Abaakouk
h3. Change le node principal (masternode) de "ganeti", celui qui permet de lancer des commandes ganeti.
598 1 Mehdi Abaakouk
599 1 Mehdi Abaakouk
Allez sur un node, taper ceci et il deviendra "maternode":
600 1 Mehdi Abaakouk
601 1 Mehdi Abaakouk
<pre>
602 41 Laurent GUERBY
gnt-cluster master-failover
603 10 Mehdi Abaakouk
</pre>
604 1 Mehdi Abaakouk
605 10 Mehdi Abaakouk
h3. Gestion des fichiers de configuration (ie: /etc/ganeti, /etc/hosts, /etc/rc.local, ...)
606 1 Mehdi Abaakouk
607 1 Mehdi Abaakouk
Tous les fichiers de configuration à synchroniser entre toutes les nodes du cluster sont contenues dans ce script:
608 1 Mehdi Abaakouk
609 1 Mehdi Abaakouk
<pre>
610 1 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
611 10 Mehdi Abaakouk
</pre>
612 1 Mehdi Abaakouk
613 10 Mehdi Abaakouk
Le lancer recopie ces fichiers du masternode vers les autres nodes.
614 10 Mehdi Abaakouk
615 10 Mehdi Abaakouk
h3. Désactiver un serveur qui serait HS du cluster provisoirement.
616 10 Mehdi Abaakouk
617 10 Mehdi Abaakouk
On bascule les machines qui n'ont pas le failover en automatique
618 10 Mehdi Abaakouk
619 10 Mehdi Abaakouk
<pre>
620 10 Mehdi Abaakouk
gnt-node failover [ --ignore-consistency ] h2
621 10 Mehdi Abaakouk
</pre>
622 10 Mehdi Abaakouk
623 10 Mehdi Abaakouk
le --ignore-consistency permet de forcer ganeti à ne pas contrôler le disk avant le basculement
624 10 Mehdi Abaakouk
625 10 Mehdi Abaakouk
On peux (optionnellement) déplacer les disques durs secondaires des VMs
626 10 Mehdi Abaakouk
627 39 Mehdi Abaakouk
<pre>
628 1 Mehdi Abaakouk
gnt-node evacuate [--early-release]  -I hail hX
629 39 Mehdi Abaakouk
</pre>
630 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)
631 10 Mehdi Abaakouk
632 10 Mehdi Abaakouk
Puis on désactive la node:
633 10 Mehdi Abaakouk
634 10 Mehdi Abaakouk
<pre>
635 10 Mehdi Abaakouk
gnt-node modify -O yes h2
636 10 Mehdi Abaakouk
</pre>
637 1 Mehdi Abaakouk
638 11 Mehdi Abaakouk
639 10 Mehdi Abaakouk
h3. Réinsertion dans le cluster d'un node désactivé
640 10 Mehdi Abaakouk
641 10 Mehdi Abaakouk
- On réactive la node
642 10 Mehdi Abaakouk
- On remet dessus des machines et des disques en répartissant la charge du cluster
643 10 Mehdi Abaakouk
644 10 Mehdi Abaakouk
<pre>
645 10 Mehdi Abaakouk
gnt-node modify -O no h2
646 10 Mehdi Abaakouk
hbal -L -X
647 10 Mehdi Abaakouk
</pre>
648 10 Mehdi Abaakouk
649 10 Mehdi Abaakouk
650 10 Mehdi Abaakouk
h2. Setup d'un nouveau NODE
651 10 Mehdi Abaakouk
652 10 Mehdi Abaakouk
h3. Installation
653 1 Mehdi Abaakouk
654 1 Mehdi Abaakouk
* Installer squeeze basique avec juste ssh
655 1 Mehdi Abaakouk
* Ajouter wheezy dans /etc/apt/sources.list
656 1 Mehdi Abaakouk
657 1 Mehdi Abaakouk
<pre>
658 1 Mehdi Abaakouk
# deb http://ftp.fr.debian.org/debian/ squeeze main
659 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
660 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
661 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ sid main contrib non-free
662 1 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
663 1 Mehdi Abaakouk
deb http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
664 3 Mehdi Abaakouk
deb-src http://ftp.de.debian.org/debian-backports/ squeeze-backports main contrib non-free
665 3 Mehdi Abaakouk
deb http://security.debian.org/ squeeze/updates main
666 4 Mehdi Abaakouk
deb-src http://security.debian.org/ squeeze/updates main
667 3 Mehdi Abaakouk
# squeeze-updates, previously known as 'volatile'
668 1 Mehdi Abaakouk
deb http://ftp.fr.debian.org/debian/ squeeze-updates main
669 8 Mehdi Abaakouk
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main
670 8 Mehdi Abaakouk
</pre>
671 8 Mehdi Abaakouk
672 8 Mehdi Abaakouk
* Allouer un port avec 3131, 3175, 3195 tagged sur le procurve
673 7 Mehdi Abaakouk
* Monter le reseau manuellement IP X
674 8 Mehdi Abaakouk
675 7 Mehdi Abaakouk
<pre>
676 8 Mehdi Abaakouk
ip link add link eth0 name eth0.3131 type vlan id 3131
677 7 Mehdi Abaakouk
ip link set eth0.3131 up
678 8 Mehdi Abaakouk
ip addr add 91.224.149.15X/25 dev eth0.3131
679 8 Mehdi Abaakouk
</pre>
680 8 Mehdi Abaakouk
681 7 Mehdi Abaakouk
* Creer /etc/rc.local.conf avec X et Y
682 5 Mehdi Abaakouk
683 5 Mehdi Abaakouk
<pre>
684 6 Mehdi Abaakouk
IP_3131="91.224.149.15X/25"
685 5 Mehdi Abaakouk
GW_3131="91.224.149.254"
686 1 Mehdi Abaakouk
IP_3175="192.168.3.Y/24"
687 5 Mehdi Abaakouk
KVM_DISKS="sdb"
688 1 Mehdi Abaakouk
</pre>
689 1 Mehdi Abaakouk
690 1 Mehdi Abaakouk
* Installer les packages
691 1 Mehdi Abaakouk
692 1 Mehdi Abaakouk
<pre>
693 1 Mehdi Abaakouk
#TODO liste en fichier commit qqpart
694 1 Mehdi Abaakouk
#TODO: passer a une version compilée en local de ganeti pour eviter les update de version wheezy
695 1 Mehdi Abaakouk
dpkg --get-selections | ssh root@h48 dpkg --set-selections
696 5 Mehdi Abaakouk
ssh root@h48 apt-get dselect-upgrade
697 5 Mehdi Abaakouk
</pre>
698 6 Mehdi Abaakouk
699 6 Mehdi Abaakouk
700 5 Mehdi Abaakouk
701 5 Mehdi Abaakouk
* munin:
702 5 Mehdi Abaakouk
dans /etc/munin/munin-node.conf ajouter: allow ^91\.224\.149\.194$
703 1 Mehdi Abaakouk
* TODO patch munin Loic
704 5 Mehdi Abaakouk
http://trac.fsffrance.org/wiki/PatchInventory#Munin
705 1 Mehdi Abaakouk
* reboot
706 5 Mehdi Abaakouk
* Installer le node dans le cluster ganeti apres s'etre assure que la version de ganeti est bien la meme
707 1 Mehdi Abaakouk
708 1 Mehdi Abaakouk
<pre>
709 5 Mehdi Abaakouk
dpkg -l|grep -i ganeti
710 5 Mehdi Abaakouk
gnt-node add h48
711 5 Mehdi Abaakouk
/etc/ganeti/pushconf.sh
712 5 Mehdi Abaakouk
</pre>
713 5 Mehdi Abaakouk
714 5 Mehdi Abaakouk
Appliquer ce patch à ganeti-instance-debootstrap:
715 5 Mehdi Abaakouk
716 5 Mehdi Abaakouk
<pre>
717 5 Mehdi Abaakouk
--- /usr/share/ganeti/os/debootstrap/common.sh.ori  2010-09-15 22:34:12.000000000 +0200
718 5 Mehdi Abaakouk
+++ /usr/share/ganeti/os/debootstrap/common.sh  2011-07-27 12:33:55.695617766 +0200
719 5 Mehdi Abaakouk
@@ -91,7 +91,7 @@
720 1 Mehdi Abaakouk
# some versions of sfdisk need manual specification of
721 5 Mehdi Abaakouk
# head/sectors for devices such as drbd which don't
722 5 Mehdi Abaakouk
# report geometry
723 5 Mehdi Abaakouk
-  sfdisk -H 255 -S 63 --quiet --Linux "$1" <<EOF
724 6 Mehdi Abaakouk
+  sfdisk -H 255 -S 63 -D --quiet --Linux "$1" <<EOF
725 5 Mehdi Abaakouk
0,,L,*
726 3 Mehdi Abaakouk
EOF
727 1 Mehdi Abaakouk
}
728 1 Mehdi Abaakouk
</pre>
729 11 Mehdi Abaakouk
730 3 Mehdi Abaakouk
Ci dessous ajouter dkms et r8168 si nécessaire.
731 15 Mehdi Abaakouk
732 1 Mehdi Abaakouk
h3. Pilotes additionnel
733 1 Mehdi Abaakouk
734 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).
735 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)
736 1 Mehdi Abaakouk
737 1 Mehdi Abaakouk
<pre>
738 1 Mehdi Abaakouk
apt-get install gcc dkms
739 1 Mehdi Abaakouk
cd /usr/src
740 1 Mehdi Abaakouk
wget http://url_to_pilot/r8168-8.024.00.tar.bz2
741 1 Mehdi Abaakouk
tar -xjf r8168-8.024.00.tar.bz2
742 1 Mehdi Abaakouk
cd r8168-8.024.00
743 1 Mehdi Abaakouk
cat > dkms.conf << EOF
744 1 Mehdi Abaakouk
PACKAGE_NAME=r8168
745 1 Mehdi Abaakouk
PACKAGE_VERSION=8.024.00
746 1 Mehdi Abaakouk
MAKE[0]="make"
747 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=r8168
748 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
749 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
750 1 Mehdi Abaakouk
AUTOINSTALL="YES"
751 1 Mehdi Abaakouk
EOF
752 1 Mehdi Abaakouk
dkms add -m r8168 -v 8.024.00
753 1 Mehdi Abaakouk
dkms build -m r8168 -v 8.024.00
754 1 Mehdi Abaakouk
dkms install -m r8168 -v 8.024.00
755 1 Mehdi Abaakouk
echo "r8168" >> /etc/modules
756 1 Mehdi Abaakouk
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
757 1 Mehdi Abaakouk
update-initramfs -u
758 1 Mehdi Abaakouk
reboot
759 1 Mehdi Abaakouk
</pre>
760 1 Mehdi Abaakouk
761 1 Mehdi Abaakouk
Pour les machines a base de e1000e:
762 1 Mehdi Abaakouk
763 1 Mehdi Abaakouk
<pre>
764 1 Mehdi Abaakouk
apt-get install gcc dkms
765 1 Mehdi Abaakouk
cd /usr/src
766 1 Mehdi Abaakouk
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.3.17.tar.gz
767 1 Mehdi Abaakouk
tar -xzf e1000e-1.3.17.tar.gz
768 1 Mehdi Abaakouk
cd e1000e-1.3.17
769 1 Mehdi Abaakouk
cat > dkms.conf << EOF
770 1 Mehdi Abaakouk
PACKAGE_NAME=e1000e
771 1 Mehdi Abaakouk
PACKAGE_VERSION=1.3.17
772 1 Mehdi Abaakouk
CLEAN="make -C src/ clean"
773 1 Mehdi Abaakouk
MAKE[0]="make -C src/"
774 1 Mehdi Abaakouk
BUILT_MODULE_NAME[0]=e1000e
775 1 Mehdi Abaakouk
BUILT_MODULE_LOCATION[0]="src/"
776 1 Mehdi Abaakouk
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
777 1 Mehdi Abaakouk
AUTOINSTALL="YES"
778 1 Mehdi Abaakouk
EOF
779 1 Mehdi Abaakouk
dkms add -m e1000e -v 1.3.17
780 1 Mehdi Abaakouk
dkms build -m e1000e -v 1.3.17
781 1 Mehdi Abaakouk
dkms install -m e1000e -v 1.3.17
782 1 Mehdi Abaakouk
reboot
783 1 Mehdi Abaakouk
</pre>
784 1 Mehdi Abaakouk
785 1 Mehdi Abaakouk
786 13 Mehdi Abaakouk
h2. Annexe 
787 13 Mehdi Abaakouk
788 13 Mehdi Abaakouk
h3. Configuration réseau
789 13 Mehdi Abaakouk
790 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)
791 1 Mehdi Abaakouk
le script /etc/rc.local.conf, contient les adresses IP de la machine et les gw
792 11 Mehdi Abaakouk
793 11 Mehdi Abaakouk
h3. Protection VNC
794 11 Mehdi Abaakouk
795 11 Mehdi Abaakouk
Le VNC de kvm est utiliser sur chaque MV.
796 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
797 11 Mehdi Abaakouk
Ce script est appelé par les hooks ganeti.
798 11 Mehdi Abaakouk
799 11 Mehdi Abaakouk
h3. Mac spoofing configuration (Actuellement désactivé)
800 1 Mehdi Abaakouk
801 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.
802 1 Mehdi Abaakouk
Le fichier prends la forme suivante:
803 1 Mehdi Abaakouk
munin.tetaneutral.net:0:tap3
804 1 Mehdi Abaakouk
trac.tetaneutral.net:0:tap5
805 1 Mehdi Abaakouk
munin.tetaneutral.net:1:tap5
806 1 Mehdi Abaakouk
Les règles ebtables sont écrites par le script /etc/ganeti/spoofing/spoofing-protection avec les informations de ce fichier.
807 1 Mehdi Abaakouk
Les scripts de hook de ganeti (ie:/etc/ganeti/hook/) utilise ce script, pour lancer ou arreter le spoofing.
808 11 Mehdi Abaakouk
809 33 Mehdi Abaakouk
h3. Debootstrap du nouvelle ubuntu >= oneiric:
810 33 Mehdi Abaakouk
811 33 Mehdi Abaakouk
pour les ubuntu oneiric, precise et supérieur il faut créer des liens symbolique pour debootstrap:
812 33 Mehdi Abaakouk
813 33 Mehdi Abaakouk
<pre>
814 33 Mehdi Abaakouk
cd /usr/share/debootstrap/scripts
815 33 Mehdi Abaakouk
ln -s gutsy oneiric
816 33 Mehdi Abaakouk
ln -s gutsy precise
817 33 Mehdi Abaakouk
</pre>
818 33 Mehdi Abaakouk
819 33 Mehdi Abaakouk
ensuite la variante peux être ajouter à ganeti-instace-debootstrap dans /etc/ganeti/instace-debootstrap/variants/...
820 33 Mehdi Abaakouk
821 1 Mehdi Abaakouk
h3. Patch maison pour ganeti
822 11 Mehdi Abaakouk
823 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
824 1 Mehdi Abaakouk
Celui-ci est décrit dans l'installation d'une node aussi.
825 11 Mehdi Abaakouk
826 1 Mehdi Abaakouk
h3. J'ai n'est pas trouvé mon bonheur, comment je vais faire ?!
827 11 Mehdi Abaakouk
828 11 Mehdi Abaakouk
Voici quelques ressources:
829 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/current/html/
830 11 Mehdi Abaakouk
* http://docs.ganeti.org/ganeti/2.1/man/
831 11 Mehdi Abaakouk
* http://wiki.osuosl.org/public/ganeti/
832 1 Mehdi Abaakouk
Ou bien je demande à sileht d'écrire le use case qui me manque s'il à le temps
833 45 Laurent GUERBY
834 45 Laurent GUERBY
h3. Tuning IO
835 45 Laurent GUERBY
836 45 Laurent GUERBY
<pre>
837 45 Laurent GUERBY
KVM_DISKS="WDC_WD20EARS-00_WD-WMAZA0732072"
838 45 Laurent GUERBY
839 45 Laurent GUERBY
for diskname in $KVM_DISKS ; do
840 45 Laurent GUERBY
	disk=$(basename $(readlink -e /dev/disk/by-id/scsi-SATA_$diskname) 2>/dev/null)
841 45 Laurent GUERBY
	[ -z "$disk" -o ! -d "/sys/block/$disk" ] && continue
842 45 Laurent GUERBY
	echo deadline > /sys/block/${disk}/queue/scheduler
843 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/fifo_batch
844 45 Laurent GUERBY
	echo 0 > /sys/block/${disk}/queue/iosched/front_merges
845 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/read_expire
846 45 Laurent GUERBY
	echo 2 > /sys/block/${disk}/queue/iosched/write_expire
847 45 Laurent GUERBY
	echo 1 > /sys/block/${disk}/queue/iosched/writes_starved
848 45 Laurent GUERBY
done
849 45 Laurent GUERBY
</pre>
850 52 Fabien Dupont
851 52 Fabien Dupont
h3. Hooks
852 52 Fabien Dupont
853 54 Fabien Dupont
h4. Généralités
854 54 Fabien Dupont
855 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.
856 53 Fabien Dupont
857 53 Fabien Dupont
Un hook a la forme suivante :
858 53 Fabien Dupont
859 53 Fabien Dupont
<pre>
860 53 Fabien Dupont
#!/bin/bash
861 53 Fabien Dupont
862 53 Fabien Dupont
set -e
863 53 Fabien Dupont
864 53 Fabien Dupont
. common.sh
865 53 Fabien Dupont
866 53 Fabien Dupont
CLEANUP=( )
867 53 Fabien Dupont
set -x
868 53 Fabien Dupont
trap cleanup EXIT
869 53 Fabien Dupont
870 53 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
871 53 Fabien Dupont
  echo "Missing target directory"
872 53 Fabien Dupont
  exit 1
873 53 Fabien Dupont
fi
874 53 Fabien Dupont
875 53 Fabien Dupont
# Vos modifs ici
876 53 Fabien Dupont
# $TARGET contient le chemin, sur l'hôte, où est monté le disque dur de la VM
877 53 Fabien Dupont
878 53 Fabien Dupont
cleanup
879 53 Fabien Dupont
trap - EXIT
880 53 Fabien Dupont
881 53 Fabien Dupont
exit 0
882 53 Fabien Dupont
</pre>
883 53 Fabien Dupont
884 53 Fabien Dupont
Les hooks sont séparés en fichiers, un par « fonction », afin d'encourage la réutilisation.
885 1 Mehdi Abaakouk
886 54 Fabien Dupont
h4. Exemple de hook : Installation d'extlinux en tant que bootloader
887 52 Fabien Dupont
888 52 Fabien Dupont
<pre>
889 52 Fabien Dupont
#!/bin/bash
890 52 Fabien Dupont
891 52 Fabien Dupont
set -e
892 52 Fabien Dupont
893 52 Fabien Dupont
. common.sh
894 52 Fabien Dupont
895 52 Fabien Dupont
CLEANUP=( )
896 52 Fabien Dupont
set -x
897 52 Fabien Dupont
trap cleanup EXIT
898 52 Fabien Dupont
899 52 Fabien Dupont
if [ -z "$TARGET" -o ! -d "$TARGET" ]; then
900 52 Fabien Dupont
  echo "Missing target directory"
901 52 Fabien Dupont
  exit 1
902 52 Fabien Dupont
fi
903 52 Fabien Dupont
904 52 Fabien Dupont
# allow extlinux to find device
905 52 Fabien Dupont
mount --bind /dev $TARGET/dev
906 52 Fabien Dupont
CLEANUP+=("umount $TARGET/dev")
907 52 Fabien Dupont
mount --bind /proc $TARGET/proc
908 52 Fabien Dupont
CLEANUP+=("umount $TARGET/proc")
909 52 Fabien Dupont
910 52 Fabien Dupont
# generate configuration
911 52 Fabien Dupont
echo 'EXTLINUX_PARAMETERS="ro console=ttyS0,38400n8"' > $TARGET/etc/default/extlinux
912 52 Fabien Dupont
chroot "$TARGET" extlinux-update
913 52 Fabien Dupont
914 52 Fabien Dupont
# install extlinux
915 52 Fabien Dupont
chroot "$TARGET" extlinux -i /boot/extlinux
916 52 Fabien Dupont
917 52 Fabien Dupont
# install boot record
918 52 Fabien Dupont
dd if="$TARGET/usr/lib/extlinux/mbr.bin" of=$BLOCKDEV
919 52 Fabien Dupont
920 52 Fabien Dupont
cleanup
921 52 Fabien Dupont
trap - EXIT
922 52 Fabien Dupont
923 52 Fabien Dupont
exit 0
924 52 Fabien Dupont
</pre>