
Libelection
Library to perform leader election in a cluster of containerized Elixir nodes.
Installation
def deps do
[{:libelection, "~> 0.3.0"}]
end
Usage
if Election.leader? do
# Code path executed only by the leader node
else
# Code path executed by followers
end
How it works
Polls the API of the configured container orchestration platform to determine the oldest node of the cluster.
To configure the polling interval use:
config :libelection, :polling_interval, 2_000 # 2 seconds
To configure the function which lists the node of the cluster use:
config :libelection, :list_nodes, {module, function, args}
# it can also be a function reference
config :libelection, :list_nodes, &SomeModule.some_function/1
Configure the logger
config :libelection, :logger, %{level: :debug} # Default
Note: The configuration also supports confex style configurations.
Election Strategies
Rancher
The create_index identifier is used to pick the leader.
config :libelection,
strategy: Election.Strategy.Rancher,
rancher_node_basename: "some-app"
Kubernetes
The resourceVersion identifier
is used to pick the leader.
config :libelection,
strategy: Election.Strategy.Kubernetes,
kubernetes_selector: "app=some-app",
kubernetes_node_basename: "some-app"
Documentation
- exdoc
- wiki (coming soon)