Statistics
| Branch: | Tag: | Revision:

root / htools / README @ 2e5eb96a

History | View | Annotate | Download (4.3 kB)

1 dc384cf0 Iustin Pop
Ganeti Cluster tools (ganeti-htools)
2 dc384cf0 Iustin Pop
====================================
3 dc384cf0 Iustin Pop
4 dc384cf0 Iustin Pop
These are some simple cluster tools for fixing common allocation
5 dc384cf0 Iustin Pop
problems on Ganeti 2.0 clusters.
6 dc384cf0 Iustin Pop
7 dc384cf0 Iustin Pop
Note that these tools are most useful for bigger cluster sizes
8 dc384cf0 Iustin Pop
(e.g. more than five or ten machines); at lower sizes, the computations
9 dc384cf0 Iustin Pop
they do can also be done manually.
10 dc384cf0 Iustin Pop
11 dc384cf0 Iustin Pop
Most of the tools revolve around the concept of keeping the cluster N+1
12 dc384cf0 Iustin Pop
compliant: this means that in case of failure of any node, the instances
13 dc384cf0 Iustin Pop
affected can be failed over (via ``gnt-node failover`` or ``gnt-instance
14 dc384cf0 Iustin Pop
failover``) to their secondary node, and there is enough memory reserved
15 dc384cf0 Iustin Pop
for this operation without needing to shutdown other instances or
16 dc384cf0 Iustin Pop
rebalance the cluster.
17 dc384cf0 Iustin Pop
18 dc384cf0 Iustin Pop
**Quick start** (see the installation section for more details):
19 dc384cf0 Iustin Pop
20 dc384cf0 Iustin Pop
- (have the ghc compiler and the prerequisite libraries installed)
21 dc384cf0 Iustin Pop
- ``make``
22 dc384cf0 Iustin Pop
- ``./hbal -m $cluster -C -p``
23 dc384cf0 Iustin Pop
- look at the original and final cluster layout, and if acceptable,
24 dc384cf0 Iustin Pop
  execute the given commands
