|  Reliable 
              Network with SolarisTM
 Peter Baer Galvin
              Until recently, it was very difficult to configure a Solaris machine 
              to have redundant connections to a network, and to use them automatically 
              in case of a failure. Because of the magic of Solaris 8, the task 
              is now easy. If you are not IP Multipathing yet, you should be.
              The Problem
              Consider a Solaris host on a network. By default, it expects one 
              network connection per subnet to which it is being attached. If 
              it sees the same subnet on more than one interface, then one interface 
              is used for all outbound packets, and any interface can be used 
              by inbound packets (based on their destination addresses). Unfortunately, 
              if the one outbound interface fails, then traffic is outbound no 
              more.
              Until recently, there were two standard methods to solve this 
              problem. One was to buckle down and write scripts that would ping 
              a device (say the default gateway). If the ping failed, the script 
              could configure another interface on that subnet to handle the traffic. 
              Of course, scripts must be debugged, supported, and updated, annoying 
              their authors.
              Alternatively, the Ethernet Trunking "Sun Consulting Special" 
              could be purchased from Sun Professional Services. This set of scripts 
              basically did the above work for you. Of course it cost money, and 
              was only somewhat supported by Sun.
              The problem is exacerbated by Sun servers' roles in a variety 
              of different architectures. One example is shown in Figure 1, which 
              shows a standard three-tier architecture, as might be found at a 
              Web site. Most firewalls and load balancer clusters automatically 
              manage their IP addresses during a failover. They always make an 
              IP address available to the tier "above" them. Likewise, 
              a database cluster has its IP addresses managed by the cluster software, 
              which moves IPs between cluster servers as needed. The only component 
              in this environment that does not provide such functionality is 
              the Sun servers. Should a network cable, a switch port, or host 
              bus adapter in the communications channel between the Sun and its 
              network go bad, the Sun will be unavailable. Although the facility 
              will continue to function by using the redundant server, user connections 
              may need to be reestablished, state could be lost, and performance 
              could be negatively affected.
              The Solution
              IP multipathing was introduced in Solaris 8 release 10/00. It 
              has quite a bit of useful functionality when two or more interfaces 
              are attached to the same subnet. These interfaces are called a "group". 
              The functionality includes:
              
              
             
               Automatic load balancing of outgoing connections over the group. 
                The load balancing is on a per-TCP-session basis. 
               Failover of a main IP address to an alternative interface, 
                should the primary fail to reach a remote destination. 
               Active-active or active-standby failover modes (the other interfaces 
                can be active or just used in case the primary fails). Active-active 
                is recommended. 
               Automatic fail-back once the failed component is fixed. 
               Built in to Solaris with full Sun support and no cost.
              IP multipathing does have some limitations and requirements as 
              well:
              
              
             
               Each interface in the group must have a unique MAC address. 
               Each adapter in the group must be of the same type (token ring, 
                Ethernet, etc.). 
               The interfaces on the same subnet must have an associated group 
                name. 
               Each interface in the group must have a test address. 
               Each interface should have a data address (for application 
                use). 
               Alternate pathing (AP) and IP multipathing appear to be mutually 
                exclusive. 
               It is best to use separate I/O boards or host bus adapters 
                for each interface in a group (rather than two interfaces from 
                the same QFE adapter, for example).
              IP multipathing functionality is implemented by a new daemon, 
              in.mpathd. For failure detection and correction to work, 
              each interface must be configured with an additional IP alias to 
              be used as a test address. This second IP address must be on the 
              same network as the real IP address. The test address may not be 
              used by applications. When in.mpathd is started, it periodically 
              sends out an ICMP ECHO request ("ping") to the host's 
              gateway from each test address. If the gateway doesn't respond, 
              it sends a multicast to find any other host. If one or more hosts 
              reply, one is chosen as a new ping target for testing. If no reply 
              is received, in.mpathd assumes the link is down and moves 
              all addresses on the interface, but the test address, to another 
              interface in the group. It continues to try the interface to recover 
              from failure once the problem is repaired, and returns the addresses 
              to their original interface when that happens.
              IP Multipathing Implementation
              To enable IP multipathing, several changes must be made to the 
              system. These can either be done at the command line, or as shown 
              here, in configuration files. For changes to be made permanent, 
              they must be made in configuration files.
              First, make sure that each interface has a unique MAC address 
              by issuing the command:
              
             
setenv local-mac-address? true
at the "ok" prompt, or the command:  
             
