Appendix C. Sample ha.conf Configuration File

This appendix contains an example ha.conf configuration file. The sections in this appendix are as follows:

Cluster Configuration

The example configuration file in the next section describes a cluster with these characteristics:

  • The nodes are two rackmount Origin2000 servers with the hostnames failsafe1 and failsafe2 (rackmount Origin2000s have MMSC system controllers).

  • Interface ef0 on failsafe1 has the fixed IP address failsafe1. Similarly, interface ef0 on failsafe2 has the fixed IP address failsafe2.

  • Interface ef0 on failsafe1 has an IP alias called stocks. Similarly, ef0 on failsafe2 has an IP alias called bonds.

  • Two XLV logical volumes use disk space on shared disk storage. The primary node for both of them is failsafe1. The volumes are /dev/xlv/vol_shared1 and /dev/xlv/vol_shared2.

  • The volume /dev/xlv/vol_shared1 has a filesystem that is mounted at /shared1. Similarly, the volume /dev/xlv/vol_shared2 has a filesystem that is mounted at /shared2.

  • The filesystems mounted at /shared1 and /shared2 on failsafe1 are exported for NFS mounting. Clients mount the filesystems using the IP alias stocks.

  • Each node is a web server for the Netscape Enterprise Server.

  • Clients access the Enterprise Server on failsafe1 using the IP address 192.0.2.3 and port number 443. Similarly, clients access the Enterprise Server on failsafe2 using the IP address 192.0.2.4 and port number 443. These are high-availability IP addresses that have been ifconfig'd to the ef0 interfaces on their nodes.

These IRIS FailSafe configuration choices have been made:

  • IRIS FailSafe e-mail notifications are sent to the account fsafe_admin on the local node.

  • If one node has a power failure, the other node should attempt to go to degraded state.

  • All failures should cause failovers.

  • The serial port /dev/ttyd2 on each node is used for the serial cable to the system controller port on the other node.

  • Both nodes should move to normal state after a failure.

  • If the interface ef0 on failsafe1 fails, its high-availability IP address (IP alias) stocks is failed over to interface ef0 on failsafe2. Similarly, if the interface ef0 on failsafe2 fails, its high-availability IP address (IP alias) bonds is failed over to interface ef0 on failsafe1.

  • If the private network fails, IRIS FailSafe uses the public network and the ef0 interfaces (IP addresses failsafe1 and failsafe2) instead.

  • Re-MACing isn't needed.

  • The statmon directory for the filesystems mounted at /shared1 and /shared2 is /shared1/statmon.

  • After a failover, don't restart the Enterprise Server on the surviving node.

  • Monitor the Enterprise Servers using type 3 monitoring and the search string ns-httpd.

Configuration File

The configuration file shown below describes the configuration described in the previous section.

system-configuration
{
        mail-dest-addr = [email protected]
        pwrfail = true
        monitor-failures = on
}

node failsafe1
{
        interface failsafe1-ef0
        {
                name = ef0
                ip-address = failsafe1
                netmask = 0xffffff00
                broadcast-addr = 192.0.2.255
        }
        heartbeat
        {
                hb-private-ipname = priv-failsafe1
                hb-public-ipname = failsafe1
                hb-probe-time = 5
                hb-timeout = 5
                hb-lost-count = 3
        }
        reset-tty = /dev/ttyd2
        sys-ctlr-type = MMSC
        controlled-failback = false
}

node failsafe2
{
        interface failsafe2-ef0
        {
                name = ef0
                ip-address = failsafe2
                netmask = 0xffffff00
                broadcast-addr = 192.0.2.255
        }
        heartbeat
        {
                hb-private-ipname = priv-failsafe2
                hb-public-ipname = failsafe2
                hb-probe-time = 5
                hb-timeout = 5
                hb-lost-count = 3
        }
        reset-tty = /dev/ttyd2
        sys-ctlr-type = MMSC
        controlled-failback = false
}

interface-pair one
{

        primary-interface = failsafe1-ef0
        secondary-interface = failsafe2-ef0
        re-mac = false
        netmask = 0xffffff00
        broadcast-addr = 192.0.2.255
        ip-aliases = ( stocks )
}

interface-pair two
{

        primary-interface = failsafe2-ef0
        secondary-interface = failsafe1-ef0
        re-mac = false
        netmask = 0xffffff00
        broadcast-addr = 192.0.2.255
        ip-aliases = ( bonds )
}

