krisleech
Distributed cluster with libcluster and gossip protocol
We are deploying an Elixir application to production for the first time (first ever Elixir app for me
) and realised that we need to cluster the nodes because things like Quantum will run on every instance, with a cluster we can configure it to run on a single node.
We are using libcluster with the gossip strategy and it works locally.
We can start two iex sessions with different names and they form a cluster.
We can see the other nodes with Node.list().
However once deployed to AWS, whilst we can manually connect the nodes, they do not automatically connect.
In the logs we can see the gossip protocol heartbeat.
Given we can connect manually and we see the heartbeat are there other reasons this might be failing?
This is how we have things setup:
defmodule Shared.Application do
use Application
def start(_type, _args) do
children =
[
{
Cluster.Supervisor,
[
cluster_topologies(),
[name: Shared.ClusterSupervisor]
]
}
]
opts = [strategy: :one_for_one, name: Shared.Supervisor]
Supervisor.start_link(children, opts)
end
defp cluster_topologies do
[
gossip: [
strategy: Cluster.Strategy.Gossip
]
]
end
end
Any ideas much appreciated!
Marked As Solved
LostKobrakai
The default for the gossip strategy is to use multicast, which is not necessarily supported by all networks as mentioned on later docs to what you linked: Cluster.Strategy.Gossip — libcluster v3.4.1
Also Liked
albydarned
Just tried EPMD, and it works flawlessly with the local DNS names I set up inside of AWS. For some reason I just cannot get Gossip or Postgres to connect automatically when in release mode.







