Managing HP Serviceguard for Linux, Seventh Edition, July 2007

Designing Highly Available Cluster Applications
Designing Applications to Run on Multiple Systems
Appendix B330
Assign Unique Names to Applications
A unique name should be assigned to each application. This name should
then be configured in DNS so that the name can be used as input to
gethostbyname(3), as described in the following discussion.
Use DNS
DNS provides an API which can be used to map hostnames to IP
addresses and vice versa. This is useful for BSD socket applications such
as telnet which are first told the target system name. The application
must then map the name to an IP address in order to establish a
connection. However, some calls should be used with caution.
Applications should not reference official hostnames or IP addresses.
The official hostname and corresponding IP address for the hostname
refer to the primary LAN card and the stationary IP address for that
card. Therefore, any application that refers to, or requires the hostname
or primary IP address may not work in an HA environment where the
network identity of the system that supports a given application moves
from one system to another, but the hostname does not move.
One way to look for problems in this area is to look for calls to
gethostname(2) in the application. HA services should use
gethostname() with caution, since the response may change over time if
the application migrates. Applications that use gethostname() to
determine the name for a call to gethostbyname(3) should also be
avoided for the same reason. Also, the gethostbyaddr() call may return
different answers over time if called with a stationary IP address.
Instead, the application should always refer to the application name and
relocatable IP address rather than the hostname and stationary IP
address. It is appropriate for the application to call gethostbyname(3),
specifying the application name rather than the hostname.
gethostbyname(3) will pass in the IP address of the application. This IP
address will move with the application to the new node.
However, gethostbyname(3) should be used to locate the IP address of
an application only if the application name is configured in DNS. It is
probably best to associate a different application name with each
independent HA service. This allows each application and its IP address
to be moved to another node without affecting other applications. Only
the stationary IP addresses should be associated with the hostname in
DNS.