Statistics
| Branch: | Tag: | Revision:

root / README @ d3b1075f

History | View | Annotate | Download (4.2 kB)

1
Ganeti Cluster tools (ganeti-htools)
2
====================================
3

    
4
These are some simple cluster tools for fixing common allocation
5
problems on Ganeti 2.0 clusters.
6

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

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

    
18
**Quick start** (see the installation section for more details):
19

    
20
- (have the ghc compiler and the prerequisite libraries installed)
21
- make
22
- ./hbal -m $cluster -C -p
23
- look at the original and final cluster layout, and if acceptable,
24
  execute the given commands
25

    
26

    
27
Available tools
28
---------------
29

    
30
Cluster rebalancer
31
~~~~~~~~~~~~~~~~~~
32

    
33
The rebalancer uses a simple algorithm to try to get the nodes of the
34
cluster as equal as possible in their resource usage. It tries to
35
repeatedly move each instance one step, so that the cluster score
36
becomes better. We stop when no further move can improve the score.
37

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

    
40
IAllocator plugin
41
~~~~~~~~~~~~~~~~~
42

    
43
The ``hail`` iallocator plugin can be used for allocations of mirrored
44
and non-mirrored instances and for relocations of mirrored instances. It
45
needs to be installed in Ganeti's iallocator search path—usually
46
``/usr/lib/ganeti/iallocators`` or
47
``/usr/local/lib/ganeti/iallocators``, and after that it can be used via
48
ganeti's ``--iallocator`` option (in various gnt-node/gnt-instance
49
commands). See the man page hail(1) for more details.
50

    
51
Cluster capacity estimator
52
~~~~~~~~~~~~~~~~~~~~~~~~~~
53

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

    
59

    
60
Integration with Ganeti
61
-----------------------
62

    
63
The ``hbal`` and ``hspace`` programs can either get their input from
64
text files, locally from the master daemon (when run on the master node
65
of a cluster), or remote from a cluster via RAPI. The "-L" argument
66
enables local collection (with an optional path to the unix socket). For
67
online collection via RAPI, the "-m" argument should specify the cluster
68
or master node name. Only ``hbal`` and ``hspace`` use these arguments,
69
``hail`` uses the standard iallocator API and thus doesn't need any
70
special setup (just needs to be installed in the right directory).
71

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

    
77
    gnt-node list -oname,mtotal,mnode,mfree,dtotal,dfree,ctotal,offline \
78
      --separator '|' --no-headers > nodes
79
    gnt-instance list -oname,be/memory,sda_size,be/vcpus,status,pnode,snodes \
80
      --separator '|' --no-head > instances
81

    
82
These two files should be saved under the names of *nodes* and
83
*instances*.
84

    
85
The ``hail`` program gets its data automatically from Ganeti when used
86
as described in its section.
87

    
88
Installation
89
------------
90

    
91
If installing from source, you need a working ghc compiler (6.8 at
92
least) and some extra Haskell libraries which usually need to be
93
installed manually:
94

    
95
- json (http://hackage.haskell.org/package/json)
96
- curl (http://hackage.haskell.org/package/curl)
97
- network (http://hackage.haskell.org/package/network)
98

    
99
Once these are installed, just typing *make* in the top-level directory
100
should be enough.
101

    
102
Only the ``hail`` program needs to be installed in a specific place, the
103
other tools are not location-dependent.
104

    
105
For running the (admittedly small) unittest suite (via *make check*),
106
the QuickCheck version 1 library is needed.
107

    
108
Internal (implementation) documentation is available in the ``apidoc``
109
directory.
110

    
111
.. vim: set textwidth=72 :
112
.. Local Variables:
113
.. mode: rst
114
.. fill-column: 72
115
.. End: