Service Tunables

This chapter focuses on service configuration keywords affecting the orchestration policies.

orchestrate

The DEFAULT.orchestrate keyword specifies the daemon behaviour regarding service start orchestration, which is not enabled by default.

Possible values:

  • no
    • no instance is started automatically

    • takeover can be used to relocate the service

    • giveback is useful to relocate the service to the natural leader

    • use this setting for all 1.8 services without DEFAULT.autostart_node

  • start
    • only the instance on the natural leader is started

    • takeover can be used to relocate the service

    • giveback is useful to relocate the service to the natural leader

    • use this setting for all 1.8 services with DEFAULT.autostart_node

  • ha
    • an instance is started on the best available node

    • takeover can be used to relocate the service

    • giveback is useful to relocate the service to the best available node

    • use this setting for all 1.8 services under OpenHA control

placement

When a service instance needs starting, the opensvc daemons of the nodes listed in the service DEFAULT.nodes each run the placement policy algorithm specified by DEFAULT.placement.

This algorithm decides if the local node is the best candidate node, and if so, the daemon transition the service in ready state.

Nodes unreachable, with affinity or constraints violations are discarded from the placement policies candidate nodes.

nodes order

The first node in the nodes list gets the highest placement priority.

load avg

The node with the lowest load average gets the highest placement priority.

spread

A static random ranking. The more services, the better the leveling.

shift

If the service name starts with an index, like scaler slaves, use that index as a shift on the nodes list and apply the nodes order ranking from there. This placement policy thus makes each slave of a scaler start behave as if the placement policy was “nodes order” and the nodes list shifted by one compared to the preceding slave.

score

Rank by descending node score. The highest scoring node is the leader. The score is a composite metric obtained by a weighted average of 100/load, %avail memory and %avail swap. The weights favor 1/ avail swap 2/ avail mem 3/ lower load average.

Note

A frozen node is excluded from the node candidates list. If the placement leader is frozen, then a new leader is elected, according to the placement policy. If all cluster nodes are frozen, service placement warning messages are disabled.

constraints

An expression evaluating as a boolean, constraining the service instance placement to nodes where constraints evaluates as True.

Supported syntax:

  • comparison operators are == != > >= <= in (e1 e2) in [e1 e2]

  • arithmetic operators are * + - / ** // %

  • binary operators are & | ^

  • negation operator is not

  • boolean operators are and or

  • references are allowed

  • Strings, and references evaluating as strings, containing dots must be quoted

Examples:

  • constraints = $("{nodename}"=="node2.acme.com")

  • constraints = $("{nodename}"=="node1" or "{node.env}" in (DEV, TST))

Note

  • The constraints are not honored by manual start operations.

  • The constraints violation notification is added to “print status” and “json status” outputs

hard_affinity

A whitespace-separated list of service names. The orchestrator won’t propose to start a local instance of the service if all specified services don’t have a local running instance.

For example, if svc1 can listens on a unix socket used by svc2, those services must run on the same node.

Service

Nodes

Orchestrator Action

Comments

n1

n2

svc1

up
down

svc2

down
leader
down

start on n1

down
down
leader

start on n1

Although placement policy is set to nodes order with n2 as first node, n1 will be prefered.

down
leader
frozen
down

none

hard affinity can’t be satisfied, the service won’t be started.

hard_anti_affinity

A whitespace-separated list of service names. The orchestrator won’t propose to start a local instance of the service if any of the specified services have a local running instance.

For example, if svc2 must never be executed on same node than svc1, those services must run on different nodes.

Service

Nodes

Orchestrator Action

Comments

n1

n2

svc1

up
down

svc2

down
down
leader

start on n2

down
leader
down

start on n2

Although placement policy is set to nodes order with n1 as first node, n2 will be preferred

down
down
leader
frozen

none

hard affinity can’t be satisfied, the service won’t be started.

soft_affinity

A whitespace-separated list of service names. If the local node is not the only candidate, the orchestrator won’t propose to start a local instance of the service if all specified services don’t have a local running instance.

For example, if svc1 and svc2 are known to have better performance when executed on the same node, those services should run on the same node.

Service

Nodes

Orchestrator Action

Comments

n1

n2

svc1

up
down

svc2

down
leader
down

start on n1

down
down
leader

start on n1

Although placement policy is set to nodes order with n2 as first node, n1 will be preferred

down
leader
frozen
down

start on n2

soft affinity can’t be satisfied, as a best effort, the service will be started on n2

soft_anti_affinity

A whitespace-separated list of service names. If the local node is not the only candidate, the orchestrator won’t propose to start a local instance of the service if any of the specified services have a local running instance.

For example, if svc2 should never be executed on same node than svc1, those services should run on different nodes.

Service

Nodes

Orchestrator Action

Comments

n1

n2

svc1

up
down

svc2

down
down
leader

start on n2

down
leader
down

start on n2

Although placement policy is set to nodes order with n1 as first node, n2 will be preferred

down
down
leader
frozen

start on n1

hard affinity can’t be satisfied, as a best effort, the service will be started on n1

Note

hard_affinity and soft_affinity cause a startup serialization.

Note

All services in a affinity relationship must be in the same cluster.

parents

This keyword stores a list of services that must be avail up for the agent daemon to proceed on starting the service.

A typical use case is to modelize services dependency:

  • svc1 and svc2 are mutually dependent

  • svc1 must be started first, and then svc2 is able to start once svc1 is up.

To set up this setting:

$ om svc2 set --kw parents+=svc1

Note

svc1 and svc2 must be in the same cluster

children

A service with DEFAULT.children set to a list of tiers services hosted in the same cluster, waits for children to all reach the down aggregate avail status before processing a stop order.

A typical use case is to modelize services dependency:

  • svc1 and svc2 are mutually dependent

  • svc1 can’t be stopped before svc2 is down.

To set up this setting:

$ om svc1 set --kw children+=svc2

Note

svc1 and svc2 must be in the same cluster