README 3.54 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
2
Ganeti Cluster tools (ganeti-htools)
====================================
Iustin Pop's avatar
Iustin Pop committed
3

Iustin Pop's avatar
Iustin Pop committed
4
5
These are some simple cluster tools for fixing common allocation
problems on Ganeti 2.0 clusters.
Iustin Pop's avatar
Iustin Pop committed
6

Iustin Pop's avatar
Iustin Pop committed
7
8
9
10
Note that these tools are most useful for bigger cluster sizes
(e.g. more than five or ten machines); at lower sizes, the
computations they do can also be done manually.

11
12
13
14
15
16
17
Most of the tools revolve around the concept of keeping the cluster
N+1 compliant: this means that in case of failure of any node, the
instances affected can be failed over (via ``gnt-node failover`` or
``gnt-instance failover``) to their secondary node, and there is
enough memory reserved for this operation without needing to shutdown
other instances or rebalance the cluster.

Iustin Pop's avatar
Iustin Pop committed
18
19
Available tools
---------------
Iustin Pop's avatar
Iustin Pop committed
20

Iustin Pop's avatar
Iustin Pop committed
21
Cluster rebalancer
Iustin Pop's avatar
Iustin Pop committed
22
~~~~~~~~~~~~~~~~~~
Iustin Pop's avatar
Iustin Pop committed
23

Iustin Pop's avatar
Iustin Pop committed
24
25
26
The rebalancer uses a simple algorithm to try to get the nodes of the
cluster as equal as possible in their resource usage. It tries to
repeatedly move each instance one step, so that the cluster score
Iustin Pop's avatar
Iustin Pop committed
27
28
29
30
becomes better. We stop when no further move can improve the score.

For algorithm details and usage, see the man page hbal(1).

Iustin Pop's avatar
Iustin Pop committed
31
Cluster N+1 solver
Iustin Pop's avatar
Iustin Pop committed
32
~~~~~~~~~~~~~~~~~~
Iustin Pop's avatar
Iustin Pop committed
33
34
35
36
37
38

This program runs a very simple brute force algorithm over the instance
placement space in order to determine the shortest number of replace-disks
needed to fix the cluster. Note this means we won't get a balanced cluster,
just one that passes N+1 checks.

Iustin Pop's avatar
Iustin Pop committed
39
40
41
For algorithm details and usage, see the man page hn1(1).

.. note:: This program is deprecated, hbal should be used instead.
Iustin Pop's avatar
Iustin Pop committed
42

Iustin Pop's avatar
Iustin Pop committed
43
IAllocator plugin
Iustin Pop's avatar
Iustin Pop committed
44
~~~~~~~~~~~~~~~~~
Iustin Pop's avatar
Iustin Pop committed
45

Iustin Pop's avatar
Iustin Pop committed
46
47
48
49
The ``hail`` iallocator plugin can be used for allocations of mirrored
and non-mirrored instances and for relocations of mirrored
instances. It needs to be installed in Ganeti's iallocator search
path—usually ``/usr/lib/ganeti/iallocators`` or
Iustin Pop's avatar
Iustin Pop committed
50
``/usr/local/lib/ganeti/iallocators``. See the man page hail(1).
Iustin Pop's avatar
Iustin Pop committed
51

52
53
54
55
56
57
58
59
60
Cluster capacity estimator
~~~~~~~~~~~~~~~~~~~~~~~~~~

The ``hspace`` program will, given an input instance specification,
estimate how many instances of those type can be place on the cluster
before it will become full (as in any new allocation would fail N+1
checks). For more details, see the man page hspace(1).


Iustin Pop's avatar
Iustin Pop committed
61
62
63
Integration with Ganeti
-----------------------

Iustin Pop's avatar
Iustin Pop committed
64
65
66
67
68
69
The ``hbal`` and ``hn1`` programs can either get their input from text
files, or online from a cluster via RAPI. For online collection via
RAPI, the "-m" argument to both hn1 and hbal should specify the
cluster or master node name. ``hail`` uses the standard iallocator API
and thus doesn't need any special setup (just needs to be installed in
the right directory).
Iustin Pop's avatar
Iustin Pop committed
70

Iustin Pop's avatar
Iustin Pop committed
71
72
73
74
For generating the text files, a separate tool (hscan) is provided to
automate their gathering if RAPI is available, which is better since
it can extract more precise information. In case RAPI is not usable
for whatever reason, the following two commands should be run::
Iustin Pop's avatar
Iustin Pop committed
75

Iustin Pop's avatar
Iustin Pop committed
76
    gnt-node list -oname,mtotal,mnode,mfree,dtotal,dfree,offline \
Iustin Pop's avatar
Iustin Pop committed
77
      --separator '|' --no-headers > nodes
Iustin Pop's avatar
Iustin Pop committed
78
    gnt-instance list -oname,be/memory,sda_size,status,pnode,snodes \
Iustin Pop's avatar
Iustin Pop committed
79
80
      --separator '|' --no-head > instances

Iustin Pop's avatar
Iustin Pop committed
81
82
These two files should be saved under the names of *nodes* and
*instances*.
Iustin Pop's avatar
Iustin Pop committed
83
84
85
86
87
88
89

Installation
------------

If installing from source, you need a working ghc compiler (6.8 at
least) and some extra Haskell libraries which usually need to be
installed manually:
Iustin Pop's avatar
Iustin Pop committed
90

Iustin Pop's avatar
Iustin Pop committed
91
92
- json
- curl
Iustin Pop's avatar
Iustin Pop committed
93

Iustin Pop's avatar
Iustin Pop committed
94
95
Once these are available, just typing *make* in the top-level
directory should be enough.
Iustin Pop's avatar
Iustin Pop committed
96

Iustin Pop's avatar
Iustin Pop committed
97
98
Internal (implementation) documentation is available in the ``apidoc``
directory.
Iustin Pop's avatar
Iustin Pop committed
99
100
101
102

.. Local Variables:
.. mode: rst
.. End: