Statistics
| Branch: | Tag: | Revision:

root / doc / walkthrough.rst @ 2a50e2e8

History | View | Annotate | Download (43 kB)

1
Ganeti walk-through
2
===================
3

    
4
Documents Ganeti version |version|
5

    
6
.. contents::
7

    
8
.. highlight:: text
9

    
10
Introduction
11
------------
12

    
13
This document serves as a more example-oriented guide to Ganeti; while
14
the administration guide shows a conceptual approach, here you will find
15
a step-by-step example to managing instances and the cluster.
16

    
17
Our simulated, example cluster will have three machines, named
18
``node1``, ``node2``, ``node3``. Note that in real life machines will
19
usually FQDNs but here we use short names for brevity. We will use a
20
secondary network for replication data, ``192.0.2.0/24``, with nodes
21
having the last octet the same as their index. The cluster name will be
22
``example-cluster``. All nodes have the same simulated hardware
23
configuration, two disks of 750GB, 32GB of memory and 4 CPUs.
24

    
25
On this cluster, we will create up to seven instances, named
26
``instance1`` to ``instance7``.
27

    
28

    
29
Cluster creation
30
----------------
31

    
32
Follow the :doc:`install` document and prepare the nodes. Then it's time
33
to initialise the cluster::
34

    
35
  node1# gnt-cluster init -s 192.0.2.1 --enabled-hypervisors=xen-pvm example-cluster
36
  node1#
37

    
38
The creation was fine. Let's check that one node we have is functioning
39
correctly::
40

    
41
  node1# gnt-node list
42
  Node  DTotal DFree MTotal MNode MFree Pinst Sinst
43
  node1   1.3T  1.3T  32.0G  1.0G 30.5G     0     0
44
  node1# gnt-cluster verify
45
  Mon Oct 26 02:08:51 2009 * Verifying global settings
46
  Mon Oct 26 02:08:51 2009 * Gathering data (1 nodes)
47
  Mon Oct 26 02:08:52 2009 * Verifying node status
48
  Mon Oct 26 02:08:52 2009 * Verifying instance status
49
  Mon Oct 26 02:08:52 2009 * Verifying orphan volumes
50
  Mon Oct 26 02:08:52 2009 * Verifying remaining instances
51
  Mon Oct 26 02:08:52 2009 * Verifying N+1 Memory redundancy
52
  Mon Oct 26 02:08:52 2009 * Other Notes
53
  Mon Oct 26 02:08:52 2009 * Hooks Results
54
  node1#
55

    
56
Since this proceeded correctly, let's add the other two nodes::
57

    
58
  node1# gnt-node add -s 192.0.2.2 node2
59
  -- WARNING --
60
  Performing this operation is going to replace the ssh daemon keypair
61
  on the target machine (node2) with the ones of the current one
62
  and grant full intra-cluster ssh root access to/from it
63

    
64
  The authenticity of host 'node2 (192.0.2.2)' can't be established.
65
  RSA key fingerprint is 9f:…
66
  Are you sure you want to continue connecting (yes/no)? yes
67
  root@node2's password:
68
  Mon Oct 26 02:11:54 2009  - INFO: Node will be a master candidate
69
  node1# gnt-node add -s 192.0.2.3 node3
70
  -- WARNING --
71
  Performing this operation is going to replace the ssh daemon keypair
72
  on the target machine (node2) with the ones of the current one
73
  and grant full intra-cluster ssh root access to/from it
74

    
75
  The authenticity of host 'node3 (192.0.2.3)' can't be established.
76
  RSA key fingerprint is 9f:…
77
  Are you sure you want to continue connecting (yes/no)? yes
78
  root@node2's password:
79
  Mon Oct 26 02:11:54 2009  - INFO: Node will be a master candidate
80

    
81
Checking the cluster status again::
82

    
83
  node1# gnt-node list
84
  Node  DTotal DFree MTotal MNode MFree Pinst Sinst
85
  node1   1.3T  1.3T  32.0G  1.0G 30.5G     0     0
86
  node2   1.3T  1.3T  32.0G  1.0G 30.5G     0     0
87
  node3   1.3T  1.3T  32.0G  1.0G 30.5G     0     0
88
  node1# gnt-cluster verify
89
  Mon Oct 26 02:15:14 2009 * Verifying global settings
90
  Mon Oct 26 02:15:14 2009 * Gathering data (3 nodes)
91
  Mon Oct 26 02:15:16 2009 * Verifying node status
92
  Mon Oct 26 02:15:16 2009 * Verifying instance status
93
  Mon Oct 26 02:15:16 2009 * Verifying orphan volumes
94
  Mon Oct 26 02:15:16 2009 * Verifying remaining instances
95
  Mon Oct 26 02:15:16 2009 * Verifying N+1 Memory redundancy
96
  Mon Oct 26 02:15:16 2009 * Other Notes
97
  Mon Oct 26 02:15:16 2009 * Hooks Results
98
  node1#
99

    
100
And let's check that we have a valid OS::
101

    
102
  node1# gnt-os list
103
  Name
104
  debootstrap
105
  node1#
106

    
107
Running a burn-in
108
-----------------
109

    
110
Now that the cluster is created, it is time to check that the hardware
111
works correctly, that the hypervisor can actually create instances,
112
etc. This is done via the debootstrap tool as described in the admin
113
guide. Similar output lines are replaced with ``…`` in the below log::
114

    
115
  node1# /usr/lib/ganeti/tools/burnin -o debootstrap -p instance{1..5}
116
  - Testing global parameters
117
  - Creating instances
118
    * instance instance1
119
      on node1, node2
120
    * instance instance2
121
      on node2, node3
122
123
    * instance instance5
124
      on node2, node3
125
    * Submitted job ID(s) 157, 158, 159, 160, 161
126
      waiting for job 157 for instance1
127
128
      waiting for job 161 for instance5
129
  - Replacing disks on the same nodes
130
    * instance instance1
131
      run replace_on_secondary
132
      run replace_on_primary
133
134
    * instance instance5
135
      run replace_on_secondary
136
      run replace_on_primary
137
    * Submitted job ID(s) 162, 163, 164, 165, 166
138
      waiting for job 162 for instance1
139
140
  - Changing the secondary node
141
    * instance instance1
142
      run replace_new_secondary node3
143
    * instance instance2
144
      run replace_new_secondary node1
145
146
    * instance instance5
147
      run replace_new_secondary node1
148
    * Submitted job ID(s) 167, 168, 169, 170, 171
149
      waiting for job 167 for instance1
150
151
  - Growing disks
152
    * instance instance1
153
      increase disk/0 by 128 MB
154
155
    * instance instance5
