summaryrefslogtreecommitdiffstats
path: root/__root__/doc/rgmanager-pacemaker.02.resources.txt
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2016-02-01 14:18:19 +0100
committerJan Pokorný <jpokorny@redhat.com>2016-02-01 23:54:49 +0100
commitdd973d6ed3c97d86c6c7e8a856793e2e906c2cb5 (patch)
treee8e5480f44e52cfb999f709e2b0f4745451918c3 /__root__/doc/rgmanager-pacemaker.02.resources.txt
parent5489fca91240809e216589eb7fec206300a297f5 (diff)
downloadclufter-dd973d6ed3c97d86c6c7e8a856793e2e906c2cb5.tar.gz
clufter-dd973d6ed3c97d86c6c7e8a856793e2e906c2cb5.tar.xz
clufter-dd973d6ed3c97d86c6c7e8a856793e2e906c2cb5.zip
doc: move rgmanager-pacemaker.* to dedicated directory
Also rename env_vars -> env-vars (for uniformity). Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to '__root__/doc/rgmanager-pacemaker.02.resources.txt')
-rw-r--r--__root__/doc/rgmanager-pacemaker.02.resources.txt530
1 files changed, 0 insertions, 530 deletions
diff --git a/__root__/doc/rgmanager-pacemaker.02.resources.txt b/__root__/doc/rgmanager-pacemaker.02.resources.txt
deleted file mode 100644
index 1a224fe..0000000
--- a/__root__/doc/rgmanager-pacemaker.02.resources.txt
+++ /dev/null
@@ -1,530 +0,0 @@
-IN THE LIGHT OF RGMANAGER-PACEMAKER CONVERSION: 02/CLUSTERED RESOURCE PROPERTIES
-
-Copyright 2016 Red Hat, Inc., Jan Pokorný <jpokorny @at@ Red Hat .dot. com>
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3
-or any later version published by the Free Software Foundation;
-with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-
-Preface
-=======
-
-This document elaborates on how selected resource relationship properties
-(denoting the run-time behavior) formalized by the means of LTL logic maps
-to particular RGManager (R) and Pacemaker (P) configuration arrangements.
-Due to the purpose of this document, "selected" here means set of
-properties one commonly uses in case of the former cluster resource
-manager (R).
-
-Properties are categorised, each is further dissected based on
-the property variants (basically holds or doesn't, but can be more
-convoluted), and for each variants, the LTL model and R+P specifics
-are provided.
-
-
-Outline
--------
-
-Resource-resource interaction properites, PROPERTY(RESOURCE1, RESOURCE2)
-. ORDERING
-. COOCCURRENCE
-Relative resource-node assignment properties, PROPERTY(RESOURCE)
-. STICKY
-. EXCLUSIVE
-Explicit resource-node assignment properties, PROPERTY(RESOURCE, NODE)
-. AFFINITY
-Other resource properties, PROPERTY(RESOURCE)
-. RECOVERY --> see RECOVERY(GROUP) and FAILURE-ISOLATION(GROUP, RESOURCE)
-. ENABLED --> Pacemaker only, same as ENABLED(GROUP)
-
-# XXX: service ref=... + single node failover domains vs. clone
-
-
-
-Resource-resource interaction properites
-========================================
-
-Generally a relation expressed by a predicate PROPERTY(RESOURCE1, RESOURCE2),
-implying modification of the behavior of cluster wrt. resource-resource
-pair:
-
-PROPERTY(RESOURCE1, RESOURCE2) -> ALTER((RESOURCE1, RESOURCE2))
-
-
-Ordering (time-based interaction dependence of the resources/their states)
---------------------------------------------------------------------------
-
-ORDERING ::= ORDERING(RESOURCE1, RESOURCE2, NONE)
- | ORDERING(RESOURCE1, RESOURCE2, WEAK)
- | ORDERING(RESOURCE1, RESOURCE2, STRONG)
- | ORDERING(RESOURCE1, RESOURCE2, ASYMMETRIC)
-. ORDERING(RESOURCE1, RESOURCE2, NONE) ... no time-based dependency
- of the states
-. ORDERING(RESOURCE1, RESOURCE2, WEAK) ... start of 2nd preceeded by start
- of 1st (stop viceversa/LIFO),
- but only when both events happen
- at the same time
-. ORDERING(RESOURCE1, RESOURCE2, STRONG) ... runtime of 2nd won't exceed
- runtime of 1st
-. ORDERING(RESOURCE1, RESOURCE2, ASYMMETRIC)
- ... runtime of 2nd won't exceed
- runtime of 1st (as STRONG) only
- at the start phase (XXX then
- the lifetimes are not
- correlated???)
-
-assumed variables (+ constraints) to be combined with proper preconditions:
-. A1, A2 in NODES
-. B in RUNNABLE(A1), C in RUNNABLE(A2)
-
-propositional variables:
-. a ... RUNNING(A1, B)
-. b ... RUNNING(A2, C)
-. c ... intention RUNNING(A1, B)
-. d ... intention RUNNING(A2, C)
-
-R: driven by
- XXX implicit and explicit ordering
-
-P: driven by `order` constraint (or `group` arrangement)
-
-ORDERING(B, C, WEAK) [2. weak ordering]
-~~~~~~~~~~~~~~~~~~~~
-~a AND ~b AND c AND d -> (X a OR TRUE) AND X X b [start: B, then C]
-a AND b AND ~c AND ~d -> X ~b AND X X ~a [stop: C, then B]
-
-R: TBD
-
-P: driven by specifying `kind` as `Optional` (or `score` as `0`)
- # pcs constraint order B then C kind=Optional
- or
- # pcs constraint order B then C score=0
-
-ORDERING(B, C, STRONG) [3. strong ordering]
-~~~~~~~~~~~~~~~~~~~~~~
-~a AND ~b AND c AND d -> X a AND X X b [see weak ordering]
-~a AND ~b AND d -> ~a AND ~b AND c AND d [stronger, follows as per previous???]
-a AND b AND ~c AND ~d -> X ~b AND X X ~a [see weak ordering]
-a AND b AND ~c -> a AND b AND ~c AND ~d [stronger, follows as per previous]
-
-R: TBD
-
-P: driven by omitting both `kind` and `score` (or specifying `kind` as
- `Mandatory` or `score` as non-zero)
- or (b) using `group` (which implies also `colocation` constraint)
- - (a)
- # pcs constraint order B then C
- # pcs constraint order B then C kind=Mandatory
- or
- # pcs constraint order B then C score=1
- # XXX pcs constraint order set B C
- - (b)
- # XXX pcs resource group add SOMENAME C/RESOURCE2 B/RESOURCE1
-
-ORDERING(B, C, ASYMMETRIC) [4. asymmetric ordering]
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-~a AND ~b AND c AND d -> X a AND X X b [see weak ordering]
-~a AND ~b AND d -> ~a AND ~b AND c AND d [stronger, follows as per previous???]
-
-R: TBD
-
-P: driven by specifying `symmetrical` as `false` (default is `true`)
- # pcs constraint order B then C symmetrical=false
-
-
-Cooccurrence (location-based interaction dependence of the resources)
----------------------------------------------------------------------
-
-COOCCURRENCE ::= COOCURRENCE(RESOURCE1, RESOURCE2, NONE)
- | COOCURRENCE(RESOURCE1, RESOURCE2, POSITIVE)
- | COOCURRENCE(RESOURCE1, RESOURCE2, NEGATIVE)
- | COOCURRENCE(RESOURCE1, RESOURCE2, SCORE),
- SCORE in {..., -1, 0, 1, ...}, 0~NONE, -INF~NEGATIVE,
- +INF~POSITIVE
-. COOCCURRENCE(RESOURCE1, RESOURCE2, NONE) ... not any occurrence
- relationship (default)
-. COOCCURRENCE(RESOURCE1, RESOURCE2, POSITIVE) ... positive occurrence
- relationship (flat model)
-. COOCCURRENCE(RESOURCE1, RESOURCE2, NEGATIVE) ... negative occurrence
- relationship (flat model)
-. COOCCURRENCE(RESOURCE1, RESOURCE2, SCORE) ... score-based/advisory
- occurrence relationship
-
-note: COOCCURRENCE relation between RESOURCE1 and RESOURCE2 is not symmetric,
- RESOURCE1 is "dependent", RESOURCE2 is "leader"
-
-assumed variables (+ constraints) to be combined with proper preconditions:
-. A1, A2 in NODES
-. B, C in RUNNABLE(A1) intersection RUNNABLE(A2)
-
-propositional variables:
-. a ... RUNNING(A1, B)
-. b ... RUNNING(A2, C)
-. c ... A1 == A2
-. d ... RUNNING(A2, B)
-
-R: driven by various arrangements
-
-P: driven by `colocation` constraint (or `group` arrangement)
-
-COOCCURRENCE(B/RESOURCE1, C/RESOURCE2, NONE) [1. no cooccurrence]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-R: default
-
-P: default, no need for that, otherwise specifying `score` as `0`
- # pcs constraint colocation add B/RESOURCE1 with C/RESOURCE2 0
-
-COOCCURRENCE(B/RESOURCE1, C/RESOURCE2, POSITIVE) [2. positive cooccurrence]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-a AND b -> c [basic positive cooccurrence condition]
-X b -> X d ["dependent" follows its "leader"]
-
-R: driven by grouping set of sequentially dependent resources
- either using subsequent nesting so as to preserve the predestined
- order unconditionally (referred to as **explicit ordering**)
- or just enumerating them on the same level within the hierarchy
- to allow for (reasonably preselected) reordering as designated
- (via service.sh metadata) rules (referred to as **implicit ordering**)
- hierarchically (in general, but using just the latter provision
- it can be plain flat) into service/vm stanza
- - `__independent_subtree` must not be used
-
-P: driven by (a) `colocation` constraint, specifying `INFINITY`,
- or (b) using `group` (which implies also `order` constraint)
- - (a)
- # pcs constraint colocation add B/RESOURCE1 with C/RESOURCE2
- # pcs constraint colocation add B/RESOURCE1 with C/RESOURCE2 INFINITY
- # pcs constraint colocation set C/RESOURCE2 B/RESOURCE1
- - (b)
- # pcs resource group add SOMENAME C/RESOURCE2 B/RESOURCE1
-
-COOCCURRENCE(B/RESOURCE1, C/RESOURCE2, NEGATIVE) [3. negative cooccurrence]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-a AND b -> ~c [basic negative cooccurrence condition]
-X b -> X ~d ["dependent" escapes its "leader"]
-
-R: driven/emulated solely by disjunct failover domains
- - XXX and possibly with `follow_service.sl` in `central_processing` mode
-
-P: driven by `colocation` constraint, specifying `-INFINITY`
- - using -INFINITY as value
- # pcs constraint colocation add B/RESOURCE1 with C/RESOURCE2 -INFINITY
- # pcs constraint colocation set C/RESOURCE2 B/RESOURCE1 setoptions score=-INFINITY
-
-COOCURENCE(B/RESOURCE1, C/RESOURCE2, SCORE) [4. score-based/advisory occurrence]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-TBD
-
-R: XXX not supported unless a way to emulate this using `central_processing`
- (?) or sharing the same `ordered` failover domain (?)
-
-P: driven by `colocation` constraint, specifying `SCORE` (value)
- # pcs constraint colocation add B/RESOURCE1 with c/RESOURCE2 SCORE
- # pcs constraint colocation set C/RESOURCE2 B/RESOURCE1 setoptions score=SCORE
-
-
-
-Relative resource-node assignment properties
-============================================
-
-Generally a relation expressed by a predicate PROPERTY(RESOURCE),
-implying modification of the behavior of cluster wrt. the node
-running RESOURCE:
-
-PROPERTY(RESOURCE) AND RUNNING(NODE, RESOURCE) -> ALTER(NODE)
-
-
-Resource stickiness property (not moving back to preferred location)
---------------------------------------------------------------------
-
-STICKY ::= STICKY(RESOURCE, FALSE)
- | STICKY(RESOURCE, TRUE)
- | STICKY(RESOURCE, STICKINESS), STICKINESS in {0, 1, 2, ...},
- 0~FALSE
-. STICKY(RESOURCE, FALSE) ... unsticky/cruising resource (default)
-. STICKY(RESOURCE, TRUE) ... sticky resource (flat model)
-. STICKY(RESOURCE, STICKINESS) ... sticky resource (prioritized model)
-
-assumed variables (+ constraints) to be combined with proper preconditions:
-. A1, A2 in NODES
-. B in RUNNABLE(A1) AND B in RUNNABLE(A2)
-. SCORE(B, A1) < SCORE(B, A2)
-
-propositional variables:
-. a ... RUNNING(A1, B)
-. b ... ACTIVE(A2)
-. c ... RUNNING(A2, B) resource X running (relocation if A1 != A2)
-
-R: driven by `/cluster/rm/failoverdomains/failoverdomain/@nofailback`
- - note: only applies to service/vm (not primitive resources)
-P: driven by `stickiness` parameter
- - group is a sum of stickiness values of underlying resources
-
-
-STICKY(B/RESOURCE, FALSE) [1. model of unsticky/cruising resource]
-~~~~~~~~~~~~~~~~~~~~~~~~~
-a AND b -> X c
-
-R: default, no need for that, otherwise specifying `@nofailback` as `0`
-
-P: default, no need for that, otherwise specifying `stickiness` as `0`
- # pcs resource meta B/RESOURCE stickiness=
- # pcs resource meta B/RESOURCE stickiness=0
-
-STICKY(B/RESOURCE, TRUE) [2. model of sticky resource]
-~~~~~~~~~~~~~~~~~~~~~~~~
-a AND b -> X a
-
-R: driven by specifying `@nofailback` as positive number
-
-P: driven by specifying `stickiness` as `INFINITY`
- # pcs resource meta B/RESOURCE stickiness=INFINITY
-
-STICKY(B/RESOURCE, STICKINESS) [3. model of sticky resource with priorities]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-TBD
-
-R: XXX not supported unless a way to emulate this using ordered failover
- domains(?)
-
-P: driven by specifying `stickiness` as `STICKINESS` (value)
- # pcs resource meta B/RESOURCE stickiness=STICKINESS
-
-
-Node-exclusiveness resource property (optionally with priority-based preemption)
---------------------------------------------------------------------------------
-
-EXCLUSIVE ::= EXCLUSIVE(RESOURCE, FALSE)
- | EXCLUSIVE(RESOURCE, TRUE)
- | EXCLUSIVE(RESOURCE, PRIORITY), PRIORITY in {0, 1, ...}, 0~FALSE
-. EXCLUSIVE(RESOURCE, FALSE) ... non-exclusive resource (default)
-. EXCLUSIVE(RESOURCE, TRUE) ... exclusive (flat model)
-. EXCLUSIVE(RESOURCE, PRIORITY) ... exclusive (prioritized pre-emptive model)
-
-assumed variables (+ constraints) to be combined with proper preconditions:
-. A in NODES
-. B, C in RUNNABLE(A)
-. I, J in {0, 1, ...}: I > J
-
-R: driven by `/cluster/rm/<service>/@exclusive`
- - note: only applies to service/vm (not primitive resources)
-P: driven by `utilization` constraint
- (or possibly by a set of `colocation` constraints:
- for all r in RESOURCES\RESOURCE: COOCCURRENCE(RESOURCE, r, -INF) [1]
- (see [3. negative cooccurrence])
-
-[1. model of non-node-exclusive/co-occurrence-positive resource, based on 2.]
-for all B' in RUNNABLE(A): EXCLUSIVE(B', FALSE) [implies EXCLUSIVE(B, FALSE)]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~(a OR b) OR ~(~a -> ~b R ~a AND ~b -> ~a R ~b)
-= ~(a OR b) OR ~(~a -> ~b R ~a) OR ~(~b -> ~a R ~b)
-= ~(a OR b) OR ~(a OR ~b R ~a) OR ~(b OR ~a R ~b)
-= ~(a OR b) OR ~a AND ~(~b R ~a) OR ~b AND ~(~a R ~b)
-= ~(a OR b) OR ~a AND ~(~(a U b)) OR ~b AND ~(~(b U a))
-= ~(a OR b) OR ~a AND a U b OR ~b AND b U a
-= ~(a OR b) OR b OR a
-= ~a AND ~b OR b OR a [= true, i.e. no restriction wrt. modelled property, QED]
-. a ... RUNNING(A, B)
-. b ... exists B' in 2^RUNNABLE(A)\{}: RUNNING(A, B')
-
-R: default (`@exclusive` = 0)
-
-P: default (no such purposefully full utilization of node resources
- specified)
- - pcs: support is arriving
- (https://bugzilla.redhat.com/show_bug.cgi?id=1158500)
-
-[2. flat model of node-exclusive/co-occurrence-less resource, no preemption]
-EXCLUSIVE(B, TRUE)
-~~~~~~~~~~~~~~~~~~
-~(a OR b) OR (~a -> ~b R ~a) AND (~b -> ~a R ~b) [mutual exclusion]
-. a ... RUNNING(A, B)
-. b ... exists YS in 2^(RUNNABLE(A)\{B})\{}: for all Y in YS: RUNNING(A, Y)
- (assuming valid state, i.e., exclusiveness property
- would be recursively satisfied also within YS)
-
-R: driven by the arrangement:
- - not `central_processing mode` and `@exclusive` != 0
-
-P: driven by the arrangement:
- - resources (presumably uniformly, but broken down to utilization
- of comprising primitives) require full utilization of what
- resources (presumably uniformly) each node provides
-
-[3. model of prioritized pre-emptive node-exclusive resource]
-EXCLUSIVE(B, I)
-EXCLUSIVE(C, J)
-~~~~~~~~~~~~~~~
-~(a OR c) OR (~a -> ~c R ~a) AND (~c -> ~a R ~c), [mutual exclusion]
-(b AND X a) -> (X ~b) [exlusivness priority wins]
-. a ... RUNNING(A, B)
-. b ... RUNNING(C, B)
-. c ... exists YS in 2^({Y | Y in RUNNABLE(A)
- AND (EXCLUSIVE(Y, FALSE)
- OR exists K > I: EXCLUSIVE(Y, K))}\{B}
- )\{}: for all Y' in YS: RUNNING(A, Y')
- (assuming valid state, i.e., exclusiveness property
- would be recursively satisfied also within YS)
-
-R: driven by the arrangement:
- - only in `central_processing mode`
- - https://access.redhat.com/site/node/47037
- - also see https://bugzilla.redhat.com/show_bug.cgi?id=744052#c4
- (also relevant to Pacemaker)
- - exclusive resource with value of the respective parameter specifying
- priority in the inverse sense (1 is highest, XXX or 0?)
-
-P: driven by the arrangement:
- - see 1. + prioritization defined by the means of priority per primitive,
- - https://access.redhat.com/site/solutions/65542
- - for 2., 3.:
- - however modelling "exclusive resource cannot be started on node,
- with non-exclusive resources already running" seems to be close
- to impossible (XXX or in a intrusive way, like setting default
- utilization + priority for those resources not overriding
- these defaults)?
-
-
-
-Explicit resource-node(s) assignment property
-=============================================
-
-Generally a relation expressed by a predicate PROPERTY(RESOURCE, NODE),
-implying modification of the behavior of cluster wrt. resource-node
-pair:
-
-PROPERTY(RESOURCE, NODE) -> ALTER((RESOURCE, NODE))
-
-
-Resource-node affinity
-----------------------
-
-AFFINITY ::= AFFINITY(RESOURCE, NODE, NONE)
- | AFFINITY(RESOURCE, NODE, FALSE)
- | AFFINITY(RESOURCE, NODE, TRUE)
- | AFFINITY(RESOURCE, NODE, WEIGHT), WEIGHT in {..., -1, 0, 1, ...},
- 0~NONE, -INF~FALSE, +INF~TRUE
-. AFFINITY(RESOURCE, NODE, NONE) ... no special affinity (default)
-. AFFINITY(RESOURCE, NODE, FALSE) ... anti-affinity (the node cannot run)
-. AFFINITY(RESOURCE, NODE, TRUE) ... node forms a set of executive nodes
-. AFFINITY(RESOURCE, NODE, WEIGHT) ... prioritized model
-
-assumed variables (+ constraints) to be combined with proper preconditions:
-. AN in NODES^2\{}
-. B in intersection( { RUNNABLE(A) | A in AN } )
-
-propositional variables:
-. a ... RUNNING(A', B)
-. b ... A' in AN
-. c ... STICKY(B, FALSE) <-- see above
-. d ... A' in {A'' | A'' in AN: WEIGHT(B, A'') == max({WEIGHT(B, A''')
- | A''' in AN})}
-
-R: driven by the failoved domains arrangement for given service/vm
- - XXX check that RGManager indeed behaves like Pacemaker's
- `symmetric-cluster`
-P: driven by `location` constraint
- - only default `symmetric-cluster` is considered
-
-exists A in AN: AFFINITY(B, A, NONE) [1. no resource-node affinity]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-R: driven by general arrangement patterns (possibilities with "NONE"):
- - if for all A in AN: AFFINITY(B, A, NONE):
- - nodes AN form attached failover domain, and this is either not `ordered`
- or with the same `priority` for ordering
- - alternatively, service/vm B has no failoverdomain explicitly attached
- - else if for all A in AN: AFFINITY(B, A, NONE) OR AFFINITY(B, A, TRUE):
- - nodes AN for which A in AN: AFFINITY(B, A, TRUE) form attached failover
- domain, and this is not `restricted` (to allow those "NONE" nodes to
- be ever used)
- - or nodes AN form attached failover domain, and it is `ordered` with
- two levels of priorities (for TRUE higher, for NONE lower)
- - else if for all A in AN: AFFINITY(B, A, NONE) OR AFFINITY(B, A, FALSE):
- - nodes AN for which A in AN: AFFINITY(B, A, NONE) form attached failover
- domain, and this is either not `ordered` or with the same priority for
- ordering, and has to be `restricted` to avoid slipping nodes
- A in AN: AFFINITY(B, A, FALSE)
- - else if for all A in AN: AFFINITY(B, A, NONE) OR AFFINITY(B, A, FALSE)
- OR AFFINITY(B, A, TRUE):
- - intersection of the previous two cases
- - else if for all A in AN: AFFINITY(B, A, NONE) OR AFFINITY(B, A, WEIGHT),
- -INFINITY < WEIGHT < INFINITY:
- - either any WEIGHT < 0 becomes truncated to 0 (hence dropping losing
- part of the configuration), or if such one present, the whole range
- is rescaled to 0 < WEIGHT < INFINITY/numeric equivalent
- and those member nodes having no affinity in this case have
- lowest priority (hence highest `priority` value)
- - either way, leads to AN forming attached failover domain, and it has
- to be `ordered` with priorities as per previous point
- - else?
-
-P: default, no need for that, otherwise specifying `score` as `0`
- # pcs constraint location B prefers A= (??? to remove it as such)
- # pcs constraint location B prefers A=0
- # pcs contraint location add SOMEID B A 0
-
-exists A in AN: AFFINITY(B, A, FALSE) [2. antagonist resource-node affinity]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-X a -> X ~b
-
-R: driven by this arrangement:
- - if for all A in AN: AFFINITY(B, A, FALSE):
- - nodes NODES\AN form attached failover domain, which has to
- be `restricted` to prevent slipping onto any node in AN
- - else:
- - combine using patterns as in 1.
-
-P: by specifying (directly or indirectly) `score` as `-INFINITY`
- # pcs constraint location B avoids A
- # pcs constraint location B avoids A=INFINITY
- # pcs constraint location B prefers A=-INFINITY (???)
- # pcs contraint location add SOMEID B A -INFINITY
- # crm_resource --ban --resource B --host A ...
-
-exists A in AN: AFFINITY(B, A, TRUE) [3. (positive) resource-node affinity]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-X a -> X b
-
-R: driven by this arrangement:
- - if for all A in AN: AFFINITY(B, A, TRUE):
- - nodes AN form selected failover domain
- - else:
- - combine using patterns as in 1.
-
-P: by specifying (directly or indirectly) `score` as `INFINITY`
- # pcs constraint location B prefers A
- # pcs constraint location B prefers A=INFINITY
- # pcs constraint location B avoids A=-INFINITY (???)
- # pcs contraint location add SOMEID B A INFINITY
-
-[4. model of resource-node affinity with priorities]
-for all A in AN: AFFINITY(B, A, -INFINITY < WEIGHT(B,A) < INFINITY)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-X a AND c -> X d [when not sticky, resource will run on the node
- this resource has greatest affinity to]
-
-R: driven by this arrangement:
- - see the respective pattern at 1.
-
-P: by specifying `score` as WEIGHT
- # pcs constraint location B {prefers|avoids} A=WEIGHT(B,A)
- # pcs constraint location add SOMEID B A WEIGHT(B,A)
-
-
-Initial exclusive resource-node affinity
-----------------------------------------
-
-TBD:
-https://bugzilla.redhat.com/994215#RFE--Control-which-node-a-service-autostarts-on
-
-
-
-References
-==========
-
-[1] http://oss.clusterlabs.org/pipermail/users/2016-January/002197.html
-
-: vim: set ft=rst: <-- not exactly, but better than nothing