Simple DNS clustering for distributed Elixir nodes.
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"