156
      increase disk/0 by 128 MB
157
    * Submitted job ID(s) 173, 174, 175, 176, 177
158
      waiting for job 173 for instance1
159
160
  - Failing over instances
161
    * instance instance1
162
163
    * instance instance5
164
    * Submitted job ID(s) 179, 180, 181, 182, 183
165
      waiting for job 179 for instance1
166
167
  - Migrating instances
168
    * instance instance1
169
      migration and migration cleanup
170
171
    * instance instance5
172
      migration and migration cleanup
173
    * Submitted job ID(s) 184, 185, 186, 187, 188
174
      waiting for job 184 for instance1
175
176
  - Exporting and re-importing instances
177
    * instance instance1
178
      export to node node3
179
      remove instance
180
      import from node3 to node1, node2
181
      remove export
182
183
    * instance instance5
184
      export to node node1
185
      remove instance
186
      import from node1 to node2, node3
187
      remove export
188
    * Submitted job ID(s) 196, 197, 198, 199, 200
189
      waiting for job 196 for instance1
190
191
  - Reinstalling instances
192
    * instance instance1
193
      reinstall without passing the OS
194
      reinstall specifying the OS
195
196
    * instance instance5
197
      reinstall without passing the OS
198
      reinstall specifying the OS
199
    * Submitted job ID(s) 203, 204, 205, 206, 207
200
      waiting for job 203 for instance1
201
202
  - Rebooting instances
203
    * instance instance1
204
      reboot with type 'hard'
205
      reboot with type 'soft'
206
      reboot with type 'full'
207
208
    * instance instance5
209
      reboot with type 'hard'
210
      reboot with type 'soft'
211
      reboot with type 'full'
212
    * Submitted job ID(s) 208, 209, 210, 211, 212
213
      waiting for job 208 for instance1
214
215
  - Adding and removing disks
216
    * instance instance1
217
      adding a disk
218
      removing last disk
219
220
    * instance instance5
221
      adding a disk
222
      removing last disk
223
    * Submitted job ID(s) 213, 214, 215, 216, 217
224
      waiting for job 213 for instance1
225
226
  - Adding and removing NICs
227
    * instance instance1
228
      adding a NIC
229
      removing last NIC
230
231
    * instance instance5
232
      adding a NIC
233
      removing last NIC
234
    * Submitted job ID(s) 218, 219, 220, 221, 222
235
      waiting for job 218 for instance1
236
237
  - Activating/deactivating disks
238
    * instance instance1
239
      activate disks when online
240
      activate disks when offline
241
      deactivate disks (when offline)
242
243
    * instance instance5
244
      activate disks when online
245
      activate disks when offline
246
      deactivate disks (when offline)
247
    * Submitted job ID(s) 223, 224, 225, 226, 227
248
      waiting for job 223 for instance1
249
250
  - Stopping and starting instances
251
    * instance instance1
252
253
    * instance instance5
254
    * Submitted job ID(s) 230, 231, 232, 233, 234
255
      waiting for job 230 for instance1
256
257
  - Removing instances
258
    * instance instance1
259
260
    * instance instance5
261
    * Submitted job ID(s) 235, 236, 237, 238, 239
262
      waiting for job 235 for instance1
263
264
  node1#
265

    
266
You can see in the above what operations the burn-in does. Ideally, the
267
burn-in log would proceed successfully through all the steps and end
268
cleanly, without throwing errors.
269

    
270
Instance operations
271
-------------------
272

    
273
Creation
274
++++++++
275

    
276
At this point, Ganeti and the hardware seems to be functioning
277
correctly, so we'll follow up with creating the instances manually::
278

    
279
  node1# gnt-instance add -t drbd -o debootstrap -s 256m -n node1:node2 instance3
280
  Mon Oct 26 04:06:52 2009  - INFO: Selected nodes for instance instance1 via iallocator hail: node2, node3
281
  Mon Oct 26 04:06:53 2009 * creating instance disks...
282
  Mon Oct 26 04:06:57 2009 adding instance instance1 to cluster config
283
  Mon Oct 26 04:06:57 2009  - INFO: Waiting for instance instance1 to sync disks.
284
  Mon Oct 26 04:06:57 2009  - INFO: - device disk/0: 20.00% done, 4 estimated seconds remaining
285
  Mon Oct 26 04:07:01 2009  - INFO: Instance instance1's disks are in sync.
286
  Mon Oct 26 04:07:01 2009 creating os for instance instance1 on node node2
287
  Mon Oct 26 04:07:01 2009 * running the instance OS create scripts...
288
  Mon Oct 26 04:07:14 2009 * starting instance...
289
  node1# gnt-instance add -t drbd -o debootstrap -s 256m -n node1:node2 instanc<drbd -o debootstrap -s 256m -n node1:node2 instance2
290
  Mon Oct 26 04:11:37 2009 * creating instance disks...
291
  Mon Oct 26 04:11:40 2009 adding instance instance2 to cluster config
292
  Mon Oct 26 04:11:41 2009  - INFO: Waiting for instance instance2 to sync disks.
293
  Mon Oct 26 04:11:41 2009  - INFO: - device disk/0: 35.40% done, 1 estimated seconds remaining
294
  Mon Oct 26 04:11:42 2009  - INFO: - device disk/0: 58.50% done, 1 estimated seconds remaining
295
  Mon Oct 26 04:11:43 2009  - INFO: - device disk/0: 86.20% done, 0 estimated seconds remaining
296
  Mon Oct 26 04:11:44 2009  - INFO: - device disk/0: 92.40% done, 0 estimated seconds remaining
297
  Mon Oct 26 04:11:44 2009  - INFO: - device disk/0: 97.00% done, 0 estimated seconds remaining
298
  Mon Oct 26 04:11:44 2009  - INFO: Instance instance2's disks are in sync.
299
  Mon Oct 26 04:11:44 2009 creating os for instance instance2 on node node1
300
  Mon Oct 26 04:11:44 2009 * running the instance OS create scripts...
301
  Mon Oct 26 04:11:57 2009 * starting instance...
302
  node1#
303

    
304
The above shows one instance created via an iallocator script, and one
305
being created with manual node assignment. The other three instances
306
were also created and now it's time to check them::
307

    
308
  node1# gnt-instance list
309
  Instance  Hypervisor OS          Primary_node Status  Memory
310
  instance1 xen-pvm    debootstrap node2        running   128M
311
  instance2 xen-pvm    debootstrap node1        running   128M
312
  instance3 xen-pvm    debootstrap node1        running   128M
313
  instance4 xen-pvm    debootstrap node3        running   128M
314
  instance5 xen-pvm    debootstrap node2        running   128M
