This appendix contains an example ha.conf configuration file. The sections in this appendix are as follows:
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.
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 } |