eeprom "local-mac-address?=true"
as root. A reboot is needed for this change to take effect, but make 
            the other configuration changes first to avoid repeated reboots.  Next, modify /etc/hosts to contain the additional network 
              addresses. It is a good practice to create an address for each interface 
              (the normal and dummy addresses). For IP multipathing, the system 
              needs test addresses for each interface as well. For host wb-1:
              
             
# External-facing interfaces
10.1.3.101 wb-1-e
10.1.3.102 wb-1-e-dummy
10.1.3.111 wb-1-e-qfe0
10.1.3.112 wb-1-e-qfe2
# Internal-facing-interfaces
10.1.4.1   wb-1-i
10.1.4.2   wb-1-i-dummy
10.1.4.11  wb-1-i-qfe1
10.1.4.12  wb-1-i-qfe3
Likewise, for wb-2:  
             
# External-facing interfaces
10.1.3.151 wb-2-e
10.1.3.152 wb-2-e-dummy
10.1.3.161 wb-2-e-qfe0
10.1.3.162 wb-2-e-qfe2
# Internal-facing-interfaces
10.1.4.51  wb-2-i
10.1.4.52  wb-2-i-dummy
10.1.4.61  wb-2-i-qfe1
10.1.4.62  wb-2-i-qfe3
The "group" name tells the system which interfaces are on 
            the same subnet, thus allowing proper test and result analysis.  Now update the /etc/hosts files to reflect the new network 
              names and enable IP multipathing on each set of interfaces. On wb-1:
              
             
/etc/hostname.qfe0:
wb-1-e-qfe0 netmask + broadcast + group wb-1-e deprecated -failover \
addif wb-1-e netmask + broadcast + failover up
/etc/hostname.qfe2:
wb-1-e-qfe2 netmask + broadcast + group wb-1-e deprecated -failover \
addif wb-1-e-dummy netmask + broadcast + failover up
Similarly, edit the files for qfe1 and qfe3. The "deprecated" 
            flag prevents the use of these addresses by applications, as they 
            are only for failover. The "failover" allows the system 
            to recover if an interface failure is detected.  Finally, a reboot of the system will enable IP multipathing. ifconfig 
              -a can be used to check the status of the interface groups and 
              their states. Any status changes are also reported via the syslog 
              mechanism. For example, a link or interface failure, as well as 
              the failover to correct the problem, will be reported there. Once 
              IP multipathing is up and running, the system will load balance 
              outbound connections across each interface in a group. in.mpathd 
              will monitor the interfaces to determine if there is a failure, 
              will fail traffic over to other group members on failure, and will 
              re-enable traffic once the failed interface is again functioning. 
              This functionality allows Solaris servers to be perfect members 
              of highly available facilities, such as the one depicted in Figure 
              1.
              Further configuration of failover parameters can be done in /etc/default/mpathd. 
              Here the fault detection and failover time can be changed from its 
              default ten seconds. Note that the system sends ICMP ECHO request 
              at a rate of ten times the failover time, so decreasing the failover 
              time will increase the amount of network traffic being sent to detect 
              a failure.
              An interesting use of IP multipathing can occur on a system with 
              only one interface per subnet. Here, the same configuration steps 
              can be performed. Although no resilience is provided, network, interface, 
              or host bus adapter failures are more accurately detected and reported.
              One problem with IP multipathing occurs on the Solaris 8 releases 
              10/00 and 04/01 when the router discovery daemon is in use (in.rdisc). 
              Extraneous ICMP errors occur when an interface in an IP Multipathing 
              group is pinged.
              For full details on IP multipathing in general, and the ping problem 
              in specific, see the very good "IP Network Multipathing" 
              Sun Blueprints Online document from August 2001, available at:
              
             
http://www.sun.com/blueprints/online.html
The best full reference for IP multipathing is in the documentation 
            set, entitled "IP Network Multipathing Administration Guide" 
            (available at docs.sun.com).  Thanks to Frank Corrao from Corporate Technologies for contributing 
              to this column.
              Peter Baer Galvin (http://www.petergalvin.org) 
              is the Chief Technologist for Corporate Technologies (www.cptech.com), 
              a premier systems integrator and VAR. Before that, Peter was the 
              systems manager for Brown University's Computer Science Department. 
              He has written articles for Byte and other magazines, and 
              previously wrote Pete's Wicked World, the security column, 
              and Pete's Super Systems, the systems management column for 
              Unix Insider (http://www.unixinsider.com). 
              Peter is coauthor of the Operating Systems Concepts and Applied 
              Operating Systems Concepts textbooks. As a consultant and trainer, 
              Peter has taught tutorials and given talks on security and systems 
              administration worldwide.
           |