315

    
316
Accessing instances
317
+++++++++++++++++++
318

    
319
Accessing an instance's console is easy::
320

    
321
  node1# gnt-instance console instance2
322
  [    0.000000] Bootdata ok (command line is root=/dev/sda1 ro)
323
  [    0.000000] Linux version 2.6…
324
  [    0.000000] BIOS-provided physical RAM map:
325
  [    0.000000]  Xen: 0000000000000000 - 0000000008800000 (usable)
326
  [13138176.018071] Built 1 zonelists.  Total pages: 34816
327
  [13138176.018074] Kernel command line: root=/dev/sda1 ro
328
  [13138176.018694] Initializing CPU#0
329
330
  Checking file systems...fsck 1.41.3 (12-Oct-2008)
331
  done.
332
  Setting kernel variables (/etc/sysctl.conf)...done.
333
  Mounting local filesystems...done.
334
  Activating swapfile swap...done.
335
  Setting up networking....
336
  Configuring network interfaces...done.
337
  Setting console screen modes and fonts.
338
  INIT: Entering runlevel: 2
339
  Starting enhanced syslogd: rsyslogd.
340
  Starting periodic command scheduler: crond.
341

    
342
  Debian GNU/Linux 5.0 instance2 tty1
343

    
344
  instance2 login:
345

    
346
At this moment you can login to the instance and, after configuring the
347
network (and doing this on all instances), we can check their
348
connectivity::
349

    
350
  node1# fping instance{1..5}
351
  instance1 is alive
352
  instance2 is alive
353
  instance3 is alive
354
  instance4 is alive
355
  instance5 is alive
356
  node1#
357

    
358
Removal
359
+++++++
360

    
361
Removing unwanted instances is also easy::
362

    
363
  node1# gnt-instance remove instance5
364
  This will remove the volumes of the instance instance5 (including
365
  mirrors), thus removing all the data of the instance. Continue?
366
  y/[n]/?: y
367
  node1#
368

    
369

    
370
Recovering from hardware failures
371
---------------------------------
372

    
373
Recovering from node failure
374
++++++++++++++++++++++++++++
375

    
376
We are now left with four instances. Assume that at this point, node3,
377
which has one primary and one secondary instance, crashes::
378

    
379
  node1# gnt-node info node3
380
  Node name: node3
381
    primary ip: 198.51.100.1
382
    secondary ip: 192.0.2.3
383
    master candidate: True
384
    drained: False
385
    offline: False
386
    primary for instances:
387
      - instance4
388
    secondary for instances:
389
      - instance1
390
  node1# fping node3
391
  node3 is unreachable
392

    
393
At this point, the primary instance of that node (instance4) is down,
394
but the secondary instance (instance1) is not affected except it has
395
lost disk redundancy::
396

    
397
  node1# fping instance{1,4}
398
  instance1 is alive
399
  instance4 is unreachable
400
  node1#
401

    
402
If we try to check the status of instance4 via the instance info
403
command, it fails because it tries to contact node3 which is down::
404

    
405
  node1# gnt-instance info instance4
406
  Failure: command execution error:
407
  Error checking node node3: Connection failed (113: No route to host)
408
  node1#
409

    
410
So we need to mark node3 as being *offline*, and thus Ganeti won't talk
411
to it anymore::
412

    
413
  node1# gnt-node modify -O yes -f node3
414
  Mon Oct 26 04:34:12 2009  - WARNING: Not enough master candidates (desired 10, new value will be 2)
415
  Mon Oct 26 04:34:15 2009  - WARNING: Communication failure to node node3: Connection failed (113: No route to host)
416
  Modified node node3
417
   - offline -> True
418
   - master_candidate -> auto-demotion due to offline
419
  node1#
420

    
421
And now we can failover the instance::
422

    
423
  node1# gnt-instance failover --ignore-consistency instance4
424
  Failover will happen to image instance4. This requires a shutdown of
425
  the instance. Continue?
426
  y/[n]/?: y
427
  Mon Oct 26 04:35:34 2009 * checking disk consistency between source and target
428
  Failure: command execution error:
429
  Disk disk/0 is degraded on target node, aborting failover.
430
  node1# gnt-instance failover --ignore-consistency instance4
431
  Failover will happen to image instance4. This requires a shutdown of
432
  the instance. Continue?
433
  y/[n]/?: y
434
  Mon Oct 26 04:35:47 2009 * checking disk consistency between source and target
435
  Mon Oct 26 04:35:47 2009 * shutting down instance on source node
436
  Mon Oct 26 04:35:47 2009  - WARNING: Could not shutdown instance instance4 on node node3. Proceeding anyway. Please make sure node node3 is down. Error details: Node is marked offline
437
  Mon Oct 26 04:35:47 2009 * deactivating the instance's disks on source node
438
  Mon Oct 26 04:35:47 2009  - WARNING: Could not shutdown block device disk/0 on node node3: Node is marked offline
439
  Mon Oct 26 04:35:47 2009 * activating the instance's disks on target node
440
  Mon Oct 26 04:35:47 2009  - WARNING: Could not prepare block device disk/0 on node node3 (is_primary=False, pass=1): Node is marked offline
441
  Mon Oct 26 04:35:48 2009 * starting the instance on the target node
442
  node1#
443

    
444
Note in our first attempt, Ganeti refused to do the failover since it
445
wasn't sure what is the status of the instance's disks. We pass the
446
``--ignore-consistency`` flag and then we can failover::
447

    
448
  node1# gnt-instance list
449
  Instance  Hypervisor OS          Primary_node Status  Memory
450
  instance1 xen-pvm    debootstrap node2        running   128M
451
  instance2 xen-pvm    debootstrap node1        running   128M
452
  instance3 xen-pvm    debootstrap node1        running   128M
453
  instance4 xen-pvm    debootstrap node1        running   128M
454
  node1#
455

    
456
But at this point, both instance1 and instance4 are without disk
457
redundancy::
458

    
459
  node1# gnt-instance info instance1
460
  Instance name: instance1
461
  UUID: 45173e82-d1fa-417c-8758-7d582ab7eef4
462
  Serial number: 2
463
  Creation time: 2009-10-26 04:06:57
464
  Modification time: 2009-10-26 04:07:14
465
  State: configured to be up, actual state is up
466
    Nodes:
467
      - primary: node2
468
      - secondaries: node3
469
    Operating system: debootstrap
470
    Allocated network port: None
471
    Hypervisor: xen-pvm
472
      - root_path: default (/dev/sda1)
473
      - kernel_args: default (ro)
474
      - use_bootloader: default (False)
475
      - bootloader_args: default ()
476
      - bootloader_path: default ()
477
      - kernel_path: default (/boot/vmlinuz-2.6-xenU)
