feat: configure dnscluster to allow multi-node

* Configure `docker-compose` to scale at least 2 nodes.
* Add script to start service with proper naming
* Create custom resolver.
  * This is not strictly necessary.
This commit is contained in:
2024-09-20 21:54:20 +00:00
parent 76d5fc9adf
commit b5eca5326f
8 changed files with 42 additions and 0 deletions

View File

@@ -15,6 +15,10 @@ defmodule Wabanex.Application do
WabanexWeb.Telemetry,
# Start the PubSub system
{Phoenix.PubSub, name: Wabanex.PubSub},
{DNSCluster,
query: Application.get_env(:wabanex, :dns_cluster_query) || :ignore,
log: :info,
resolver: Application.get_env(:wabanex, :dns_cluster_resolver) || DNSCluster.Resolver},
# Start the Endpoint (http/https)
WabanexWeb.Endpoint
# Start a worker by calling: Wabanex.Worker.start_link(arg)

View File

@@ -0,0 +1,26 @@
defmodule Wabanex.DevDNSClusterResolver do
@moduledoc """
Local DNS resolver for cluster query.
"""
require Record
Record.defrecord(:hostent, Record.extract(:hostent, from_lib: "kernel/include/inet.hrl"))
def basename(node_name) when is_atom(node_name) do
[basename, _] = node_name |> to_string() |> String.split("@")
basename
end
def connect_node(node_name) when is_atom(node_name) do
Node.connect(node_name)
end
def list_nodes, do: Node.list(:visible)
def lookup(query, type) when is_binary(query) and type in [:a, :aaaa] do
case :inet_res.getbyname(~c"#{query}", type) do
{:ok, hostent(h_addr_list: addr_list)} -> addr_list
{:error, _} -> []
end
end
end