Skip to content

etcd clustering strategy for libcluster

License

Notifications You must be signed in to change notification settings

dkataskin/libcluster_etcd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hex.pm Version

LibclusterEtcd

Etcd strategy for libcluster. It utilisez Etcd v2 API.

Installation

The package can be installed by adding libcluster_etcd to your list of dependencies in mix.exs:

def deps do
  [
    {:libcluster_etcd, "~> 1.1.0"}
  ]
end

Configuration

Minimal configuration is list of etcd nodes etcd_nodes and directory name directory:

config :libcluster,
  topologies: [
    etcd: [
      strategy: LibclusterEtcd.Strategy,
      config: [
        etcd_nodes: ["http://10.0.0.1:2379", "http://10.0.0.2:2379"],
        directory: "cluster"
      ]
    ]
  ]

In addition to that you can control polling interval, ttl of the keys and ttl refresh interval, httpc options:

config :libcluster,
  topologies: [
    etcd: [
      strategy: LibclusterEtcd.Strategy,
      config: [
        etcd_nodes: ["http://10.0.0.1:2379", "http://10.0.0.2:2379"],
        directory: "cluster",
        ttl: 10_000,
        ttl_refresh_interval: 5_000,
        polling_interval: 5_000
      ]
    ]
  ]
Parameter Required? Default Value Description
etcd_nodes Yes List of etcd nodes
directory Yes Etcd directory to store cluster nodes registrations
ttl No 10_000 Node's registration ttl in ms. Uses etcd ttl to keep key alive.
ttl_refresh_interval No 5_000 How often to refresh ttl of a key, ms. Should be less than ttl.
polling_interval No 5_000 How often to scan directory and connect and disconnect nodes, ms.
http_opts No [ timeout: 10_000, connect_timeout: 2_000, autoredirect: false, relaxed: true ] httpc options used for each request to etcd.

ttl, ttl_refresh_interval, timeout and connect_timeout should be carefully chosen. If connect_timeout is greater or equal to ttl then most likely etcd key will expire before it will be renewed if etcd client tries to connect to a dead node.