Managing Serviceguard Eighteenth Edition, September 2010
Avoid Using SPU IDs or MAC Addresses
Design the application so that it does not rely on the SPU ID or MAC (link-level)
addresses. The SPU ID is a unique hardware ID contained in non-volatile memory,
which cannot be changed. A MAC address (also known as a LANIC id) is a link-specific
address associated with the LAN hardware. The use of these addresses is a common
problem for license servers, since for security reasons they want to use hardware-specific
identification to ensure the license isn't copied to multiple nodes. One workaround is
to have multiple licenses; one for each node the application will run on. Another way
is to have a cluster-wide mechanism that lists a set of SPU IDs or node names. If your
application is running on a system in the specified set, then the license is approved.
Previous generation HA software would move the MAC address of the network card
along with the IP address when services were moved to a backup system. This is no
longer allowed in Serviceguard.
There were a couple of reasons for using a MAC address, which have been addressed
below:
• Old network devices between the source and the destination such as routers had
to be manually programmed with MAC and IP address pairs. The solution to this
problem is to move the MAC address along with the IP address in case of failover.
• Up to 20 minute delays could occur while network device caches were updated
due to timeouts associated with systems going down. This is dealt with in current
HA software by broadcasting a new ARP translation of the old IP address with
the new MAC address.
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(), 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(2) should also
432 Designing Highly Available Cluster Applications