htools.rst 7.52 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
HTOOLS(1) Ganeti | Version @GANETI_VERSION@
===========================================

NAME
----

htools - Cluster allocation and placement tools for Ganeti

SYNOPSIS
--------

**hbal**
  cluster balancer

**hspace**
  cluster capacity computation

**hail**
  IAllocator plugin

**hscan**
  saves cluster state for later reuse


DESCRIPTION
-----------


``htools`` is a suite of tools designed to help with allocation/movement
of instances and balancing of Ganeti clusters. ``htools`` is also the
generic binary that must be symlinked or hardlinked under each tool's
name in order to perform the different functions. Alternatively, the
environment variable HTOOLS can be used to set the desired role.

Installed as ``hbal``, it computes and optionally executes a suite of
instance moves in order to balance the cluster.

Installed as ``hspace``, it computes how many additional instances can
be fit on a cluster, while maintaining N+1 status. It can run on models
of existing clusters or of simulated clusters.

Installed as ``hail``, it acts as an IAllocator plugin, i.e. it is used
by Ganeti to compute new instance allocations and instance moves.

Installed as ``hscan``, it scans the local or remote cluster state and
saves it to files which can later be reused by the other roles.

COMMON OPTIONS
--------------

Options behave the same in all program modes, but not all program modes
support all options. Some common options are:

54
-p, \--print-nodes
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
  Prints the node status, in a format designed to allow the user to
  understand the node's most important parameters. If the command in
  question makes a cluster transition (e.g. balancing or allocation),
  then usually both the initial and final node status is printed.

  It is possible to customise the listed information by passing a
  comma-separated list of field names to this option (the field list
  is currently undocumented), or to extend the default field list by
  prefixing the additional field list with a plus sign. By default,
  the node list will contain the following information:

  F
    a character denoting the status of the node, with '-' meaning an
    offline node, '*' meaning N+1 failure and blank meaning a good
    node

  Name
    the node name

  t_mem
    the total node memory

  n_mem
    the memory used by the node itself

  i_mem
    the memory used by instances

  x_mem
    amount memory which seems to be in use but cannot be determined
    why or by which instance; usually this means that the hypervisor
    has some overhead or that there are other reporting errors

  f_mem
    the free node memory

  r_mem
    the reserved node memory, which is the amount of free memory
    needed for N+1 compliance

  t_dsk
    total disk

  f_dsk
    free disk

  pcpu
    the number of physical cpus on the node

  vcpu
    the number of virtual cpus allocated to primary instances

  pcnt
    number of primary instances

  scnt
    number of secondary instances

  p_fmem
    percent of free memory

  p_fdsk
    percent of free disk

  r_cpu
    ratio of virtual to physical cpus

  lCpu
    the dynamic CPU load (if the information is available)

  lMem
    the dynamic memory load (if the information is available)

  lDsk
    the dynamic disk load (if the information is available)

  lNet
    the dynamic net load (if the information is available)

134
-t *datafile*, \--text-data=*datafile*
Iustin Pop's avatar
Iustin Pop committed
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
  Backend specification: the name of the file holding node and instance
  information (if not collecting via RAPI or LUXI). This or one of the
  other backends must be selected. The option is described in the man
  page **htools**(1).

  The file should contain text data, line-based, with two empty lines
  separating sections. The lines themselves are column-based, with the
  pipe symbol (``|``) acting as separator.

  The first section contains group data, with two columns:

  - group name
  - group uuid

  The second sections contains node data, with the following columns:

  - node name
  - node total memory
  - node free memory
  - node total disk
  - node free disk
  - node physical cores
  - offline field (as ``Y`` or ``N``)
  - group UUID

  The third section contains instance data, with the fields:

  - instance name
  - instance memory
  - instance disk size
  - instance vcpus
  - instance status (in Ganeti's format, e.g. ``running`` or ``ERROR_down``)
  - instance ``auto_balance`` flag (see man page **gnt-instance** (7))
  - instance primary node
  - instance secondary node(s), if any
  - instance disk type (e.g. ``plain`` or ``drbd``)
  - instance tags

  The fourth and last section contains the cluster tags, with one tag
  per line (no columns/no column processing).

-m *cluster*
  Backend specification: collect data directly from the *cluster* given
  as an argument via RAPI. If the argument doesn't contain a colon (:),
  then it is converted into a fully-built URL via prepending
  ``https://`` and appending the default RAPI port, otherwise it is
  considered a fully-specified URL and used as-is.

-L [*path*]
  Backend specification: collect data directly from the master daemon,
  which is to be contacted via LUXI (an internal Ganeti protocol). An
  optional *path* argument is interpreted as the path to the unix socket
  on which the master daemon listens; otherwise, the default path used
  by Ganeti (configured at build time) is used.

190
\--simulate *description*
Iustin Pop's avatar
Iustin Pop committed
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
  Backend specification: instead of using actual data, build an empty
  cluster given a node description. The *description* parameter must be
  a comma-separated list of five elements, describing in order:

  - the allocation policy for this node group (*preferred*, *allocable*
    or *unallocable*, or alternatively the short forms *p*, *a* or *u*)
  - the number of nodes in the cluster
  - the disk size of the nodes (default in mebibytes, units can be used)
  - the memory size of the nodes (default in mebibytes, units can be used)
  - the cpu core count for the nodes

  An example description would be **preferred,B20,100G,16g,4**
  describing a 20-node cluster where each node has 100GB of disk
  space, 16GiB of memory and 4 CPU cores. Note that all nodes must
  have the same specs currently.

  This option can be given multiple times, and each new use defines a
  new node group. Hence different node groups can have different
  allocation policies and node count/specifications.

211
-v, \--verbose
Iustin Pop's avatar
Iustin Pop committed
212
213
214
215
  Increase the output verbosity. Each usage of this option will
  increase the verbosity (currently more than 2 doesn't make sense)
  from the default of one.

216
-q, \--quiet
Iustin Pop's avatar
Iustin Pop committed
217
218
219
220
  Decrease the output verbosity. Each usage of this option will
  decrease the verbosity (less than zero doesn't make sense) from the
  default of one.

221
-V, \--version
Iustin Pop's avatar
Iustin Pop committed
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  Just show the program version and exit.

UNITS
~~~~~

Some options accept not simply numerical values, but numerical values
together with a unit. By default, such unit-accepting options use
mebibytes. Using the lower-case letters of *m*, *g* and *t* (or their
longer equivalents of *mib*, *gib*, *tib*, for which case doesn't
matter) explicit binary units can be selected. Units in the SI system
can be selected using the upper-case letters of *M*, *G* and *T* (or
their longer equivalents of *MB*, *GB*, *TB*, for which case doesn't
matter).

More details about the difference between the SI and binary systems can
be read in the *units(7)* man page.

ENVIRONMENT
-----------

The environment variable ``HTOOLS`` can be used instead of
renaming/symlinking the programs; simply set it to the desired role and
then the name of the program is no longer used.

.. vim: set textwidth=72 :
.. Local Variables:
.. mode: rst
.. fill-column: 72
.. End: