88 |
88 |
is O(n*n) in the number of nodes. Furthermore, it doesn't seems to
|
89 |
89 |
give better scores but will result in more disk replacements.
|
90 |
90 |
|
|
91 |
.SS PLACEMENT RESTRICTIONS
|
|
92 |
|
|
93 |
At each step, we prevent an instance move if it would cause:
|
|
94 |
|
|
95 |
.RS 4
|
|
96 |
.TP 3
|
|
97 |
\(em
|
|
98 |
a node to go into N+1 failure state
|
|
99 |
.TP
|
|
100 |
\(em
|
|
101 |
an instance to move onto an offline node (offline nodes are either
|
|
102 |
read from the cluster or declared with \fI-O\fR)
|
|
103 |
.TP
|
|
104 |
\(em
|
|
105 |
an exclusion-tag based conflict (exclusion tags are read from the
|
|
106 |
cluster and/or defined via the \fI--exclusion-tags\fR option)
|
|
107 |
.TP
|
|
108 |
\(em
|
|
109 |
a max vcpu/pcpu ratio to be exceeded (configured via \fI--max-cpu\fR)
|
|
110 |
.TP
|
|
111 |
\(em
|
|
112 |
min disk free percentage to go below the configured limit (configured
|
|
113 |
via \fI--min-disk\fR)
|
|
114 |
|
91 |
115 |
.SS CLUSTER SCORING
|
92 |
116 |
|
93 |
117 |
As said before, the algorithm tries to minimise the cluster score at
|
... | ... | |
176 |
200 |
memory size of down instances from the free node memory of their
|
177 |
201 |
primary node, in effect simulating the startup of such instances.
|
178 |
202 |
|
179 |
|
.SS OTHER POSSIBLE METRICS
|
|
203 |
.SS EXCLUSION TAGS
|
|
204 |
|
|
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,
|
|
207 |
which would make the respective node a SPOF for the given service.
|
|
208 |
|
|
209 |
It works by tagging instances with certain tags and then building
|
|
210 |
exclusion maps based on these. Which tags are actually used is
|
|
211 |
configured either via the command line (option \fI--exclusion-tags\fR)
|
|
212 |
or via adding them to the cluster tags:
|
180 |
213 |
|
181 |
|
It would be desirable to add more metrics to the algorithm, especially
|
182 |
|
dynamically\(hycomputed metrics, such as:
|
183 |
|
.RS 4
|
184 |
|
.TP 3
|
185 |
|
\(em
|
186 |
|
CPU usage of instances
|
187 |
214 |
.TP
|
188 |
|
\(em
|
189 |
|
Disk IO usage
|
|
215 |
.B --exclusion-tags=a,b
|
|
216 |
This will make all instance tags of the form \fIa:*\fR, \fIb:*\fR be
|
|
217 |
considered for the exclusion map
|
|
218 |
|
190 |
219 |
.TP
|
191 |
|
\(em
|
192 |
|
Network IO
|
193 |
|
.RE
|
|
220 |
cluster tags \fBhtools:iextags:a\fR, \fBhtools:iextags:b\fR
|
|
221 |
This will make instance tags \fIa:*\fR, \fIb:*\fR be considered for
|
|
222 |
the exclusion map. More precisely, the suffix of cluster tags starting
|
|
223 |
with \fBhtools:iextags:\fR will become the prefix of the exclusion
|
|
224 |
tags.
|
|
225 |
|
|
226 |
.P
|
|
227 |
Both the above forms mean that two instances both having (e.g.) the
|
|
228 |
tag \fIa:foo\fR or \fIb:bar\fR won't end on the same node.
|
194 |
229 |
|
195 |
230 |
.SH OPTIONS
|
196 |
231 |
The options that can be passed to the program are as follows:
|