application-class volumes
{
       server-node = failsafe1
       server-node = failsafe2
}

volume vol_shared1
{
        server-node = failsafe1
        backup-node = failsafe2
        devname = vol_shared1
}

volume fs1_1
{
        server-node = failsafe1
        backup-node = failsafe2
        devname = vol_shared2
}

application-class filesystems
{
       server-node = failsafe1
}

filesystem fs_shared1
{
        mount-point = /shared1
        mount-info
        {
                fs-type = xfs
                volume-name = vol_shared1
                mode = rw,noauto
        }
}

filesystem fs_shared2
{
        mount-point = /shared2
        mount-info
        {
                fs-type = xfs
                volume-name = vol_shared2
                mode = rw,noauto
        }
}

application-class nfs
{
        server-node  failsafe1
        {
                statmon-dir = /shared1/statmon
                ip-aliases = ( stocks )
        }
}

nfs  nfs_shared1
{
        filesystem = fs_shared1
        export-point = /shared1
        export-info = rw,wsync,anon=root
        ip-address = stocks
}

nfs  nfs_shared2
{
        filesystem = fs_shared2
        export-point = /shared2
        export-info = rw,wsync,anon=root
        ip-address = stocks
}

application-class webserver
{
        server-node = failsafe1
        server-node = failsafe2
}

webserver web-stocks
{
        server-node = failsafe1
        backup-node = failsafe2
        httpd-script = /etc/init.d/ns_enterprise
        httpd-options-file = ns_enterprise.options
        httpd-restart = false
        webserver-num = 1
        web-config1
        {
                monitoring-level = 3
                search-string = ns-httpd
                ip-address = 192.0.2.3
                port-num = 443
                httpd-dir = /usr/ns-home/https-stocks
        }
}

webserver web-bonds
{
        server-node = failsafe2
        backup-node = failsafe1
        httpd-script = /etc/init.d/ns_enterprise
        httpd-options-file = ns_enterprise.options
        httpd-restart = false
        webserver-num = 1
        web-config1
        {
                monitoring-level = 3
                search-string = ns-httpd
                ip-address = 192.0.2.4
                port-num = 443
                httpd-dir = /usr/ns-home/https-bonds
        }
}

application-class main
{
        server-node = failsafe1
        server-node = failsafe2
}

action main
{
        giveaway = /var/ha/actions/giveaway
        giveback = /var/ha/actions/giveback
        takeback = /var/ha/actions/takeback
        takeover = /var/ha/actions/takeover
        kill = /usr/etc/ha_kill
}

action-timer main
{
        start-monitor-time = 90
}

internal
{
        short-timeout = 5
        long-timeout = 60
        version-major = 1
        version-minor = 2
}

application-class interfaces
{
        server-node = failsafe1
        server-node = failsafe2
        agent = /usr/etc/ha_ifa
}

interface-agent {
        start-monitor-time = 60
        interface-probe-interval = 30
        interface-probe-timeout = 20
        remote-send-probe-interval = 25
        remote-send-timeout = 10
}

action-timer interfaces
{
        start-monitor-time = 60
        lmon-probe-time = 60
        lmon-timeout = 60
        retry-count = 5
}

action interfaces
{
        local-monitor = /var/ha/actions/ha_ifa_lmon
}

action-timer volumes
{
        start-monitor-time = 300
        lmon-probe-time = 300
        lmon-timeout = 60
        retry-count = 1
}

action volumes
{
        local-monitor = /var/ha/actions/ha_vol_lmon
}

action-timer filesystems
{
        start-monitor-time = 60
        lmon-probe-time = 120
        lmon-timeout = 60
        retry-count = 1
}

action filesystems
{
        local-monitor = /var/ha/actions/ha_filesys_lmon
}

action-timer nfs
{
        start-monitor-time = 60
        lmon-probe-time = 60
        lmon-timeout = 120
        retry-count = 2
}

action nfs
{
        local-monitor = /var/ha/actions/ha_nfs_lmon
}

action-timer webserver
{
        start-monitor-time = 60
        lmon-probe-time = 20
        lmon-timeout = 30
        retry-count = 1
}

action webserver
{
        local-monitor = /var/ha/actions/ha_web_lmon
}