GenServer managing a Redis Cluster (multiple redis-server nodes in cluster mode).
Starts N master nodes (with optional replicas), then uses redis-cli --cluster create
to form the cluster.
Usage
{:ok, pid} = RedisServerWrapper.Cluster.start_link(
masters: 3,
replicas_per_master: 1,
base_port: 7100
)
RedisServerWrapper.Cluster.healthy?(pid)
RedisServerWrapper.Cluster.node_addrs(pid)
RedisServerWrapper.Cluster.stop(pid)Options
:masters- number of master nodes (default: 3):replicas_per_master- replicas per master (default: 0):base_port- starting port (default: 7100). Note: 7000 is avoided because macOS AirPlay Receiver binds it by default, which causes confusing cluster-start failures on Mac.:bind- bind address (default: "127.0.0.1"):password- Redis password (default: nil):redis_server_bin- redis-server binary path:redis_cli_bin- redis-cli binary path:timeout- startup timeout per node in ms (default: 10_000):cluster_node_timeout- cluster node timeout in ms (default: 5000):loadmodule- modules loaded into every cluster node; accepts paths or{path, [args]}tuples (default:[]):extra- extra redis config directives as[{key, value}]:managed- process lifecycle backend forwarded to every node. SeeRedisServerWrapper.Serverfortrue,:forcola, andfalse. Onlymanaged: falsesupportsdetach/1.
Summary
Functions
Returns the seed node address (first node).
Checks if all nodes respond to PING.
Returns a specification to start this module under a supervisor.
Detaches daemonized cluster nodes so their OS processes survive this GenServer.
Checks cluster health via CLUSTER INFO (state=ok, all slots assigned).
Returns cluster info map.
Returns all node addresses.
Returns all node PIDs (GenServer pids, not OS pids).
Runs a redis-cli command against the seed node.
Stops the cluster.
Functions
@spec addr(GenServer.server()) :: String.t()
Returns the seed node address (first node).
@spec all_alive?(GenServer.server()) :: boolean()
Checks if all nodes respond to PING.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec detach(GenServer.server()) :: :ok | {:error, :managed_server}
Detaches daemonized cluster nodes so their OS processes survive this GenServer.
@spec healthy?(GenServer.server()) :: boolean()
Checks cluster health via CLUSTER INFO (state=ok, all slots assigned).
@spec info(GenServer.server()) :: map()
Returns cluster info map.
@spec node_addrs(GenServer.server()) :: [String.t()]
Returns all node addresses.
@spec nodes(GenServer.server()) :: [pid()]
Returns all node PIDs (GenServer pids, not OS pids).
@spec run(GenServer.server(), [String.t()]) :: {:ok, String.t()} | {:error, String.t()}
Runs a redis-cli command against the seed node.
@spec start(keyword()) :: GenServer.on_start()
@spec start_link(keyword()) :: GenServer.on_start()
@spec stop(GenServer.server()) :: :ok
Stops the cluster.