478
      - initrd_path: default ()
479
    Hardware:
480
      - VCPUs: 1
481
      - maxmem: 256MiB
482
      - minmem: 512MiB
483
      - NICs:
484
        - nic/0: MAC: aa:00:00:78:da:63, IP: None, mode: bridged, link: xen-br0
485
    Disks:
486
      - disk/0: drbd8, size 256M
487
        access mode: rw
488
        nodeA:       node2, minor=0
489
        nodeB:       node3, minor=0
490
        port:        11035
491
        auth key:    8e950e3cec6854b0181fbc3a6058657701f2d458
492
        on primary:  /dev/drbd0 (147:0) in sync, status *DEGRADED*
493
        child devices:
494
          - child 0: lvm, size 256M
495
            logical_id: xenvg/22459cf8-117d-4bea-a1aa-791667d07800.disk0_data
496
            on primary: /dev/xenvg/22459cf8-117d-4bea-a1aa-791667d07800.disk0_data (254:0)
497
          - child 1: lvm, size 128M
498
            logical_id: xenvg/22459cf8-117d-4bea-a1aa-791667d07800.disk0_meta
499
            on primary: /dev/xenvg/22459cf8-117d-4bea-a1aa-791667d07800.disk0_meta (254:1)
500

    
501
The output is similar for instance4. In order to recover this, we need
502
to run the node evacuate command which will change from the current
503
secondary node to a new one (in this case, we only have two working
504
nodes, so all instances will be end on nodes one and two)::
505

    
506
  node1# gnt-node evacuate -I hail node3
507
  Relocate instance(s) 'instance1','instance4' from node
508
   node3 using iallocator hail?
509
  y/[n]/?: y
510
  Mon Oct 26 05:05:39 2009  - INFO: Selected new secondary for instance 'instance1': node1
511
  Mon Oct 26 05:05:40 2009  - INFO: Selected new secondary for instance 'instance4': node2
512
  Mon Oct 26 05:05:40 2009 Replacing disk(s) 0 for instance1
513
  Mon Oct 26 05:05:40 2009 STEP 1/6 Check device existence
514
  Mon Oct 26 05:05:40 2009  - INFO: Checking disk/0 on node2
515
  Mon Oct 26 05:05:40 2009  - INFO: Checking volume groups
516
  Mon Oct 26 05:05:40 2009 STEP 2/6 Check peer consistency
517
  Mon Oct 26 05:05:40 2009  - INFO: Checking disk/0 consistency on node node2
518
  Mon Oct 26 05:05:40 2009 STEP 3/6 Allocate new storage
519
  Mon Oct 26 05:05:40 2009  - INFO: Adding new local storage on node1 for disk/0
520
  Mon Oct 26 05:05:41 2009 STEP 4/6 Changing drbd configuration
521
  Mon Oct 26 05:05:41 2009  - INFO: activating a new drbd on node1 for disk/0
522
  Mon Oct 26 05:05:42 2009  - INFO: Shutting down drbd for disk/0 on old node
523
  Mon Oct 26 05:05:42 2009  - WARNING: Failed to shutdown drbd for disk/0 on oldnode: Node is marked offline
524
  Mon Oct 26 05:05:42 2009       Hint: Please cleanup this device manually as soon as possible
525
  Mon Oct 26 05:05:42 2009  - INFO: Detaching primary drbds from the network (=> standalone)
526
  Mon Oct 26 05:05:42 2009  - INFO: Updating instance configuration
527
  Mon Oct 26 05:05:45 2009  - INFO: Attaching primary drbds to new secondary (standalone => connected)
528
  Mon Oct 26 05:05:46 2009 STEP 5/6 Sync devices
529
  Mon Oct 26 05:05:46 2009  - INFO: Waiting for instance instance1 to sync disks.
530
  Mon Oct 26 05:05:46 2009  - INFO: - device disk/0: 13.90% done, 7 estimated seconds remaining
531
  Mon Oct 26 05:05:53 2009  - INFO: Instance instance1's disks are in sync.
532
  Mon Oct 26 05:05:53 2009 STEP 6/6 Removing old storage
533
  Mon Oct 26 05:05:53 2009  - INFO: Remove logical volumes for 0
534
  Mon Oct 26 05:05:53 2009  - WARNING: Can't remove old LV: Node is marked offline
535
  Mon Oct 26 05:05:53 2009       Hint: remove unused LVs manually
536
  Mon Oct 26 05:05:53 2009  - WARNING: Can't remove old LV: Node is marked offline
537
  Mon Oct 26 05:05:53 2009       Hint: remove unused LVs manually
538
  Mon Oct 26 05:05:53 2009 Replacing disk(s) 0 for instance4
539
  Mon Oct 26 05:05:53 2009 STEP 1/6 Check device existence
540
  Mon Oct 26 05:05:53 2009  - INFO: Checking disk/0 on node1
541
  Mon Oct 26 05:05:53 2009  - INFO: Checking volume groups
542
  Mon Oct 26 05:05:53 2009 STEP 2/6 Check peer consistency
543
  Mon Oct 26 05:05:53 2009  - INFO: Checking disk/0 consistency on node node1
544
  Mon Oct 26 05:05:54 2009 STEP 3/6 Allocate new storage
545
  Mon Oct 26 05:05:54 2009  - INFO: Adding new local storage on node2 for disk/0
546
  Mon Oct 26 05:05:54 2009 STEP 4/6 Changing drbd configuration
547
  Mon Oct 26 05:05:54 2009  - INFO: activating a new drbd on node2 for disk/0
548
  Mon Oct 26 05:05:55 2009  - INFO: Shutting down drbd for disk/0 on old node
549
  Mon Oct 26 05:05:55 2009  - WARNING: Failed to shutdown drbd for disk/0 on oldnode: Node is marked offline
550
  Mon Oct 26 05:05:55 2009       Hint: Please cleanup this device manually as soon as possible
551
  Mon Oct 26 05:05:55 2009  - INFO: Detaching primary drbds from the network (=> standalone)
552
  Mon Oct 26 05:05:55 2009  - INFO: Updating instance configuration
553
  Mon Oct 26 05:05:55 2009  - INFO: Attaching primary drbds to new secondary (standalone => connected)
554
  Mon Oct 26 05:05:56 2009 STEP 5/6 Sync devices
555
  Mon Oct 26 05:05:56 2009  - INFO: Waiting for instance instance4 to sync disks.
556
  Mon Oct 26 05:05:56 2009  - INFO: - device disk/0: 12.40% done, 8 estimated seconds remaining
557
  Mon Oct 26 05:06:04 2009  - INFO: Instance instance4's disks are in sync.
