6.3. Colocation of Resources
A colocation constraint determines that the location of one resource depends on the location of another resource.
There is an important side effect of creating a colocation constraint between two resources: it affects the order in which resources are assigned to a node. This is because you cannot place resource A relative to resource B unless you know where resource B is. So when you are creating colocation constraints, it is important to consider whether you should colocate resource A with resource B or resource B with resource A.
Another thing to keep in mind when creating colocation constraints is that, assuming resource A is collocated with resource B, the cluster will also take into account resource A's preferences when deciding which node to choose for resource B.
The following command creates a colocation constraint.
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
For information on master and slave resources, see Section 8.2, “Multi-State Resources: Resources That Have Multiple Modes”.
Table 6.3, “Properties of a Colocation Constraint”. summarizes the properties and options for configuring colocation constraints.
Table 6.3. Properties of a Colocation Constraint
The colocation source. If the constraint cannot be satisfied, the cluster may decide not to allow the resource to run at all.
The colocation target. The cluster will decide where to put this resource first and then decide where to put the source resource.
Positive values indicate the resource should run on the same node. Negative values indicate the resources should not run on the same node. A value of +
6.3.1. Mandatory Placement
Mandatory placement occurs any time the constraint's score is
-INFINITY. In such cases, if the constraint cannot be satisfied, then the source_resource is not permitted to run. For
score=INFINITY, this includes cases where the target_resource is not active.
If you need
myresource1to always run on the same machine as
myresource2, you would add the following constraint:
pcs constraint colocation add myresource1 with myresource2 score=INFINITY
INFINITYwas used, if
myresource2cannot run on any of the cluster nodes (for whatever reason) then
myresource1will not be allowed to run.
Alternatively, you may want to configure the opposite, a cluster in which
myresource1cannot run on the same machine as
myresource2. In this case use
pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
Again, by specifying
-INFINITY, the constraint is binding. So if the only place left to run is where
myresource2already is, then
myresource1may not run anywhere.