The mtop
and mc
binaries use DNS for both connecting to and discovering
Memcached servers. They use both the system resolver and an internal DNS
resolver based on the server hostnames provided. How that works and design
decisions made for the internal DNS resolver are detailed below.
If hostnames given to mtop
or mc
are prefixed with special strings, the
internal DNS resolver is used to perform an initial resolution depending on
the prefix. If the hostnames given to mtop
are mc
are not prefixed with
the special strings described below, no initial resolution is performed.
If the hostname is prefixed with dns+
, the hostname is resolved as A
and AAAA
records. The IP address of each record will be treated as a
Memcached server. This resolution is only performed a single time at
application start.
If the hostname is prefixed with dnssrv+
, the hostname is resolved as a
SRV
record. The target
field of each record will be treated as a Memcached
server. The port
field of the SRV
record is ignored. Instead, the port
portion of the server name from command line arguments is used. The target
used for the Memcached server is resolved at connection time using the system
resolver.
mtop
and mc
use an internal DNS resolver when given hostnames that are
prefixed with special strings (dns+
and dnssrv+
). How resolution is
performed is described below.
- Configuration is loaded from
/etc/resolv.conf
. Configuration is only loaded a single time at application start up. Only a subset of possible settings and options are supported. Notably, search domains are not supported. All supplied hostnames are assumed to be fully qualified. The supported settings and options are:- Top-level setting
nameserver
- An IP address of DNS server to use for resolution. If not set,127.0.0.1
is used as a default. - Option
timeout:n
- Number of seconds after which a DNS request is considered timed out. If not set,5
seconds is used as a default. - Option
attempts:n
- Total number of attempts to make to resolve a hostname. If not set,2
attempts are made. - Option
rotate
- If set, use a differentnameserver
for each request instead of always starting with the first one. If not set, each request will always start with the firstnameserver
.
- Top-level setting
- If the hostname has a special prefix, either
A
andAAAA
resolutions of the hostname are performed or aSRV
resolution is performed.- A
dns+
prefix will causeA
andAAAA
resolutions to be performed. All results from these two DNS queries are used as Memcached servers with the port supplied as a command line argument. If using TLS, the hostname supplied on the command line is used to validate to the server certificate (unless overridden by a command line flag). - A
dnssrv+
prefix will cause aSRV
resolution to be performed. Thetarget
of each result is used as a Memcached server with the port supplied as a command line argument. If using TLS, the hostname supplied on the command line is used to validate the server certificate (unless override by a command line flag). If thetarget
is a hostname, it will be resolved at connection time using the system resolver.
- A
- If the hostname does not have a special prefix, no resolution using the
internal DNS resolver is done. Instead, the hostname or hostnames are
each treated as individual servers. They will be resolved to
A
orAAAA
records at connection time using the system resolver. If using TLS, the hostname supplied on the command line is used to validate the server certificate (unless overridden by a command line flag).
These limitations apply when the internal DNS resolver is used.
resolv.conf
is only loaded a single time at application start up. This usually won't be a problem in practice because the internal DNS resolver is only used for an initial lookup when usingdns+
ordnssrv+
prefixes.- Search domains are not supported. Every domain is assumed to already be fully qualified.
- EDNS is not supported. One implication of this is that only the default UDP packet size of 512 bytes is used. DNS responses that do not fit into a 512 byte UDP packet will cause TCP fallback to be used.
- Results are not cached based on record TTLs or otherwise. This usually won't
be a problem in practice because the internal DNS resolver is only used for
an initial lookup when using
dns+
ordnssrv+
prefixes.