558
  Mon Oct 26 05:06:04 2009 STEP 6/6 Removing old storage
559
  Mon Oct 26 05:06:04 2009  - INFO: Remove logical volumes for 0
560
  Mon Oct 26 05:06:04 2009  - WARNING: Can't remove old LV: Node is marked offline
561
  Mon Oct 26 05:06:04 2009       Hint: remove unused LVs manually
562
  Mon Oct 26 05:06:04 2009  - WARNING: Can't remove old LV: Node is marked offline
563
  Mon Oct 26 05:06:04 2009       Hint: remove unused LVs manually
564
  node1#
565

    
566
And now node3 is completely free of instances and can be repaired::
567

    
568
  node1# gnt-node list
569
  Node  DTotal DFree MTotal MNode MFree Pinst Sinst
570
  node1   1.3T  1.3T  32.0G  1.0G 30.2G     3     1
571
  node2   1.3T  1.3T  32.0G  1.0G 30.4G     1     3
572
  node3      ?     ?      ?     ?     ?     0     0
573

    
574
Re-adding a node to the cluster
575
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
576

    
577

    
578
Let's say node3 has been repaired and is now ready to be
579
reused. Re-adding it is simple::
580

    
581
  node1# gnt-node add --readd node3
582
  The authenticity of host 'node3 (198.51.100.1)' can't be established.
583
  RSA key fingerprint is 9f:2e:5a:2e:e0:bd:00:09:e4:5c:32:f2:27:57:7a:f4.
584
  Are you sure you want to continue connecting (yes/no)? yes
585
  Mon Oct 26 05:27:39 2009  - INFO: Readding a node, the offline/drained flags were reset
586
  Mon Oct 26 05:27:39 2009  - INFO: Node will be a master candidate
587

    
588
And it is now working again::
589

    
590
  node1# gnt-node list
591
  Node  DTotal DFree MTotal MNode MFree Pinst Sinst
592
  node1   1.3T  1.3T  32.0G  1.0G 30.2G     3     1
593
  node2   1.3T  1.3T  32.0G  1.0G 30.4G     1     3
594
  node3   1.3T  1.3T  32.0G  1.0G 30.4G     0     0
595

    
596
.. note:: If Ganeti has been built with the htools
597
   component enabled, you can shuffle the instances around to have a
598
   better use of the nodes.
599

    
600
Disk failures
601
+++++++++++++
602

    
603
A disk failure is simpler than a full node failure. First, a single disk
604
failure should not cause data-loss for any redundant instance; only the
605
performance of some instances might be reduced due to more network
606
traffic.
607

    
608
Let take the cluster status in the above listing, and check what volumes
609
are in use::
610

    
611
  node1# gnt-node volumes -o phys,instance node2
612
  PhysDev   Instance
613
  /dev/sdb1 instance4
614
  /dev/sdb1 instance4
615
  /dev/sdb1 instance1
616
  /dev/sdb1 instance1
617
  /dev/sdb1 instance3
618
  /dev/sdb1 instance3
619
  /dev/sdb1 instance2
620
  /dev/sdb1 instance2
621
  node1#
622

    
623
You can see that all instances on node2 have logical volumes on
624
``/dev/sdb1``. Let's simulate a disk failure on that disk::
625

    
626
  node1# ssh node2
627
  node2# echo offline > /sys/block/sdb/device/state
628
  node2# vgs
629
    /dev/sdb1: read failed after 0 of 4096 at 0: Input/output error
630
    /dev/sdb1: read failed after 0 of 4096 at 750153695232: Input/output error
631
    /dev/sdb1: read failed after 0 of 4096 at 0: Input/output error
632
    Couldn't find device with uuid '954bJA-mNL0-7ydj-sdpW-nc2C-ZrCi-zFp91c'.
633
    Couldn't find all physical volumes for volume group xenvg.
634
    /dev/sdb1: read failed after 0 of 4096 at 0: Input/output error
635
    /dev/sdb1: read failed after 0 of 4096 at 0: Input/output error
636
    Couldn't find device with uuid '954bJA-mNL0-7ydj-sdpW-nc2C-ZrCi-zFp91c'.
637
    Couldn't find all physical volumes for volume group xenvg.
638
    Volume group xenvg not found
639
  node2#
640

    
641
At this point, the node is broken and if we are to examine
642
instance2 we get (simplified output shown)::
643

    
644
  node1# gnt-instance info instance2
645
  Instance name: instance2
646
  State: configured to be up, actual state is up
647
    Nodes:
648
      - primary: node1
649
      - secondaries: node2
650
    Disks:
651
      - disk/0: drbd8, size 256M
652
        on primary:   /dev/drbd0 (147:0) in sync, status ok
653
        on secondary: /dev/drbd1 (147:1) in sync, status *DEGRADED* *MISSING DISK*
654

    
655
This instance has a secondary only on node2. Let's verify a primary
656
instance of node2::
657

    
658
  node1# gnt-instance info instance1
659
  Instance name: instance1
660
  State: configured to be up, actual state is up
661
    Nodes:
662
      - primary: node2
663
      - secondaries: node1
664
    Disks:
665
      - disk/0: drbd8, size 256M
666
        on primary:   /dev/drbd0 (147:0) in sync, status *DEGRADED* *MISSING DISK*
667
        on secondary: /dev/drbd3 (147:3) in sync, status ok
668
  node1# gnt-instance console instance1
669

    
670
  Debian GNU/Linux 5.0 instance1 tty1
671

    
672
  instance1 login: root
673
  Last login: Tue Oct 27 01:24:09 UTC 2009 on tty1
674
  instance1:~# date > test
675
  instance1:~# sync
676
  instance1:~# cat test
677
  Tue Oct 27 01:25:20 UTC 2009
678
  instance1:~# dmesg|tail
679
  [5439785.235448] NET: Registered protocol family 15
680
  [5439785.235489] 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
681
  [5439785.235495] All bugs added by David S. Miller <davem@redhat.com>
682
  [5439785.235517] XENBUS: Device with no driver: device/console/0
683
  [5439785.236576] kjournald starting.  Commit interval 5 seconds
684
  [5439785.236588] EXT3-fs: mounted filesystem with ordered data mode.
685
  [5439785.236625] VFS: Mounted root (ext3 filesystem) readonly.
686
  [5439785.236663] Freeing unused kernel memory: 172k freed
687
  [5439787.533779] EXT3 FS on sda1, internal journal
688
  [5440655.065431] eth0: no IPv6 routers present
689
  instance1:~#
690

    
691
As you can see, the instance is running fine and doesn't see any disk
692
issues. It is now time to fix node2 and re-establish redundancy for the
693
involved instances.
694

    
695
.. note:: For Ganeti 2.0 we need to fix manually the volume group on
696
   node2 by running ``vgreduce --removemissing xenvg``