25 dc384cf0 Iustin Pop
26 dc384cf0 Iustin Pop
27 dc384cf0 Iustin Pop
Available tools
28 dc384cf0 Iustin Pop
---------------
29 dc384cf0 Iustin Pop
30 dc384cf0 Iustin Pop
Cluster rebalancer
31 dc384cf0 Iustin Pop
~~~~~~~~~~~~~~~~~~
32 dc384cf0 Iustin Pop
33 dc384cf0 Iustin Pop
The rebalancer uses a simple algorithm to try to get the nodes of the
34 dc384cf0 Iustin Pop
cluster as equal as possible in their resource usage. It tries to
35 dc384cf0 Iustin Pop
repeatedly move each instance one step, so that the cluster score
36 dc384cf0 Iustin Pop
becomes better. We stop when no further move can improve the score.
37 dc384cf0 Iustin Pop
38 dc384cf0 Iustin Pop
For algorithm details and usage, see the man page ``hbal(1)``.
39 dc384cf0 Iustin Pop
40 dc384cf0 Iustin Pop
IAllocator plugin
41 dc384cf0 Iustin Pop
~~~~~~~~~~~~~~~~~
42 dc384cf0 Iustin Pop
43 dc384cf0 Iustin Pop
The ``hail`` iallocator plugin can be used for allocations of mirrored
44 dc384cf0 Iustin Pop
and non-mirrored instances and for relocations of mirrored instances. It
45 dc384cf0 Iustin Pop
needs to be installed in Ganeti's iallocator search path—usually
46 dc384cf0 Iustin Pop
``/usr/lib/ganeti/iallocators`` or
47 dc384cf0 Iustin Pop
``/usr/local/lib/ganeti/iallocators``, and after that it can be used via
48 dc384cf0 Iustin Pop
ganeti's ``--iallocator`` option (in various gnt-node/gnt-instance
49 dc384cf0 Iustin Pop
commands). See the man page ``hail(1)`` for more details.
50 dc384cf0 Iustin Pop
51 dc384cf0 Iustin Pop
Cluster capacity estimator
52 dc384cf0 Iustin Pop
~~~~~~~~~~~~~~~~~~~~~~~~~~
53 dc384cf0 Iustin Pop
54 dc384cf0 Iustin Pop
The ``hspace`` program will, given an input instance specification,
55 dc384cf0 Iustin Pop
estimate how many instances of those type can be place on the cluster
56 dc384cf0 Iustin Pop
before it will become full (as in any new allocation would fail N+1
57 dc384cf0 Iustin Pop
checks). For more details, see the man page hspace(1).
58 dc384cf0 Iustin Pop
59 dc384cf0 Iustin Pop
60 dc384cf0 Iustin Pop
Integration with Ganeti
61 dc384cf0 Iustin Pop
-----------------------
62 dc384cf0 Iustin Pop
63 dc384cf0 Iustin Pop
The ``hbal`` and ``hspace`` programs can either get their input from
64 dc384cf0 Iustin Pop
text files, locally from the master daemon (when run on the master node
65 dc384cf0 Iustin Pop
of a cluster), or remote from a cluster via RAPI. The "-L" argument
66 dc384cf0 Iustin Pop
enables local collection (with an optional path to the unix socket). For
67 dc384cf0 Iustin Pop
online collection via RAPI, the "-m" argument should specify the cluster
68 dc384cf0 Iustin Pop
or master node name. Only ``hbal`` and ``hspace`` use these arguments,
69 dc384cf0 Iustin Pop
``hail`` uses the standard iallocator API and thus doesn't need any
70 dc384cf0 Iustin Pop
special setup (just needs to be installed in the right directory).
71 dc384cf0 Iustin Pop
72 dc384cf0 Iustin Pop
For generating the text files, a separate tool (``hscan``) is provided
73 dc384cf0 Iustin Pop
to automate their gathering if RAPI is available, which is better since
74 dc384cf0 Iustin Pop
it can extract more precise information. In case RAPI is not usable for
75 dc384cf0 Iustin Pop
whatever reason, ``gnt-node list`` and ``gnt-instance list`` could be
76 dc384cf0 Iustin Pop
used, and their output concatenated in a single file, separated by one
77 dc384cf0 Iustin Pop
blank line. If you need to do this manually, you'll need to check the
78 dc384cf0 Iustin Pop
sources to see which fields are needed exactly.
79 dc384cf0 Iustin Pop
80 dc384cf0 Iustin Pop
81 dc384cf0 Iustin Pop
The ``hail`` program gets its data automatically from Ganeti when used
82 dc384cf0 Iustin Pop
as described in its section.
83 dc384cf0 Iustin Pop
84 dc384cf0 Iustin Pop
Installation
85 dc384cf0 Iustin Pop
------------
86 dc384cf0 Iustin Pop
87 dc384cf0 Iustin Pop
If installing from source, you need a working ghc compiler (6.8 at
88 dc384cf0 Iustin Pop
least) and some extra Haskell libraries which usually need to be
89 dc384cf0 Iustin Pop
installed manually:
90 dc384cf0 Iustin Pop
91 dc384cf0 Iustin Pop
- `json <http://hackage.haskell.org/package/json>`_
92 dc384cf0 Iustin Pop
- `curl <http://hackage.haskell.org/package/curl>`_
93 dc384cf0 Iustin Pop
- `network <http://hackage.haskell.org/package/network>`_
94 dc384cf0 Iustin Pop
- `parallel <http://hackage.haskell.org/package/parallel>`_, version 1.x
95 dc384cf0 Iustin Pop
96 dc384cf0 Iustin Pop
Once these are installed, just typing *make* in the top-level directory
97 dc384cf0 Iustin Pop
should be enough. If you edit the documentation sources, you will need
98 dc384cf0 Iustin Pop
the ``pandoc`` program to rebuilt it.
99 dc384cf0 Iustin Pop
100 dc384cf0 Iustin Pop
Only the ``hail`` program needs to be installed in a specific place, the
101 dc384cf0 Iustin Pop
other tools are not location-dependent.
102 dc384cf0 Iustin Pop
103 dc384cf0 Iustin Pop
For running the (admittedly small) unittest suite (via *make check*),
104 dc384cf0 Iustin Pop
the QuickCheck version 1 library is needed.
105 dc384cf0 Iustin Pop
106 dc384cf0 Iustin Pop
Internal (implementation) documentation is available in the ``apidoc``
107 dc384cf0 Iustin Pop
directory.
108 dc384cf0 Iustin Pop
109 dc384cf0 Iustin Pop
.. vim: set textwidth=72 :
110 dc384cf0 Iustin Pop
.. Local Variables:
111 dc384cf0 Iustin Pop
.. mode: rst
112 dc384cf0 Iustin Pop
.. fill-column: 72
113 dc384cf0 Iustin Pop
.. End: