Revision 4a4697de
b/doc/design-hroller.rst | ||
---|---|---|
80 | 80 |
In order to do that we can use the following algorithm: |
81 | 81 |
|
82 | 82 |
1) Compute node sets that don't contain both the primary and the |
83 |
secondary for any instance. This can be done already by the current
|
|
84 |
hroller graph coloring algorithm: nodes are in the same set (color)
|
|
85 |
if and only if no edge (instance) exists between them (see the
|
|
86 |
:manpage:`hroller(1)` manpage for more details).
|
|
87 |
2) Inside each node set calculate subsets that don't have any secondary
|
|
88 |
node in common (this can be done by creating a graph of nodes that
|
|
89 |
are connected if and only if an instance on both has the same
|
|
90 |
secondary node, and coloring that graph)
|
|
91 |
3) It is then possible to migrate in parallel all nodes in a subset
|
|
92 |
created at step 2, and then reboot/perform maintenance on them, and
|
|
83 |
secondary of any instance, and also don't contain the primary
|
|
84 |
nodes of two instances that have the same node as secondary. These
|
|
85 |
can be obtained by computing a coloring of the graph with nodes
|
|
86 |
as vertexes and an edge between two nodes, if either condition
|
|
87 |
prevents simultaneous maintenance. (This is the current algorithm of
|
|
88 |
:manpage:`hroller(1)` with the extension that the graph to be colored
|
|
89 |
has additional edges between the primary nodes of two instances sharing
|
|
90 |
their secondary node.)
|
|
91 |
2) It is then possible to migrate in parallel all nodes in a set
|
|
92 |
created at step 1, and then reboot/perform maintenance on them, and
|
|
93 | 93 |
migrate back their original primaries, which allows the computation |
94 |
above to be reused for each following subset without N+1 failures
|
|
94 |
above to be reused for each following set without N+1 failures |
|
95 | 95 |
being triggered, if none were present before. See below about the |
96 | 96 |
actual execution of the maintenance. |
97 | 97 |
|
Also available in: Unified diff