697

    
698
::
699

    
700
  node1# gnt-node repair-storage node2 lvm-vg xenvg
701
  Mon Oct 26 18:14:03 2009 Repairing storage unit 'xenvg' on node2 ...
702
  node1# ssh node2 vgs
703
    VG    #PV #LV #SN Attr   VSize   VFree
704
    xenvg   1   8   0 wz--n- 673.84G 673.84G
705
  node1#
706

    
707
This has removed the 'bad' disk from the volume group, which is now left
708
with only one PV. We can now replace the disks for the involved
709
instances::
710

    
711
  node1# for i in instance{1..4}; do gnt-instance replace-disks -a $i; done
712
  Mon Oct 26 18:15:38 2009 Replacing disk(s) 0 for instance1
713
  Mon Oct 26 18:15:38 2009 STEP 1/6 Check device existence
714
  Mon Oct 26 18:15:38 2009  - INFO: Checking disk/0 on node1
715
  Mon Oct 26 18:15:38 2009  - INFO: Checking disk/0 on node2
716
  Mon Oct 26 18:15:38 2009  - INFO: Checking volume groups
717
  Mon Oct 26 18:15:38 2009 STEP 2/6 Check peer consistency
718
  Mon Oct 26 18:15:38 2009  - INFO: Checking disk/0 consistency on node node1
719
  Mon Oct 26 18:15:39 2009 STEP 3/6 Allocate new storage
720
  Mon Oct 26 18:15:39 2009  - INFO: Adding storage on node2 for disk/0
721
  Mon Oct 26 18:15:39 2009 STEP 4/6 Changing drbd configuration
722
  Mon Oct 26 18:15:39 2009  - INFO: Detaching disk/0 drbd from local storage
723
  Mon Oct 26 18:15:40 2009  - INFO: Renaming the old LVs on the target node
724
  Mon Oct 26 18:15:40 2009  - INFO: Renaming the new LVs on the target node
725
  Mon Oct 26 18:15:40 2009  - INFO: Adding new mirror component on node2
726
  Mon Oct 26 18:15:41 2009 STEP 5/6 Sync devices
727
  Mon Oct 26 18:15:41 2009  - INFO: Waiting for instance instance1 to sync disks.
728
  Mon Oct 26 18:15:41 2009  - INFO: - device disk/0: 12.40% done, 9 estimated seconds remaining
729
  Mon Oct 26 18:15:50 2009  - INFO: Instance instance1's disks are in sync.
730
  Mon Oct 26 18:15:50 2009 STEP 6/6 Removing old storage
731
  Mon Oct 26 18:15:50 2009  - INFO: Remove logical volumes for disk/0
732
  Mon Oct 26 18:15:52 2009 Replacing disk(s) 0 for instance2
733
  Mon Oct 26 18:15:52 2009 STEP 1/6 Check device existence
734
735
  Mon Oct 26 18:16:01 2009 STEP 6/6 Removing old storage
736
  Mon Oct 26 18:16:01 2009  - INFO: Remove logical volumes for disk/0
737
  Mon Oct 26 18:16:02 2009 Replacing disk(s) 0 for instance3
738
  Mon Oct 26 18:16:02 2009 STEP 1/6 Check device existence
739
740
  Mon Oct 26 18:16:09 2009 STEP 6/6 Removing old storage
741
  Mon Oct 26 18:16:09 2009  - INFO: Remove logical volumes for disk/0
742
  Mon Oct 26 18:16:10 2009 Replacing disk(s) 0 for instance4
743
  Mon Oct 26 18:16:10 2009 STEP 1/6 Check device existence
744
745
  Mon Oct 26 18:16:18 2009 STEP 6/6 Removing old storage
746
  Mon Oct 26 18:16:18 2009  - INFO: Remove logical volumes for disk/0
747
  node1#
748

    
749
As this point, all instances should be healthy again.
750

    
751
.. note:: Ganeti 2.0 doesn't have the ``-a`` option to replace-disks, so
752
   for it you have to run the loop twice, once over primary instances
753
   with argument ``-p`` and once secondary instances with argument
754
   ``-s``, but otherwise the operations are similar::
755

    
756
     node1# gnt-instance replace-disks -p instance1
757
758
     node1# for i in instance{2..4}; do gnt-instance replace-disks -s $i; done
759

    
760
Common cluster problems
761
-----------------------
762

    
763
There are a number of small issues that might appear on a cluster that
764
can be solved easily as long as the issue is properly identified. For
765
this exercise we will consider the case of node3, which was broken
766
previously and re-added to the cluster without reinstallation. Running
767
cluster verify on the cluster reports::
768

    
769
  node1# gnt-cluster verify
770
  Mon Oct 26 18:30:08 2009 * Verifying global settings
771
  Mon Oct 26 18:30:08 2009 * Gathering data (3 nodes)
772
  Mon Oct 26 18:30:10 2009 * Verifying node status
773
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: unallocated drbd minor 0 is in use
774
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: unallocated drbd minor 1 is in use
775
  Mon Oct 26 18:30:10 2009 * Verifying instance status
776
  Mon Oct 26 18:30:10 2009   - ERROR: instance instance4: instance should not run on node node3
777
  Mon Oct 26 18:30:10 2009 * Verifying orphan volumes
778
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: volume 22459cf8-117d-4bea-a1aa-791667d07800.disk0_data is unknown
779
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: volume 1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_data is unknown
780
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: volume 1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_meta is unknown
781
  Mon Oct 26 18:30:10 2009   - ERROR: node node3: volume 22459cf8-117d-4bea-a1aa-791667d07800.disk0_meta is unknown
782
  Mon Oct 26 18:30:10 2009 * Verifying remaining instances
783
  Mon Oct 26 18:30:10 2009 * Verifying N+1 Memory redundancy
784
  Mon Oct 26 18:30:10 2009 * Other Notes
785
  Mon Oct 26 18:30:10 2009 * Hooks Results
786
  node1#
787

    
788
Instance status
789
+++++++++++++++
790

    
791
As you can see, *instance4* has a copy running on node3, because we
792
forced the failover when node3 failed. This case is dangerous as the
793
instance will have the same IP and MAC address, wreaking havoc on the
794
network environment and anyone who tries to use it.
795

    
796
Ganeti doesn't directly handle this case. It is recommended to logon to
797
node3 and run::
798

    
799
  node3# xm destroy instance4
800

    
801
Unallocated DRBD minors
802
+++++++++++++++++++++++
803

    
804
There are still unallocated DRBD minors on node3. Again, these are not
805
handled by Ganeti directly and need to be cleaned up via DRBD commands::
806

    
807
  node3# drbdsetup /dev/drbd0 down
