Revision 53c24840 hbal.1
b/hbal.1 | ||
---|---|---|
120 | 120 |
.RS 4 |
121 | 121 |
.TP 3 |
122 | 122 |
\(em |
123 |
coefficient of variance of the percent of free memory
|
|
123 |
standard deviation of the percent of free memory
|
|
124 | 124 |
.TP |
125 | 125 |
\(em |
126 |
coefficient of variance of the percent of reserved memory
|
|
126 |
standard deviation of the percent of reserved memory
|
|
127 | 127 |
.TP |
128 | 128 |
\(em |
129 |
coefficient of variance of the percent of free disk
|
|
129 |
standard deviation of the percent of free disk
|
|
130 | 130 |
.TP |
131 | 131 |
\(em |
132 |
percentage of nodes failing N+1 check
|
|
132 |
count of nodes failing N+1 check
|
|
133 | 133 |
.TP |
134 | 134 |
\(em |
135 |
percentage of instances living (either as primary or secondary) on
|
|
135 |
count of instances living (either as primary or secondary) on
|
|
136 | 136 |
offline nodes |
137 | 137 |
.TP |
138 | 138 |
\(em |
139 |
coefficent of variance of the ratio of virtual-to-physical cpus (for |
|
140 |
primary instaces of the node) |
|
139 |
count of instances living (as primary) on offline nodes; this differs |
|
140 |
from the above metric by helping failover of such instances in 2-node |
|
141 |
clusters |
|
141 | 142 |
.TP |
142 | 143 |
\(em |
143 |
coefficients of variance of the dynamic load on the nodes, for cpus, |
|
144 |
standard deviation of the ratio of virtual-to-physical cpus (for |
|
145 |
primary instances of the node) |
|
146 |
.TP |
|
147 |
\(em |
|
148 |
standard deviation of the dynamic load on the nodes, for cpus, |
|
144 | 149 |
memory, disk and network |
145 | 150 |
.RE |
146 | 151 |
|
... | ... | |
151 | 156 |
N+1. And finally, the N+1 percentage helps guide the algorithm towards |
152 | 157 |
eliminating N+1 failures, if possible. |
153 | 158 |
|
154 |
Except for the N+1 failures and offline instances percentage, we use |
|
155 |
the coefficient of variance since this brings the values into the same |
|
156 |
unit so to speak, and with a restrict domain of values (between zero |
|
157 |
and one). The percentage of N+1 failures, while also in this numeric |
|
158 |
range, doesn't actually has the same meaning, but it has shown to work |
|
159 |
well. |
|
160 |
|
|
161 |
The other alternative, using for N+1 checks the coefficient of |
|
162 |
variance of (N+1 fail=1, N+1 pass=0) across nodes could hint the |
|
163 |
algorithm to make more N+1 failures if most nodes are N+1 fail |
|
164 |
already. Since this (making N+1 failures) is not allowed by other |
|
165 |
rules of the algorithm, so the N+1 checks would simply not work |
|
166 |
anymore in this case. |
|
167 |
|
|
168 |
The offline instances percentage (meaning the percentage of instances |
|
169 |
living on offline nodes) will cause the algorithm to actively move |
|
170 |
instances away from offline nodes. This, coupled with the restriction |
|
171 |
on placement given by offline nodes, will cause evacuation of such |
|
172 |
nodes. |
|
159 |
Except for the N+1 failures and offline instances counts, we use the |
|
160 |
standard deviation since when used with values within a fixed range |
|
161 |
(we use percents expressed as values between zero and one) it gives |
|
162 |
consistent results across all metrics (there are some small issues |
|
163 |
related to different means, but it works generally well). The 'count' |
|
164 |
type values will have higher score and thus will matter more for |
|
165 |
balancing; thus these are better for hard constraints (like evacuating |
|
166 |
nodes and fixing N+1 failures). For example, the offline instances |
|
167 |
count (i.e. the number of instances living on offline nodes) will |
|
168 |
cause the algorithm to actively move instances away from offline |
|
169 |
nodes. This, coupled with the restriction on placement given by |
|
170 |
offline nodes, will cause evacuation of such nodes. |
|
173 | 171 |
|
174 | 172 |
The dynamic load values need to be read from an external file (Ganeti |
175 | 173 |
doesn't supply them), and are computed for each node as: sum of |
... | ... | |
182 | 180 |
values, and feed that via the \fI-U\fR option for all instances (and |
183 | 181 |
keep the other metrics as one). For the algorithm to work, all that is |
184 | 182 |
needed is that the values are consistent for a metric across all |
185 |
instances (e.g. all instances use cpu% to report cpu usage, but they |
|
186 |
could represent network bandwith in Gbps). Note that it's recommended |
|
187 |
to not have zero as the load value for any instance metric since then |
|
188 |
secondary instances are not well balanced. |
|
183 |
instances (e.g. all instances use cpu% to report cpu usage, and not |
|
184 |
something related to number of CPU seconds used if the CPUs are |
|
185 |
different), and that they are normalised to between zero and one. Note |
|
186 |
that it's recommended to not have zero as the load value for any |
|
187 |
instance metric since then secondary instances are not well balanced. |
|
189 | 188 |
|
190 | 189 |
On a perfectly balanced cluster (all nodes the same size, all |
191 | 190 |
instances the same size and spread across the nodes equally), the |
... | ... | |
202 | 201 |
|
203 | 202 |
.SS EXCLUSION TAGS |
204 | 203 |
|
205 |
The exclusion tags mecanism is designed to prevent instances which run
|
|
206 |
the same workload (e.g. two DNS servers) to land on the same node, |
|
204 |
The exclusion tags mechanism is designed to prevent instances which
|
|
205 |
run the same workload (e.g. two DNS servers) to land on the same node,
|
|
207 | 206 |
which would make the respective node a SPOF for the given service. |
208 | 207 |
|
209 | 208 |
It works by tagging instances with certain tags and then building |
Also available in: Unified diff