phoenixframework/dns_cluster

Simple DNS clustering for distributed Elixir nodes

Elixir

246

38 commits

updated Sep 15, 2026

See the code

README

DNSCluster

Simple DNS clustering for distributed Elixir nodes.

Installation

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

def deps do
  [
    {:dns_cluster, "~> 0.2"}
  ]
end

Next, you can configure and start the cluster by adding it to your supervision tree in your application.ex:

children = [
  {Phoenix.PubSub, ...},
  {DNSCluster, query: Application.get_env(:my_app, :dns_cluster_query) || :ignore},
  MyAppWeb.Endpoint
]

Then in your config file, add:

config :my_app, :dns_cluster_query, ["app.internal"]

If you are deploying with Elixir releases, the release must be set to support longnames and the node must be named, using their IP address by default. These can be set in your rel/env.sh.eex file:

#!/bin/sh
export RELEASE_DISTRIBUTION=name
export RELEASE_NODE="myapp@fully-qualified-ip"

By default, nodes from the same release will have the same cookie. If you want different applications or releases to connect to each other, then you must set the RELEASE_COOKIE, either in your deployment platform or inside rel/env.sh.eex:

#!/bin/sh
...
export RELEASE_COOKIE="my-app-cookie"

Contributors

chrismccord

14 commits

davydog187

7 commits

josevalim

6 commits

janpieper

2 commits

phoenixframework/dns_cluster

Simple DNS clustering for distributed Elixir nodes

Elixir

246

38 commits

updated Sep 15, 2026

See the code

README

DNSCluster

Simple DNS clustering for distributed Elixir nodes.

Installation

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

def deps do
  [
    {:dns_cluster, "~> 0.2"}
  ]
end

Next, you can configure and start the cluster by adding it to your supervision tree in your application.ex:

children = [
  {Phoenix.PubSub, ...},
  {DNSCluster, query: Application.get_env(:my_app, :dns_cluster_query) || :ignore},
  MyAppWeb.Endpoint
]

Then in your config file, add:

config :my_app, :dns_cluster_query, ["app.internal"]

If you are deploying with Elixir releases, the release must be set to support longnames and the node must be named, using their IP address by default. These can be set in your rel/env.sh.eex file:

#!/bin/sh
export RELEASE_DISTRIBUTION=name
export RELEASE_NODE="myapp@fully-qualified-ip"

By default, nodes from the same release will have the same cookie. If you want different applications or releases to connect to each other, then you must set the RELEASE_COOKIE, either in your deployment platform or inside rel/env.sh.eex:

#!/bin/sh
...
export RELEASE_COOKIE="my-app-cookie"

Contributors

chrismccord

14 commits

davydog187

7 commits

josevalim

6 commits

janpieper

2 commits

Languages

Elixir

100.0%