Managing Serviceguard 11th Edition, Version A.11.16, Second Printing June 2004

Designing Highly Available Cluster Applications
Designing Applications to Run on Multiple Systems
Appendix C 375
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.