808
  node3# drbdsetup /dev/drbd1 down
809
  node3#
810

    
811
Orphan volumes
812
++++++++++++++
813

    
814
At this point, the only remaining problem should be the so-called
815
*orphan* volumes. This can happen also in the case of an aborted
816
disk-replace, or similar situation where Ganeti was not able to recover
817
automatically. Here you need to remove them manually via LVM commands::
818

    
819
  node3# lvremove xenvg
820
  Do you really want to remove active logical volume "22459cf8-117d-4bea-a1aa-791667d07800.disk0_data"? [y/n]: y
821
    Logical volume "22459cf8-117d-4bea-a1aa-791667d07800.disk0_data" successfully removed
822
  Do you really want to remove active logical volume "22459cf8-117d-4bea-a1aa-791667d07800.disk0_meta"? [y/n]: y
823
    Logical volume "22459cf8-117d-4bea-a1aa-791667d07800.disk0_meta" successfully removed
824
  Do you really want to remove active logical volume "1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_data"? [y/n]: y
825
    Logical volume "1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_data" successfully removed
826
  Do you really want to remove active logical volume "1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_meta"? [y/n]: y
827
    Logical volume "1aaf4716-e57f-4101-a8d6-03af5da9dc50.disk0_meta" successfully removed
828
  node3#
829

    
830
At this point cluster verify shouldn't complain anymore::
831

    
832
  node1# gnt-cluster verify
833
  Mon Oct 26 18:37:51 2009 * Verifying global settings
834
  Mon Oct 26 18:37:51 2009 * Gathering data (3 nodes)
835
  Mon Oct 26 18:37:53 2009 * Verifying node status
836
  Mon Oct 26 18:37:53 2009 * Verifying instance status
837
  Mon Oct 26 18:37:53 2009 * Verifying orphan volumes
838
  Mon Oct 26 18:37:53 2009 * Verifying remaining instances
839
  Mon Oct 26 18:37:53 2009 * Verifying N+1 Memory redundancy
840
  Mon Oct 26 18:37:53 2009 * Other Notes
841
  Mon Oct 26 18:37:53 2009 * Hooks Results
842
  node1#
843

    
844
N+1 errors
845
++++++++++
846

    
847
Since redundant instances in Ganeti have a primary/secondary model, it
848
is needed to leave aside on each node enough memory so that if one of
849
its peer node fails, all the secondary instances that have that node as
850
primary can be relocated. More specifically, if instance2 has node1 as
851
primary and node2 as secondary (and node1 and node2 do not have any
852
other instances in this layout), then it means that node2 must have
853
enough free memory so that if node1 fails, we can failover instance2
854
without any other operations (for reducing the downtime window). Let's
855
increase the memory of the current instances to 4G, and add three new
856
instances, two on node2:node3 with 8GB of RAM and one on node1:node2,
857
with 12GB of RAM (numbers chosen so that we run out of memory)::
858

    
859
  node1# gnt-instance modify -B memory=4G instance1
860
  Modified instance instance1
861
   - be/maxmem -> 4096
862
   - be/minmem -> 4096
863
  Please don't forget that these parameters take effect only at the next start of the instance.
864
  node1# gnt-instance modify …
865

    
866
  node1# gnt-instance add -t drbd -n node2:node3 -s 512m -B memory=8G -o debootstrap instance5
867
868
  node1# gnt-instance add -t drbd -n node2:node3 -s 512m -B memory=8G -o debootstrap instance6
869
870
  node1# gnt-instance add -t drbd -n node1:node2 -s 512m -B memory=8G -o debootstrap instance7
871
  node1# gnt-instance reboot --all
872
  The reboot will operate on 7 instances.
873
  Do you want to continue?
874
  Affected instances:
875
    instance1
876
    instance2
877
    instance3
878
    instance4
879
    instance5
880
    instance6
881
    instance7
882
  y/[n]/?: y
883
  Submitted jobs 677, 678, 679, 680, 681, 682, 683
884
  Waiting for job 677 for instance1...
885
  Waiting for job 678 for instance2...
886
  Waiting for job 679 for instance3...
887
  Waiting for job 680 for instance4...
888
  Waiting for job 681 for instance5...
889
  Waiting for job 682 for instance6...
890
  Waiting for job 683 for instance7...
891
  node1#
892

    
893
We rebooted instances for the memory changes to have effect. Now the
894
cluster looks like::
895

    
896
  node1# gnt-node list
897
  Node  DTotal DFree MTotal MNode MFree Pinst Sinst
898
  node1   1.3T  1.3T  32.0G  1.0G  6.5G     4     1
899
  node2   1.3T  1.3T  32.0G  1.0G 10.5G     3     4
900
  node3   1.3T  1.3T  32.0G  1.0G 30.5G     0     2
901
  node1# gnt-cluster verify
902
  Mon Oct 26 18:59:36 2009 * Verifying global settings
903
  Mon Oct 26 18:59:36 2009 * Gathering data (3 nodes)
904
  Mon Oct 26 18:59:37 2009 * Verifying node status
905
  Mon Oct 26 18:59:37 2009 * Verifying instance status
906
  Mon Oct 26 18:59:37 2009 * Verifying orphan volumes
907
  Mon Oct 26 18:59:37 2009 * Verifying remaining instances
908
  Mon Oct 26 18:59:37 2009 * Verifying N+1 Memory redundancy
909
  Mon Oct 26 18:59:37 2009   - ERROR: node node2: not enough memory to accommodate instance failovers should node node1 fail
910
  Mon Oct 26 18:59:37 2009 * Other Notes
911
  Mon Oct 26 18:59:37 2009 * Hooks Results
912
  node1#
913

    
914
The cluster verify error above shows that if node1 fails, node2 will not
915
have enough memory to failover all primary instances on node1 to it. To
916
solve this, you have a number of options:
917

    
918
- try to manually move instances around (but this can become complicated
919
  for any non-trivial cluster)
920
- try to reduce the minimum memory of some instances on the source node
921
  of the N+1 failure (in the example above ``node1``): this will allow
922
  it to start and be failed over/migrated with less than its maximum
923
  memory
924
- try to reduce the runtime/maximum memory of some instances on the
925
  destination node of the N+1 failure (in the example above ``node2``)
926
  to create additional available node memory (check the :doc:`admin`
927
  guide for what Ganeti will and won't automatically do in regards to
928
  instance runtime memory modification)
929
- if Ganeti has been built with the htools package enabled, you can run
930
  the ``hbal`` tool which will try to compute an automated cluster
