Project

General

Profile

Cluster Ganeti » History » Version 59

Laurent GUERBY, 06/25/2013 11:31 AM

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