931
  solution that complies with the N+1 rule
932

    
933
Network issues
934
++++++++++++++
935

    
936
In case a node has problems with the network (usually the secondary
937
network, as problems with the primary network will render the node
938
unusable for ganeti commands), it will show up in cluster verify as::
939

    
940
  node1# gnt-cluster verify
941
  Mon Oct 26 19:07:19 2009 * Verifying global settings
942
  Mon Oct 26 19:07:19 2009 * Gathering data (3 nodes)
943
  Mon Oct 26 19:07:23 2009 * Verifying node status
944
  Mon Oct 26 19:07:23 2009   - ERROR: node node1: tcp communication with node 'node3': failure using the secondary interface(s)
945
  Mon Oct 26 19:07:23 2009   - ERROR: node node2: tcp communication with node 'node3': failure using the secondary interface(s)
946
  Mon Oct 26 19:07:23 2009   - ERROR: node node3: tcp communication with node 'node1': failure using the secondary interface(s)
947
  Mon Oct 26 19:07:23 2009   - ERROR: node node3: tcp communication with node 'node2': failure using the secondary interface(s)
948
  Mon Oct 26 19:07:23 2009   - ERROR: node node3: tcp communication with node 'node3': failure using the secondary interface(s)
949
  Mon Oct 26 19:07:23 2009 * Verifying instance status
950
  Mon Oct 26 19:07:23 2009 * Verifying orphan volumes
951
  Mon Oct 26 19:07:23 2009 * Verifying remaining instances
952
  Mon Oct 26 19:07:23 2009 * Verifying N+1 Memory redundancy
953
  Mon Oct 26 19:07:23 2009 * Other Notes
954
  Mon Oct 26 19:07:23 2009 * Hooks Results
955
  node1#
956

    
957
This shows that both node1 and node2 have problems contacting node3 over
958
the secondary network, and node3 has problems contacting them. From this
959
output is can be deduced that since node1 and node2 can communicate
960
between themselves, node3 is the one having problems, and you need to
961
investigate its network settings/connection.
962

    
963
Migration problems
964
++++++++++++++++++
965

    
966
Since live migration can sometimes fail and leave the instance in an
967
inconsistent state, Ganeti provides a ``--cleanup`` argument to the
968
migrate command that does:
969

    
970
- check on which node the instance is actually running (has the
971
  command failed before or after the actual migration?)
972
- reconfigure the DRBD disks accordingly
973

    
974
It is always safe to run this command as long as the instance has good
975
data on its primary node (i.e. not showing as degraded). If so, you can
976
simply run::
977

    
978
  node1# gnt-instance migrate --cleanup instance1
979
  Instance instance1 will be recovered from a failed migration. Note
980
  that the migration procedure (including cleanup) is **experimental**
981
  in this version. This might impact the instance if anything goes
982
  wrong. Continue?
983
  y/[n]/?: y
984
  Mon Oct 26 19:13:49 2009 Migrating instance instance1
985
  Mon Oct 26 19:13:49 2009 * checking where the instance actually runs (if this hangs, the hypervisor might be in a bad state)
986
  Mon Oct 26 19:13:49 2009 * instance confirmed to be running on its primary node (node2)
987
  Mon Oct 26 19:13:49 2009 * switching node node1 to secondary mode
988
  Mon Oct 26 19:13:50 2009 * wait until resync is done
989
  Mon Oct 26 19:13:50 2009 * changing into standalone mode
990
  Mon Oct 26 19:13:50 2009 * changing disks into single-master mode
991
  Mon Oct 26 19:13:50 2009 * wait until resync is done
992
  Mon Oct 26 19:13:51 2009 * done
993
  node1#
994

    
995
In use disks at instance shutdown
996
+++++++++++++++++++++++++++++++++
997

    
998
If you see something like the following when trying to shutdown or
999
deactivate disks for an instance::
1000

    
1001
  node1# gnt-instance shutdown instance1
1002
  Mon Oct 26 19:16:23 2009  - WARNING: Could not shutdown block device disk/0 on node node2: drbd0: can't shutdown drbd device: /dev/drbd0: State change failed: (-12) Device is held open by someone\n
1003

    
1004
It most likely means something is holding open the underlying DRBD
1005
device. This can be bad if the instance is not running, as it might mean
1006
that there was concurrent access from both the node and the instance to
1007
the disks, but not always (e.g. you could only have had the partitions
1008
activated via ``kpartx``).
1009

    
1010
To troubleshoot this issue you need to follow standard Linux practices,
1011
and pay attention to the hypervisor being used:
1012

    
1013
- check if (in the above example) ``/dev/drbd0`` on node2 is being
1014
  mounted somewhere (``cat /proc/mounts``)
1015
- check if the device is not being used by device mapper itself:
1016
  ``dmsetup ls`` and look for entries of the form ``drbd0pX``, and if so
1017
  remove them with either ``kpartx -d`` or ``dmsetup remove``
1018

    
1019
For Xen, check if it's not using the disks itself::
1020

    
1021
  node1# xenstore-ls /local/domain/0/backend/vbd|grep -e "domain =" -e physical-device
1022
  domain = "instance2"
1023
  physical-device = "93:0"
1024
  domain = "instance3"
1025
  physical-device = "93:1"
1026
  domain = "instance4"
1027
  physical-device = "93:2"
1028
  node1#
1029

    
1030
You can see in the above output that the node exports three disks, to
1031
three instances. The ``physical-device`` key is in major:minor format in
1032
hexadecimal, and 0x93 represents DRBD's major number. Thus we can see
1033
from the above that instance2 has /dev/drbd0, instance3 /dev/drbd1, and
1034
instance4 /dev/drbd2.
1035

    
1036
LUXI version mismatch
1037
+++++++++++++++++++++
1038

    
1039
LUXI is the protocol used for communication between clients and the
1040
master daemon. Starting in Ganeti 2.3, the peers exchange their version
1041
in each message. When they don't match, an error is raised::
1042

    
1043
  $ gnt-node modify -O yes node3
1044
  Unhandled Ganeti error: LUXI version mismatch, server 2020000, request 2030000
1045

    
1046
Usually this means that server and client are from different Ganeti
1047
versions or import their libraries from different, consistent paths
1048
(e.g. an older version installed in another place). You can print the
1049
import path for Ganeti's modules using the following command (note that
1050
depending on your setup you might have to use an explicit version in the
1051
Python command, e.g. ``python2.6``)::
1052

    
1053
  python -c 'import ganeti; print ganeti.__file__'
1054

    
1055
.. vim: set textwidth=72 :
1056
.. Local Variables:
1057
.. mode: rst
1058
.. fill-column: 72
1059
.. End: