Manual Chapter : BIG-IP Link Controller Reference Guide v4.3: Configuring the High-Level Network

Applies To:

Show Versions Show Versions

Link Controller

  • 4.3 PTF-02, 4.3 PTF-01, 4.3.0
Manual Chapter


2

Configuring the High-Level Network



Overview of the high-level network

This chapter describes the elements that make up the high-level network of Link Controller. The high-level network is distinct from the base network, which is configured with the Setup utility.

Just as the base network is built on the Link Controller interfaces, the high-level network is built on the load balancing pool. The high-level network includes all of the properties associated with pools, as well as virtual servers, and nodes. It can also include pool-selection rules, as well as services, proxies, SNATs, NATs, and health monitor associations for nodes.

  • Pools represent groups of nodes that can receive traffic from Link Controller according to a specified load balancing method.
  • Virtual servers can be one of four types: standard, wildcard, network, or forwarding.
  • Services correspond to the ports (for example, port 80 and port 443) specified for nodes as they are defined in load balancing pools. Service options include enabling/disabling of service, connection limits, and timeouts for UDP and TCP.
  • SNATs and NATs are secure network address translations and network address translations, respectively, and are used primarily to allow servers to establish outgoing connections as clients.
  • Health monitors are status checking devices that may be configured by the user, and are associated with nodes for ongoing monitoring.

    The remaining sections of this chapter describe each of these elements and the procedures for configuring them for Link Controller.

    Pools

    A load balancing pool is the primary object in the high-level network. A pool is a set of devices grouped together to receive traffic according to a load balancing method. When you create a pool, the members of the pool become visible nodes on the high-level network and can acquire the various properties that attach to nodes. Pools can be accessed through a virtual server, either directly or through a rule, which chooses among two or more pools. The Rules section of this chapter describes several ways to select pools using rules.

    You can use the Configuration utility or the bigpipe pool command to create, delete, modify, or display the pool definitions on the Link Controller.

    When creating a pool, you can configure various pool attributes. Table 2.1 lists the attributes you can configure for a pool.

    The attributes of a pool

    Pool Attributes

    Description

    Required or Optional?

    Pool name

    You can define the name of the pool.

    Required

    Member specification

    You can define each network device, or node, that is a member of the pool.

    Required for non-forwarding pools

    Load balancing method

    You can define a specific load balancing mode for a pool, and you can configure priority-based member activation. Various pools can be configured with different load balancing modes.

    Required
    (Default=Round Robin)

    Persistence method

    You can define a specific persistence method for a pool. You can have various pools configured with different persistence methods.

    Optional

    HTTP redirection

    You can redirect HTTP requests to a fallback host, protocol, port, or URI path.

    Optional

    HTTP header insertion

    You can configure a pool to insert a header into an HTTP request. For example, the header could include an original client IP address, to preserve the address during a SNAT connection.

    Optional

    Quality of Service (QoS) level

    You can configure a pool to set a specific QoS level within a packet, based on the targeted pool.

    Optional

    Type of Service (ToS) level

    You can configure a pool to set a specific ToS level within a packet, based on the targeted pool.

    Optional

    Disabling of SNAT and NAT connections

    You can configure a pool so that SNATs and NATs are automatically disabled for any connections using that pool.

    Optional

    Forwarding

    You can configure a forwarding pool, which causes a connection to be forwarded, using IP routing, instead of load balanced. Creating a forwarding pool allows you to use pool-based features for traffic that should be forwarded.

    Optional

    Working with pools

    You can manage pools using either the web-based Configuration utility or the command-line interface. This section describes how to create, delete, modify, or display a pool, using each of these configuration methods.

    To create a pool using the Configuration utility

    1. In the navigation pane, click Pools.
      The Pools screen opens.
    2. Click the Add button.
      The Add Pool screen opens.
    3. In the Add Pool screen, fill in the fields to create the new pool and configure its attributes.
    4. Click Done.

    To create a pool from the command line

    To define a pool and configure its attributes from the command line, use the following syntax:

    b pool <pool_name> { member <member_definition> ... member <member_definition> }

    For example, if you want to create the pool my_pool with two members, you would type the following command:

    b pool my_pool { member 11.12.1.101:80 member 11.12.1.100:80 }

    Use the elements shown in Table 2.2 to construct pools from the command line. These elements correspond to the pool attributes listed in Table 2.1 .

    Elements for pool construction

    Pool Element

    Syntax

    Pool name

    A string from 1 to 31 characters, for example: new_pool

    Member definition

    member <ip_address>:<service> [ratio <value>] [priority <value>]

    lb_method_specificaton

    lb_method [rr | ratio | fastest | least_conn | predictive | observed | ratio_member | fastest_member | least_conn_member | observed_member | predictive_member | dynamic_ratio]

    persist_mode_specification

    persist_mode [ simple | cookie | ssl | sip | sticky | msrdp]

    fallback_host_specification

    fallback <fallback_host>

    fallback_protocol_specification

    fallback <fallback_protocol>

    fallback_port_specification

    fallback <fallback_port>

    fallback_path_specification

    fallback <fallback_path>

    header insert

    header_insert <quoted string>

    link_qos to client level

    link_qos to client <level>

    link_qos to server level

    link_qos to server <level>

    ip_tos to client level

    ip_tos to client <level>

    ip_tos to server level

    ip_tos to server <level>

    snat disable

    snat <ip address> disable

    nat disable

    nat <ip address> disable

    forward

    forward

    To delete a pool from the command line

    To delete a pool, use the following command:

    b pool <pool_name> delete

    You must remove all references to a pool before you can delete a pool.

    To modify a pool from the command line

    In addition to adding nodes to a pool or deleting nodes from a pool, you can also modify pool attributes. You can add a new member to a pool, change the load-balancing mode, or delete a member from a pool.

    For example, to change the default load-balancing mode from Round Robin to Predictive and add two new members to the pool, use a command such as the following:

    b pool <pool_name> { \

    lb_method predictive \

    member 11.12.1.101:80 \

    member 11.12.1.100:80 }

    To display one or more pools from the command line

    Use the following syntax to display all pools:

    b pool show

    Use the following syntax to display a specific pool:

    b pool <pool_name> show

    The following sections describe the various pool attributes that you can configure for a pool.

    Pool Name

    The most basic attribute you can configure for a pool is the pool name. Pool names are case-sensitive, and may contain letters, numbers, and underscores (_) only. Reserved keywords are not allowed.

    Each pool that you define must have a unique name.

    Member specification

    For each pool that you create, you must specify the nodes that are to be members of that pool. Nodes must be specified by their IP addresses.

    Load balancing method

    Load balancing is an integral part of the Link Controller. Configuring load balancing on the Link Controller means determining your load balancing scenario, that is, which node should receive a connection hosted by a particular virtual server. Once you have decided on a load balancing scenario, you can specify the appropriate load balancing method for that scenario.

    The load balancing method is a pool attribute and consists of two properties: the load-balancing mode and priority-based activation.

    Load balancing modes

    A load balancing mode is an algorithm or formula that the Link Controller uses to determine the node to which traffic will be sent. Individual load balancing modes take into account one or more dynamic factors, such as current connection count. Because each application of the Link Controller is unique, and node performance depends on a number of different factors, we recommend that you experiment with different load balancing modes, and select the one that offers the best performance in your particular environment.

    The default load balancing mode on the Link Controller is Round Robin, which simply passes each new connection request to the next server in line. All other load balancing modes take server capacity and/or status into consideration.

    If the equipment that you are load balancing is roughly equal in processing speed and memory, Round Robin mode works well in most configurations. If you want to use the Round Robin mode, you can skip the remainder of this section, and begin configuring other pool attributes that you want to add to the basic pool configuration.

    If you are working with servers that differ significantly in processing speed and memory, you may want to switch to Ratio mode or to one of the dynamic modes.

    The individual load balancing modes are as follows.

    Round Robin

    This is the default load balancing mode. Round Robin mode passes each new connection request to the next server in line, eventually distributing connections evenly across the array of machines being load balanced. Round Robin mode works well in most configurations, especially if the equipment that you are load balancing is roughly equal in processing speed and memory.

    Ratio

    Link Controller distributes connections among machines according to ratio weights that you define, where the number of connections that each machine receives over time is proportionate to a ratio weight you define for each machine. This is a static load balancing mode, basing distribution on static user-assigned ratio weights that are proportional to the capacity of the servers.

    Load balancing calculations may be localized to each pool (member-based calculation) or they may apply to all pools of which a server is a member (node-based calculation). Member-based calculation is specified by the extension ratio_member. This distinction is especially important; in Ratio Member mode, the actual ratio weight is a member attribute in the pool definition, whereas in Ratio mode, the ratio weight is an attribute of the node.

    Dynamic ratio

    Dynamic Ratio mode is like Ratio mode, except that ratio weights are based on continuous monitoring of the servers and are therefore continually changing.

    This is a dynamic load balancing mode, distributing connections based on various aspects of real-time server performance analysis, such as the current number of connections per node or the fastest node response time.

    Dynamic Ratio mode is used specifically for configuring RealNetworks® RealSystem® Server platforms, Windows® platforms equipped with Windows Management Instrumentation (WMI), or any server equipped with an SNMP agent such as the UC Davis SNMP agent or the Windows 2000 Server SNMP agent. To install and configure the necessary server software for these systems, refer to Configuring servers and the Link Controller for Dynamic Ratio load balancing, on page 2-10 .

    Fastest

    Fastest mode passes a new connection based on the fastest response of all currently active nodes. Fastest mode may be particularly useful in environments where nodes are distributed across different logical networks.

    Load balancing calculations may be localized to each pool (member-based calculation) or they may apply to all pools of which a server is a member (node-based calculation). The variant of the mode using member-based calculation is distinguished by the extension fastest_member.

    Least Connections

    Least Connections mode is relatively simple in that the Link Controller passes a new connection to the node that has the least number of current connections. Least Connections mode works best in environments where the servers or other equipment you are load balancing have similar capabilities.

    This is a dynamic load balancing mode, distributing connections based on various aspects of real-time server performance analysis, such as the current number of connections per node or the fastest node response time.

    Load balancing calculations may be localized to each pool (member-based calculation) or they may apply to all pools of which a server is a member (node-based calculation). The variant of the mode using member-based calculation is distinguished by the extension least_conn_member.

    Observed

    Observed mode uses a combination of the logic used in the Least Connection and Fastest modes. In Observed mode, nodes are ranked based on a combination of the number of current connections and the response time. Nodes that have a better balance of fewest connections and fastest response time receive a greater proportion of the connections. Observed mode also works well in any environment, but may be particularly useful in environments where node performance varies significantly.

    This is a dynamic load balancing mode, distributing connections based on various aspects of real-time server performance analysis, such as the current number of connections per node or the fastest node response time.

    Load balancing calculations may be localized to each pool (member-based calculation) or they may apply to all pools of which a server is a member (node-based calculation). The variant of the mode using member-based calculation is distinguished by the extension observed_member.

    Predictive

    Predictive mode also uses the ranking methods used by Observed mode, where nodes are rated according to a combination of the number of current connections and the response time. However, in Predictive mode, the Link Controller analyzes the trend of the ranking over time, determining whether a node's performance is currently improving or declining. The nodes with better performance rankings that are currently improving, rather than declining, receive a higher proportion of the connections. Predictive mode works well in any environment.

    This is a dynamic load balancing mode, distributing connections based on various aspects of real-time server performance analysis, such as the current number of connections per node or the fastest node response time.

    Load balancing calculations may be localized to each pool (member-based calculation) or they may apply to all pools of which a server is a member (node-based calculation). The variant of the mode using member-based calculation is distinguished by the extension predictive_member.

    Setting the load balancing mode for a pool

    You can specify a load balancing mode as a pool attribute when a pool is defined. For information about configuring a pool, see Working with pools, on page 2-3 . The following example describes how to configure a pool to use Ratio Member load balancing. Note that for Ratio Member mode, in addition to changing the load balancing attribute, you must assign a ratio weight to each member node.

    Tip: The default ratio weight for a node is 1. If you keep the default ratio weight for each node in a virtual server mapping, the nodes receive an equal proportion of connections as though you were using Round Robin load balancing.

    To configure the pool and load balancing mode using the Configuration utility

    1. In the navigation pane, click Pools.
      The Pools screen opens.

      • If you are adding a new pool, click the Add button.
        The Add Pool screen opens.
      • If you are changing an existing pool, click the pool name in the Pools list.
        The Pool Properties screen opens.
    2. In the Add Pool screen or Pool Properties screen, configure the pool attributes. For additional information about defining a pool, click the Help button.

    Note: Round Robin is the default load balancing mode and never needs to be set unless you are returning to it from a non-default mode.

    To switch a pool to Ratio Member mode using the Configuration utility

    1. In the Current Members list, click the member you want to edit.
    2. Click the Back button (<<) to pull the member into the resources section.
    3. Change or add the ratio value for the member.
    4. Click the Add button (>>) to add the member back to the Current Members list.
    5. Click Done.

    To switch a pool to Ratio Member mode from the command line

    To switch a pool to Ratio Member load balancing, use the modify keyword with the bigpipe pool command. For example, if you want to change the pool my_pool to use the ratio_member load balancing mode, and to assign each member its ratio weight, you type the following command:

    b pool my_pool modify { lb_method ratio_member member 11.12.1.101:80 ratio 1 member 11.12.1.100:80 ratio 3}

    Setting ratio weights for node addresses

    The default ratio setting for any node address is 1. If you use the Ratio (as opposed to Ratio Member) load balancing mode, you must set a ratio other than 1 for at least one node address in the configuration. If you do not change at least one ratio setting, the load balancing mode has the same effect as the Round Robin load balancing mode.

    To set ratio weights using the Configuration utility

    1. In the navigation pane, click Nodes.
    2. In the Nodes list, click the Node Addresses tab.
      The Node Addresses screen opens.
    3. In the Node Addresses screen, click the Address of the node.
      The Global Node Address screen opens.
    4. In the Ratio box, type the ratio weight of your choice.
    5. Click the Apply button to save your changes.

    To set ratio weights from the command line

    The bigpipe ratio command sets the ratio weight for one or more node addresses:

    b ratio <node_ip> [<node_ip>...] <ratio weight>

    For example, the following command sets the ratio weight to 3 for a specific node address:

    b ratio 192.168.103.20 3

    Note: The <weight> parameter must be a whole number, and must be equal to or greater than 1.

    Displaying ratio weights for node addresses

    To display the ratio weights for all node addresses

    The following command displays the current ratio weight settings for all node addresses.

    b ratio show

    The command displays the output shown in Figure 2.1 .

    Figure 2.1 Ratio weights for node addresses

     192.168.200.51    ratio = 3    
    192.168.200.52 ratio = 1

    To display ratio weight for specific node addresses

    Use the following syntax to display the ratio setting for one or more node addresses:

    b ratio <node_ip> [...<node_ip>] show

    Configuring servers and the Link Controller for Dynamic Ratio load balancing

    You can configure Dynamic Ratio load balancing on RealNetworks RealSystem Server platforms, Windows platforms equipped with Windows Management Instrumentation (WMI), or any server equipped with an SNMP agent such as the UC Davis SNMP agent or the Windows 2000 Server SNMP agent.

    Configuring RealNetwork RealSystem Server platforms

    For the RealSystem Server platform, we provide a monitor plugin for the server that gathers the necessary metrics. Configuring a RealSystem Server for Dynamic Ratio load balancing consists of four tasks:

    • Installing the monitor plugin on the RealSystem Server
    • Configuring a real_server health check monitor on the Link Controller
    • Associating the health check monitor with the server to gather the metrics
    • Creating or modifying the server pool to use Dynamic Ratio load balancing

    To install the monitor plugin on the RealSystem Server (Windows version)

    Use the following procedure to install the monitor plugin on a Windows RealSystem Server.

    1. Download the monitor plugin F5RealMon.dll from the Link Controller. The plugin is located in /usr/contrib/f5/isapi. (The URL is https://<bigip_address>/doc/rsplugin/f5realmon.dll.)
    2. Copy f5realmon.dll to the RealServer Plugins directory. (For example, C:\Program Files\RealServer\Plugins.)
    3. If the RealSystem Server process is running, restart it.

    To install the monitor plugin on the RealSystem Server (UNIX version)

    Use the following procedure to install the monitor plugin on a UNIX RealSystem Server.

    1. Download the monitor plugin F5RealMon.so from the Link Controller. The plugin is located in /usr/contrib/f5/isapi. (The URL is https://<bigip_address>/doc/rsplugin/f5realmon.so.)
    2. Copy f5realmon.so to the RealServer Plugins directory. (For example, /home/RealServer/Plugins)
    3. If the RealSystem Server process is running, restart it.

    To configure a real_server monitor for the server node

    Using the Configuration utility or the bigpipe command, create a health-check monitor using the real_server monitor template. The real_server monitor template is shown in the Figure 2.2 .

    Figure 2.2 real_server monitor template

     monitor type real_server {
    interval 5
    timeout 16
    dest *.12345
    method "GET"
    cmd "GetServerStats"
    metrics "ServerBandwidth:1.5,CPUPercentUsage,MemoryUsage,
    TotalClientCount"
    agent "Mozilla/4.0 (compatible: MSIE 5.0; Windows NT)
    }

    The real_server monitor template can be used as is, without modifying any of the attributes. Alternatively, you can add metrics and modify metric attribute values. To do this, you need to create a custom monitor. For example:

    b monitor my_real_server '{ use real_server metrics "ServerBandwidth:2.0" }'

    The complete set of metrics and metric attribute default values is shown in Table 2.3 .

    real_server monitor metrics

    Metric

    Default Coefficient

    Default Threshold

    ServerBandwidth (Kbps)

    1.0

    10,000

    CPUPercentUsage

    1.0

    80

    MemoryUsage (Kb)

    1.0

    100,000

    TotalClientCount

    1.0

    1,000

    RTSPClientCount

    1.0

    500

    HTTPClientCount

    1.0

    500

    PNAClientCount

    1.0

    500

    UDPTransportCount

    1.0

    500

    TCPTransportCount

    1.0

    500

    MulticastTransportCount

    1.0

    500

    The metric coefficient is a factor determining how heavily the metric's value counts in the overall ratio weight calculation. The metric threshold is the highest value allowed for the metric if the metric is to have any weight at all. To understand how to use these values, it is necessary to understand how the overall ratio weight is calculated. The overall ratio weight is the sum of relative weights calculated for each metric. The relative weights, in turn, are based on three factors:

    • the value for the metric returned by the monitor
    • the coefficient value
    • the threshold value

      Given these values, the relative weight is calculated as follows:

      w=((threshold-value)/threshold)*coefficient

    You can see that the higher the coefficient, the greater the relative weight calculated for the metric. Similarly, the higher the threshold, the greater the relative weight calculated for any metric value that is less than the threshold. (When the value reaches the threshold, the weight goes to zero.)

    Note that the default coefficient and default threshold values shown in Table 2.3 are metric defaults, not template defaults. The template defaults take precedence over the metric defaults, just as user-specified values in the custom real_server monitor take precedence over the template defaults. For example, in Figure 2.2 , the template specifies a coefficient value of 1.5 for ServerBandwidth and no value for the other metrics. This means that the template will use the template default of 1.5 for the ServerBandwidth coefficient and the metric default of 1 for the coefficients of all other metrics. However, if a custom monitor my_real_server were configured specifying 2.0 as the ServerBandwidth coefficient, this user-specified value would override the template default.

    The syntax for specifying non-default coefficient or threshold values is:

    <metric>:<coefficient |<*>:<threshold>

    The following examples show how to specify a coefficient value only, a threshold value only, and a coefficient and a threshold value, respectively.

    b monitor my_real_server '{ use real_server metrics CPUPercentUsage:1.5 }'

    b monitor my_real_server '{ use real_server metrics CPUPercentUsage:*:70 }'

    b monitor my_real_server '{ use real_server metrics CPUPercentUsage:1.5:70 }'

    Metric coefficient and threshold are the only non-template defaults. If a metric not in the template is to be added to the custom monitor, it must be added to the metric list:

    b monitor my_real_server '{ use real_server metrics "HTTPClientCount" }'

    To associate the monitor with the member node

    Associate the custom health check monitor with the server node, creating an instance of the monitor for that node:

    b node <node_addr> monitor use my_real_server

    To set the load balancing method to Dynamic Ratio

    Create or modify the load balancing pool to which the server belongs to use Dynamic Ratio load balancing:

    b pool <pool_name> { lb_method dynamic_ratio <member definition>... }

    Configuring Windows servers with WMI

    For Windows, Link Controller provides a Data Gathering Agent F5Isapi.dll for the server. Configuring a Windows platform for Dynamic Ratio load balancing consists of four tasks:

    • Installing the Data Gathering Agent F5Isapi.dll on the server
    • Configuring a wmi health check monitor on the Link Controller
    • Associating the health check monitor with the server to gather the metrics
    • Creating or modifying the server pool to use Dynamic Ratio load balancing

    To install the Data Gathering Agent (F5Isapi) on the server

    1. Download the Data Gathering Agent (F5Isapi.dll) from the Link Controller. The plugin is located in /usr/contrib/f5/isapi. (The URL is https://<bigip_address>/doc/isapi/f5isapi.dll.)
    2. Copy f5isapi.dll to the directory C:\Inetpub\scripts.
    3. Open the Internet Services Manager.
    4. In the left pane of the Internet Services Manager, open the folder <machine_name>\Default Web Site\Script, where <machine_name> is the name of the server you are configuring. The contents of Scripts folder opens in the right pane.
    5. In the right pane, right click F5Isapi.dll and select Properties.
      The Properties dialog box for F5Isapi.dll opens.
    6. Deselect Logvisits. (Logging of each visit to the agent quickly fills up the log files.)
    7. Click the File Security tab.
      The File Security options appears.
    8. In the Anonymous access and authentication control group box, click Edit.
      The Authentication Methods dialog box opens.
    9. In the Authentication methods dialog box, clear all check boxes, then select Basic Authentication.
    10. In the Authentication methods dialog box, click OK to accept the changes.
    11. In the Properties dialog box, click Apply.
    12. The WMI Data Gathering Agent is now ready to be used.

    To configure a wmi monitor for the server node

    Using the Configuration utility or the bigpipe command, create a health check monitor using the wmi monitor template. The wmi monitor template is shown in Figure 2.3 .

    Figure 2.3 wmi monitor template

     monitor type wmi {
    interval 5
    timeout 16
    dest *:12346
    username ""
    password ""
    method "POST"
    urlpath "/scripts/F5Isapi.dll"
    cmd "GetCPUInfo, GetDiskInfo, GetOSInfo"
    metrics "LoadPercentage, DiskUsage, PhysicalMemoryUsage:1.5,
    VirtualMemoryUsage:2.0"
    post "<input type='hidden' name='RespFormat' value='HTML'>"
    agent "Mozilla/4.0 (compatible: MSIE 5.0; Windows NT)
    }

    The monitor template contains default values for all the attributes. These are template defaults. In creating a custom monitor from the template, the only default values you are required to change are the null values for user name and password. For example:

    b monitor my_wmi '{ use wmi username "dave" password "$getm" }'

    You may also add commands and metrics and modify metric attribute values. The complete set of commands, associated metrics, and metric attribute default values is shown in Table 2.4 .

    wmi monitor commands and metrics

    Command

    Metric

    Default Coefficient

    Default

    Threshold

    GetCPUInfo

    LoadPercentage (%)

    1.0

    80

    GetOSInfo

    PhysicalMemoryUsage (%)

    1.0

    80


    VirtualMemoryUsage (%)

    1.0

    80


    NumberRunningProcesses

    1.0

    100

    GetDiskInfo

    DiskUsage (%)

    1.0

    90

    GetPerfCounters

    TotalKBytesPerSec

    1.0

    10,000


    ConnectionAttemptsPerSec

    1.0

    500


    CurrentConnections

    1.0

    500


    GETRequestsPerSec

    1.0

    500


    PUTRequestsPerSec

    1.0

    500


    POSTRequestsPerSec

    1.0

    500


    AnonymousUsersPerSec

    1.0

    500


    CurrentAnonymousUsers

    1.0

    500


    NonAnonymousUsersPerSec

    1.0

    500


    CurrentNonAnonymousUser

    1.0

    500


    CGIRequestsPerSec

    1.0

    500


    CurrentCGIRequests

    1.0

    500


    ISAPIRequestsPerSec

    1.0

    500


    CurrentISAPIRequests

    1.0

    500

    GetWinMediaInfo

    AggregateReadRate

    1.0

    10,000 Kbps


    AggregateSendRate

    1.0

    10,000 Kbps


    ActiveLiveUnicastStreams

    1.0

    1000


    ActiveStreams

    1.0

    1000


    ActiveTCPStreams

    1.0

    1000


    ActiveUDPStreams

    1.0

    1000


    AllocatedBandwidth

    1.0

    10,000 Kbps


    AuthenticationRequests

    1.0

    1000


    AuthenticationsDenied

    1.0

    100


    AuthorizationRequests

    1.0

    1000


    AuthorizationsRefused

    1.0

    100


    ConnectedClients

    1.0

    500


    ConnectionRate

    1.0

    500


    HTTPStreams

    1.0

    1000


    HTTPStreamsReadingHeader

    1.0

    500


    HTTPStreamsStreamingBody

    1.0

    500


    LateReads

    1.0

    100


    PendingConnections

    1.0

    100


    PluginErrors

    1.0

    100


    PluginEvents

    1.0

    100


    SchedulingRate

    1.0

    100


    StreamErrors

    1.0

    100


    StreamTerminations

    1.0

    100


    UDPResendRequests

    1.0

    100


    UDPResendsSent

    1.0

    100

    For more information about the metric coefficients and thresholds, refer to the description accompanying Table 2.3 , real_server monitor metrics, on page 2-11 . Note that for a wmi monitor, you can add commands. To do this, simply add them to the cmd list.

    To associate the monitor with the member node

    Associate the custom health check monitor with the server node, creating an instance of the monitor for that node:

    b node <node_addr> monitor use my_wmi

    To set the load balancing mode to Dynamic Ratio

    Use the following syntax to create or modify the load balancing pool to which the server belongs to use Dynamic Ratio load balancing:

    b pool <pool_name> { lb_method dynamic_ratio <member definition>...}

    Configuring SNMP servers

    The Link Controller includes an SNMP data collecting agent that can query remote SNMP agents of various types, including the UC Davis agent and the Windows 2000 Server agent. Configuring a server to use its SNMP agent for Dynamic Ratio load balancing consists of three tasks:

    • Configuring a health check monitor, using either the Configuration utility or the bigpipe command
    • Associating the health check monitor with the server to gather the metrics
    • Creating or modifying the server pool to use Dynamic Ratio load balancing

      Link Controller provides two templates that you can use to create a health monitor for a server that uses an SNMP agent. These two monitor templates are:

    • snmp_dca
      Use this template when you want to use default values or specify new values for CPU, memory, and disk metrics. When using this template, you can also specify values for other types of metrics that you wish to gather.
    • snmp_dca_base
      Use this template when you want to use default values or specify values for metrics other than CPU, memory, and disk usage. When using this template, values for CPU, memory, and disk metrics are omitted.

    Note: For a description of these templates and the default values for each metric, see Working with templates for EAV monitors, on page 2-84 .

    Figure 2.4 shows a monitor based on the snmp_dca monitor template. This monitor uses the default metric values. A user can optionally specify variables for user-defined metrics.

    Figure 2.4 A monitor based on the snmp_dca template

     monitor my_snmp_dca     
    '{ use snmp_dca
    interval 10
    timeout 30
    dest *:161
    agent_type "UCD"
    cpu_coefficient "1.5"
    cpu_threshold "80"
    mem_coefficient "1.0"
    mem_threshold "70"
    disk_coefficient "2.0"
    disk_threshold "90"
    USEROID ""
    USEROID_COEFFICIENT "1.0"
    USEROID_THRESHOLD "90"
    }'

    Figure 2.5 shows a monitor based on the snmp_dca_base monitor template. This monitor uses the default metric values.

    Figure 2.5 A monitor based on the snmp_dca_base template

     monitor my_snmp_dca_base     
    '{ use snmp_dca_base
    interval 10
    timeout 30
    dest *:161

    USEROID ""
    USEROID_COEFFICIENT "1.0"
    USEROID_THRESHOLD "90"
    }'

    Note: Note that in the above examples, the user-defined variables are specified as USEROID, USEROID_COEFICIENT, and USEROID_THRESHOLD. You can create any variable names you want. Although the values shown in the above examples are entered in uppercase, uppercase is not required.

    To configure a monitor based on either the snmp_dca or snmp_dca_base template, you can use either the Configuration utility or the bigpipe command.

    Note: The default agent type specified in the snmp_dca template is UC Davis. When configuring a monitor for a Windows 2000 server, you must change the agent type to Windows 2000.

    To configure an SNMP monitor using the Configuration utility

    1. In the Navigation pane, click Monitors.
    2. Click the Add button.
      This displays the Configure Monitor Name and Parent screen.
    3. Enter a unique name for the monitor in the Name box and select a template from the Inherits from box. If you want the monitor to include CPU, memory, disk, and user metrics, select the snmp_dca template. If you want the monitor to include user metrics only, select the snmp_dca_base template.
    4. Click Next. This displays the Configure Basic Properties screen.
    5. Retain or change the values in the Interval and Timeout boxes.
    6. Click Next. This displays the Configure EAV SNMP DCA Monitor screen.
    7. Retain or change the values for CPU, memory, and disk use. Also note that in the snmp_dca template, the default value for the Agent Type property is UCD. To configure a monitor for a Windows 2000 agent, change this value to WIN2000.
    8. Click Next.
      This displays the Configure EAV Variables screen.
    9. If you are specifying user-defined metrics, configure the EAV variables by specifying a unique name and a value for each Name/Value pair.
      The three variables (that is, Name/Value pairs) correspond to OID, coefficient, and threshold. Note that if the value of the OID variable is an absolute value, verify that the user-defined threshold value is also an absolute value. If the threshold value is not absolute, Link Controller might not factor the value into the load calculation. The default user-defined threshold value is 90.
    10. Click Next.
      This displays the Configure Destination Address and Service (Alias) screen. We recommend that you use the default values shown here.
    11. Click Done.

    To configure an SNMP monitor using the bigpipe command

    When configuring an SNMP monitor using the bigpipe command, you can use the default CPU, memory, and disk coefficient and threshold values specified in the templates, or you can change the default values. Optionally, you can specify coefficient and threshold values for gathering other types of data. Note that if the monitor you are configuring is for a type of SNMP agent other than UC Davis, you must specify the agent type as an argument to the bigpipe command.

    The following command-line examples show various ways to configure an SNMP monitor. Note that although arguments for user-defined metrics are shown in uppercase, uppercase is not required.

    To configure a monitor for a UC Davis SNMP agent, using default CPU, memory, and disk use values, use the bigpipe monitor command, as in the following example.

    b monitor my_snmp_dca '{ use snmp_dca }'

    To configure a monitor for a UC Davis SNMP agent, using all default CPU, memory threshold, and disk use values and specifying a non-default memory coefficient value, use the bigpipe monitor command, as in the following example.

    b monitor my_snmp_dca '{ use snmp_dca mem_coefficient "1.5" }'

    To configure a monitor for a UC Davis SNMP agent, using default CPU, memory threshold, and disk use values and specifying non-default memory coefficient and user values, use the bigpipe monitor command, as in the following example.

    b monitor my_snmp_dca '{ use snmp_dca mem_coefficient\ "1.5"/USEROID ".1.3.6.1.4" USEROID_COEFFICIENT "1.5"\ USEROID_THRESHOLD/"80" }'

    To configure a monitor for a UC Davis SNMP agent, omitting CPU, memory, and disk use values and using default user coefficient and user threshold values (1.0 and 90 respectively), use the bigpipe monitor command, as in the following example.

    b monitor my_snmp_dca '{ use snmp_dca_base USEROID\ ".1.3.6.1.4"}'

    To configure a monitor for a UC Davis SNMP agent, omitting CPU, memory, and disk use values and specifying non-default user values, use the bigpipe monitor command, as in the following example.

    b monitor my_snmp_dca_base '{ use snmp_dca_base\ USEROID/".1.3.6.1.4" USEROID_COEFFICIENT/ "1.5"\ USEROID_THRESHOLD "80" )'

    To configure a monitor for a Windows 2000 SNMP agent, using default CPU, memory, and disk use values, use the bigpipe monitor command, as in the following example.

    b monitor my_win2000_snmp_dca '{use snmp_dca agent_type\ "WIN2000"}'

    To associate the health check monitor with the member node

    Use the following syntax to associate the custom health check monitor with the server node and create an instance of the monitor for that node:

    b node <node_addr> monitor use my_snmp_dca

    To set the load balancing method to Dynamic Ratio

    Use the following syntax to create or modify the load balancing pool to which the server belongs to use Dynamic Ratio load balancing:

    b pool <pool_name> { lb_method dynamic_ratio\
    <member definition>... }

    Priority-based member activation

    You can load balance traffic across all members of a pool or across only members that are currently activated according to their priority number. In priority-based member activation, each member in a pool is assigned a priority number that places it in a priority group designated by that number. With all nodes available (meaning they are enabled, marked up, and have not exceeded their connection limit), the Link Controller distributes connections to all nodes in the highest priority group only, that is, the group designated by the highest priority number. The min_active_members value determines the minimum number of members that must remain available for traffic to be confined to that group. If the number of available nodes in the highest priority group goes below the minimum number, the Link Controller also distributes traffic to the next higher priority group, and so on.

    Figure 2.6 Sample pool configuration for priority based member activation

     pool my_pool {
    lb_mode fastest
    min_active_members 2
    member 10.12.10.1:80 priority 3
    member 10.12.10.2:80 priority 3
    member 10.12.10.3:80 priority 3

    member 10.12.10.4:80 priority 2
    member 10.12.10.5:80 priority 2
    member 10.12.10.6:80 priority 2

    member 10.12.10.7:80 priority 1
    member 10.12.10.8:80 priority 1
    member 10.12.10.9:80 priority 1
    }

    The configuration shown in Figure 2.6 has three priority groups, 3, 2, and 1. Connections are first distributed to all nodes with priority 3. If fewer than two priority 3 nodes are available, traffic is directed to the priority 2 nodes as well. If both the priority 3 group and the priority 2 group have fewer than two nodes available, traffic is directed to the priority 1 group as well. The Link Controller continuously monitors the higher priority groups, and each time a higher priority group once again has the minimum number of available nodes, the Link Controller again limits traffic to that group.

    Warning: If you set the load balancing mode to Ratio (as opposed to Ratio Member), you must define the ratio settings for each node address.

    Persistence

    If you are setting up an e-commerce or other type of transaction-oriented site, you may need to configure persistence on the Link Controller. Persistence is one of the pool attributes listed in Table 2.1, on page 2-2 .

    Whether you need to configure persistence or not simply depends on how you store client-specific information, such as items in a shopping cart, or airline ticket reservations. For example, you may store the airline ticket reservation information in a back-end database that all nodes can access, or on the specific node to which the client originally connected, or in a cookie on the client's machine.

    If you store client-specific information on specific nodes, you need to configure persistence. When you turn on persistence, returning clients can bypass load balancing and instead can go to the node where they last connected in order to get to their saved information.

    The Link Controller tracks information about individual persistent connections, and keeps the information only for a given period of time. The way in which persistent connections are identified depends on the type of persistence.

    Types of persistence

    The types of persistence are:

    • Simple persistence
      Simple persistence supports TCP and UDP protocols, and tracks connections based only on the client IP address.
    • Destination address affinity (sticky persistence)
      Destination address affinity directs requests for a certain destination to the same proxy server, regardless of which client the request comes from.

    Note: All persistence methods are properties of pools.

    Persistence options

    When setting up persistence, you can enable either of the following two options:

    • Persistence across virtual servers with the same address
      Persistence across virtual servers with the same address causes the Link Controller to maintain persistence only when the virtual server hosting the connection has the same virtual address as the virtual server hosting the initial persistent connection.
    • Persistence across all virtual servers
      Persistence across all virtual servers causes the Link Controller to maintain persistence for all connections requested by the same client, regardless of which virtual server hosts each individual connection initiated by the client.

    Simple persistence

    Simple persistence tracks connections based only on the client IP address. When a client requests a connection to a virtual server that supports simple persistence, the Link Controller checks to see if that client previously connected, and if so, returns the client to the same node.

    You may want to use SSL persistence and simple persistence together. In situations where an SSL session ID times out, or where a returning client does not provide a session ID, you may want the Link Controller to direct the client to the original node based on the client's IP address. As long as the client's simple persistence record has not timed out, the Link Controller can successfully return the client to the appropriate node.

    Persistence settings for pools apply to all protocols. When the persistence timer is set to a value greater than 0, persistence is on. When the persistence timer is set to 0, persistence is off.

    To configure simple persistence for pools using the Configuration utility

    1. In the navigation pane, click Pools.
      The Pools screen opens.
    2. Select the pool for which you want to configure simple persistence.
      The Pool Properties screen opens.
    3. Click the Persistence tab.
      The Persistence Properties screen opens.
    4. In the Persistence Type section, click the Simple button.
      Type the following information:

      • Timeout (seconds)
        Set the number of seconds for persistence on the pool. (This option is not available if you are using rules.)
      • Mask
        Set the persistence mask for the pool. The persistence mask determines persistence based on the portion of the client's IP address that is specified in the mask.
    5. Click the Apply button.

    To configure simple persistence for pools from the command line

    You can use the bigpipe pool command with the modify keyword to set simple persistence for a pool. Note that a timeout greater than 0 turns persistence on, and a timeout of 0 turns persistence off.

    b pool <pool_name> modify { \

    persist_mode simple \

    simple_timeout <timeout> \

    simple_mask <ip_mask> }

    For example, to set simple persistence on the pool my_pool, type this command:

    b pool my_pool modify { persist_mode simple simple_timeout 3600\ simple_mask 255.255.255.0 }

    Using a simple timeout and a persist mask on a pool

    The persist mask feature works only on pools that implement simple persistence. By adding a persist mask, you identify a range of client IP addresses to manage together as a single simple persistent connection when connecting to the pool.

    To apply a simple timeout and persist mask using the Configuration utility

    1. In the navigation pane, click Pools.
      The Pools screen opens.
    2. In the Pools list, click the pool for which you want to set up simple persistence.
      The properties screen opens.
    3. Click the Persistence tab.
      The Persistence screen opens.
    4. Select Simple mode.
    5. In the Timeout box, type the timeout in seconds.
    6. In the Mask box, type the persist mask you want to apply.
    7. Click the Apply button.

    To apply a simple timeout and persist mask from the command line

    The complete syntax for the command is:

    b pool <pool_name> modify { \

    [<lb_mode_specification>] \

    persist_mode simple \

    simple_timeout <timeout> \

    simple_mask <dot_notation_longword> }

    For example, the following command would keep persistence information together for all clients within a C class network that connect to the pool my_pool:

    b pool my_pool modify { \

    persist_mode simple \

    simple_timeout 1200 \

    simple_mask 255.255.255.0 }

    You can turn off a persist mask for a pool by using the none option in place of the simple_mask mask. To turn off the persist mask that you set in the preceding example, use the following command:

    b pool my_pool modify { simple_mask none }

    To display all persistence information for the pool named my_pool, use the show option:

    b pool my_pool persist show

    Destination address affinity (sticky persistence)

    You can optimize your proxy server array with destination address affinity (also called sticky persistence). Destination address affinity directs requests for a certain destination IP address to the same proxy server, regardless of which client the request comes from.

    This enhancement provides the most benefits when load balancing caching proxy servers. A caching proxy server intercepts web requests and returns a cached web page if it is available. In order to improve the efficiency of the cache on these proxies, it is necessary to send similar requests to the same proxy server repeatedly. Destination address affinity can be used to cache a given web page on one proxy server instead of on every proxy server in an array. This saves the other proxies from having to duplicate the web page in their cache, wasting memory.

    To activate destination address affinity using the Configuration utility

    You can activate destination address affinity only on pools that are directly or indirectly referenced by wildcard virtual servers. For information on setting up a wildcard virtual server, see the Wildcard virtual servers, on page 2-41 .

    1. In the navigation pane, click Pools.
      The Pools screen opens.
    2. In the Pools list, click the pool for which you want to set up destination address affinity.
      The properties screen for the pool you clicked opens.
    3. Click the Persistence tab.
      The Persistence screen opens.
    4. Click the Destination Address Affinity button to enable destination address affinity.
    5. In the Mask box, type in the mask you want to apply to sticky persistence entries.
    6. Click the Apply button.

    To activate destination address affinity from the command line

    Use the following command to activate sticky persistence for a pool:

    b pool <pool_name> modify { persist_mode sticky sticky_mask <ip address> }

    Use the following command to delete sticky entries for the specified pool:

    b pool <pool_name> sticky clear

    To show the persistence configuration for the pool:

    b pool <pool_name> persist show

    Maintaining persistence across virtual servers that use the same virtual addresses

    When this mode is turned on, the Link Controller attempts to send all persistent connection requests received from the same client, within the persistence time limit, to the same node only when the virtual server hosting the connection has the same virtual address as the virtual server hosting the initial persistent connection. Connection requests from the client that go to other virtual servers with different virtual addresses, or those connection requests that do not use persistence, are load balanced according to the load balancing mode defined for the pool.

    If a Link Controller configuration includes the following virtual server mappings, where the virtual server v1:http references the http_pool (contains the nodes n1:http and n2:http) and the virtual server v1:ssl references the pool ssl_pool (contains the nodes n1:ssl and n2:ssl). Each virtual server uses persistence:

    b virtual v1:http use pool http_pool

    b virtual v1:ssl use pool ssl_pool

    b virtual v2:ssl use pool ssl_pool

    However, if the client subsequently connects to v1:ssl, the Link Controller uses the persistence session established with the first connection to determine the node that should receive the connection request, rather than the load balancing mode. The Link Controller should send the third connection request to n1:ssl, which uses the same node address as the n1:http node that currently hosts the client's first connection with which it shares a persistent session.

    For example, a client makes an initial connection to v1:http and the load balancing mechanism assigned to the pool http_pool chooses n1:http as the node. If the same client then connects to v2:ssl, the Link Controller starts tracking a new persistence session, and it uses the load balancing mode to determine which node should receive the connection request because the requested virtual server uses a different virtual address (v2) than the virtual server hosting the first persistent connection request (v1). In order for this mode to be effective, virtual servers that use the same virtual address, as well as those that use TCP or SSL persistence, should include the same node addresses in the virtual server mappings.

    To activate persistence for virtual servers that use the same address using the Configuration utility

    1. In the navigation pane, click System.
      The Network Map screen opens.
    2. Click the Advanced Properties tab.
      The Link Controller System Control Variables screen opens.
    3. Click the Allow Persistence Across All Ports for Each Virtual Address check box. (To disable this persistence mode, clear the check box).
    4. Click the Apply button.

    To activate persistence for virtual servers that use the same address from the command line

    The global variable persist_across_services turns this mode on and off. To activate the persistence mode, type:

    b global persist_across_services enable

    To deactivate the persistence mode, type:

    b global persist_across_services disable

    Maintaining persistence across all virtual servers

    You can set the Link Controller to maintain persistence for all connections requested by the same client, regardless of which virtual server hosts each individual connection initiated by the client. When this mode is turned on, the Link Controller attempts to send all persistent connection requests received from the same client, within the persistence time limit, to the same node. Connection requests from the client that do not use persistence are load balanced according to the currently selected load balancing mode.

    The following examples show virtual server mappings, where the virtual servers v1:http and v2:http reference the http1_pool and http2_pool (both pools contain the nodes n1:http and n2:http) and the virtual servers v1:ssl and v2:ssl reference the pools ssl1_pool and ssl2_pool (both pools contain the nodes n1:ssl and n2:ssl). Each virtual server uses persistence:

    b virtual v1:http use pool http1_pool

    b virtual v1:ssl use pool ssl1_pool

    b virtual v2:http use pool http2_pool

    b virtual v2:ssl use pool ssl2_pool

    Say that a client makes an initial connection to v1:http and the Link Controller load balancing mechanism chooses n1:http as the node. If the same client subsequently connects to v1:ssl, the Link Controller would send the client's request to n1:ssl, which uses the same node address as the n1:http node that currently hosts the client's initial connection. What makes this mode different from maintaining persistence across virtual servers that use the same virtual address is that if the same client subsequently connects to v2:ssl, the Link Controller would send the client's request to n1:ssl, which uses the same node address as the n1:http node that currently hosts the client's initial connection.

    Warning: In order for this mode to be effective, virtual servers that use pools with TCP or SSL persistence should include the same member addresses in the virtual server mappings.

    To activate persistence across all virtual servers using the Configuration utility

    1. In the navigation pane, click the System icon.
      The Network Map screen opens.
    2. Click the Advanced Properties tab.
      The Link Controller System Control Variables screen opens.
    3. Click the Allow Persistence Across All Virtual Servers check box to activate this persistence mode.
    4. Click the Apply button.

    To activate persistence across all virtual servers from the command line

    The global variable persist_across_virtuals turns this mode on and off. To activate the persistence mode, type:

    b global persist_across_virtuals enable

    To deactivate the persistence mode, type:

    b global persist_across_virtuals disable

    HTTP redirection

    Another attribute of a pool is HTTP redirection. HTTP redirection allows you to configure a pool so that HTTP traffic is redirected to another protocol identifier, host name, port number, or URI path. For example, if all members of a pool are unavailable (that is, the members are disabled, marked down, and have exceeded their connection limit), the HTTP request can be redirected to the fallback host, with the HTTP reply Status Code 302 Found.

    When configuring a pool to redirect HTTP traffic to a fallback host, you can use an IP address or a fully-qualified domain name (FQDN), or you can use a special format string included in the Link Controller. These format strings can also be used for specifying protocol identifiers, ports, and URIs.

    The following two sections describe these two ways of redirecting HTTP requests. Following these two sections is a description of a related feature, which allows you to configure a server to rewrite the specified HTTP redirection.

    Using IP addresses and fully qualified domain names

    When redirecting traffic to a fallback host, you can specify the fallback host as an IP address or as a fully qualified domain name (FQDN). In either case, it may include a port number. The example in Figure 2.7 redirects the request to http://redirector.sam.com.

    Figure 2.7 Fallback host in a pool

     pool my_pool {
    member 10.12.10.1:80
    member 10.12.10.2:80
    member 10.12.10.3:80
    fallback redirector.sam.com

    }

    Note: The HTTP redirect mechanism is not a load balancing method. The redirect URL may be a virtual server pointing to the requested HTTP content, but this is not implicit in its use.

    Table 2.5 shows how different fallback host specifications are resolved

    How the fallback host specifications are resolved

    Requested URL

    Fallback Host Specification

    Redirect URL

    http://www.sam.com/

    fallback.sam.com

    http://falback.sam.com/

    http://www.sam.com/

    fallback.sam.com:8002

    http://fallback.sam.com:8002/

    http://www.sam.com:8001

    fallback.sam.com

    http://fallback.sam.com/

    http://www.sam.com:8001/

    fallback.sam.com:8002

    http://fallback.sam.com:8002/

    http://www.sam.com/sales

    fallback.sam.com

    http://fallback.sam.com/sales

    http://192.168.101.3/

    fallback.sam.com

    http://fallback.sam.com/

    http://192.168.101.3/sales

    fallback.sam.com

    http://fallback.sam.com/sales

    http://www.sam.com/sale

    192.168.101.5

    http://192.168.101.5/sales

    http://192.168.101.3/sales/default.asp?q=6

    fallback.sam.com

    http://fallback.sam.com/sales/default.asp?q=6

    Using format strings (expansion characters)

    To allow HTTP redirection to be fully configurable with respect to target URI, the following format strings are available. These strings can be used within pools.

    Table 2.6 lists and defines the format strings that you can use to specify HTTP redirection.

    Format strings for HTTP redirection

    Format String

    Description

    %h

    host name, as obtained from the Host: header of the client

    %p

    Port, from the virtual server listening port

    %u

    URI path, as obtained from a GET/POST request

    An example of a fallback host string is https://%h/sample.html. In this string, specifying https as the protocol identifier causes the traffic to be redirected to that protocol instead of the standard http protocol. Also, the string sample.html causes the traffic to be redirected to that URI instead of to the standard URI specified in the HTTP header, which would normally be represented in the fallback string as%u.

    Table 2.7 shows some sample redirection specifications, their explanations, and their resulting redirection.

    Sample HTTP redirections using format strings

    Redirection string

    Explanation

    Resulting redirection

    %h:%p/%u

    No redirection (preserve host name, port, and path)

    http://www/example.com:8080/sample

    %h/unavailable

    change path, remove port

    http://www/example.com/unavailable

    https://%h/unavailable

    Specify https as protocol, remove port, change path

    https://www/example.com/unavailable

    www.sample.com:8080/%u

    Change host name and port, preserve path

    http://www.sample.com:8080/sample

    https://1.2.3.4:443/%u/unavilable.html

    Specify https as protocol, change host name, port, and path

    https://1.2.3.4:443/sample/unavailable.html

    ftp://1.2.3.4:%p/unavailable/%u

    Specify ftp as protocol, change host name and path

    ftp://1.2.3.4:8080/unavailable/sample

    rtsp://%h:554/streamingmedia/%u

    Specify rtsp as protocol, change port and path

    rtsp://www.example.com:554/streamingmedia/sample

    The example in Figure 2.8 shows a pool configured to redirect an HTTP request to a different protocol (https) host name (1.2.3.4), port number (443), and path (unavailable.html).

    Figure 2.8 HTTP redirection specified in a pool

     pool my_pool {
    member 10.12.10.1:80
    member 10.12.10.2:80
    member 10.12.10.3:80

    https://1.2.3.4:443/%u/unavailable.html
    }

    Rewriting HTTP redirection

    Sometimes, a client request is redirected from the HTTPS protocol to the HTTP protocol, which is a non-secure channel. If you want to ensure that the request remains on a secure channel, you can cause that redirection to be rewritten so that it is redirected back to the HTTPS protocol. Also, through the rewriting of redirections, you can rewrite a port number or a URI path.

    You can rewrite HTTP redirections for Microsoft Internet Information Server (IIS) servers. If your web server is an IIS server, you can configure that server to rewrite any HTTP redirections. Part of this IIS server configuration includes the installation of a special Link Controller filter, redirectfilter.dll, on the IIS server. The following section provides this IIS configuration procedure.

    To install the filter for rewriting HTTP redirection

    To install the ISAPI filter (redirectfilter.dll) for use with IIS, version 4.0 or 5.0, follow these steps:

    1. Copy the filter DLL to an appropriate folder, such as the SCRIPTS or CGI-BIN subdirectory.
    2. Open the Internet Service Manager (MMC).
    3. Select the appropriate level for the ISAPI filter:

      • If you intend to use the ISAPI filter with all Web sites, select the ServerName icon.
      • If you intend to use the ISAPI filter with a specific Web site, select the icon for that Web site (for example, the default Web site).
    4. Right-click the level (icon) that you selected.
    5. Click the ISAPI Filters tab.

      Note: To configure an ISAPI filter for all Web sites, first click the Edit button that is next to the Master Properties of the WWW Service.

    6. Click Add.
    7. Type a name for the ISAPI filter.
    8. Click Browse and select the ISAPI filter that you copied in step 1.
    9. Click OK.
    10. Stop the IISADMIN service. To do this, either type net stop iisadmin /y at a command prompt, or use the Services applet that is located in Control Panel (in Windows NT® 4.0) or Administrative Tools (in Windows 2000).
    11. Start the World Wide Web Publishing Service by typing net start w3svc at a command prompt, or by using the Services applet that is located in Control Panel (in Windows NT 4.0) or Administrative Tools (in Windows 2000).
    12. Repeat the previous step for any other services that were stopped in step 11.
    13. Browse back to the ISAPI Filters tab (by following steps 1-5) and verify that the filter is loaded properly. You should see a green arrow that is pointing up under the Status column.

      Note: The ISAPI Filters tab specifies a load order, with the filter at the top of the list loading first. Normally Sspifilt.dll, the ISAPI filter for SSL, is at the top of the list to allow any other filters to access data before IIS encrypts and transmits or decrypts and receives TTPS traffic.

    HTTP header insertion

    An optional attribute of a pool is HTTP header insertion. Using this attribute, you can configure a pool to insert a header into an HTTP request. The HTTP header being inserted can include a client IP address. Including a client IP address in an HTTP header is useful when a connection goes through a secure network address translation (SNAT) and you need to preserve the original client IP address.

    The header insertion must be specified in the pool definition as a quoted string. Figure 2.9 shows the required syntax.

     pool <pool_name> {
    header insert <quoted string>
    }

    Figure 2.9 Syntax of a header insertion string within a pool

    Optionally, you can include rule variables in the quoted string. For example, the pool definition shown in 2.10 uses the rule variable client_addr to represent the original client IP address of an HTTP request.

     pool my_pool {
    header insert "OrigClientAddr:${client_addr}"
    member 10.0.0.1:80
    member 10.0.0.2:80
    member 10.0.0.3:80
    }

    Figure 2.10 Example of a rule variable within a pool for header insertion

    The rule variables that can be used for header insertion are:

    • client_addr
    • client_port
    • server_addr
    • server_port
    • link_qos
    • ip_qos

    Figure 2.11 shows a pool that inserts a header, using all of the above rule variables.

     pool my_pool {
    header insert "ClientSide:${client_addr}:${client_port} ->
    ${server_addr}:${server_port} tos=${ip_tos} qos=${link_qos}"
    member 10.0.0.1:80
    member 10.0.0.2:80
    member 10.0.0.3:80
    }

    Figure 2.11 Pool with header insertion string using multiple rule variables

    The above header insertion string inserts a header such as that shown in Figure 2.12 into an HTTP request:

     GET /index.html HTTP/1.0
    ClientSide: 10.0.0.1:3340 -> 10.0.0.101:80 tos=16 qos=0
    Host: www.yahoo.com
    Connection: Keep-Alive

    Figure 2.12 Header resulting from a header insertion string within a pool

    Note: If the rule variable specified is not a valid variable, the invalid variable name is inserted directly into the HTTP request, with no substitution.

    In addition to inserting a client IP address into an HTTP request, you can configure an SSL Accelerator proxy to insert other types of headers into HTTP requests. Examples of headers that an SSL proxy can insert are: information on client certificates, cipher specifications, and client session IDs.

    Quality of Service (QoS) level

    Another attribute of a pool is the Quality of Service (QoS) level. The QoS level is a means by which network equipment can identify and treat traffic differently based on an identifier. As traffic enters the site, the Link Controller can set the QoS level on a packet, based on the QoS level defined in the pool to which the packet is sent. The Link Controller can also apply a rule that sends the traffic to different pools of servers based on the Quality of Service level.

    The Link Controller can tag outbound traffic (the return packets based on an HTTP GET) based on the QoS value set in the pool. That value is then inspected by upstream devices and given appropriate priority. Based on a rule, the Link Controller can examine incoming traffic to see if it has a particular QoS or ToS tag in the header. The Link Controller can then make a rule-based load balancing decision based on that tag.

    Figure 2.13 shows how to configure a pool so that a QoS level is set for a packet sent to that pool. In this example, the QoS tag, represented by the link_qos variable, is set to 3 when sending packets to the client, and set to 4 when packets are sent to the server.

     pool http_pool {
    link_qos to client 3
    link_qos to server 4
    }

    Figure 2.13 Example of a pool that sets the QoS level on a packet

    In addition to configuring a pool to set the QoS level on a packet, you can configure a rule that selects a pool based on the existing QoS value within the packet. For more information, see Quality of Service (QoS) level, on page 2-34 .

    Type of Service (ToS) level

    Another attribute of a pool is the Type of Service (ToS) level. The ToS level, also known as the DiffServ value, is a means by which network equipment can identify and treat traffic differently based on an identifier. As traffic enters the site, the Link Controller can set the ToS level on a packet, based on the ToS level defined in the pool to which the packet is sent. The Link Controller can also apply a rule and send the traffic to different pools of servers based on the ToS level.

    The Link Controller can tag outbound traffic (the return packets based on an HTTP GET) based on the ToS value set in the pool. That value is then inspected by upstream devices and given appropriate priority. Based on a rule, the Link Controller can examine incoming traffic to see if it has a particular ToS tag in the header. The Link Controller can then make a rule-based load balancing decision based on that tag.

    Figure 2.14 shows how to configure a pool so that a ToS level is set for a packet sent to that pool. In this example, the ToS tag, represented by the ip_tos variable, is set to 16 when sending packets to the client, and set to 16 when packets are sent to the server.

     pool http_pool {
    ip_tos to client 16
    ip_tos to server 16
    }

    Figure 2.14 Example of a pool that sets the ToS level on a packet

    In addition to configuring a pool that sets the ToS level on a packet, you can configure a rule that selects a pool based on the existing ToS value within the packet. For more information, see Type of Service (ToS) level, on page 2-35 .

    Disabling SNAT and NAT connections

    When configuring a pool, you can specifically disable any secure network address translations (SNATs) or network address translations (NATs) for any connections that use that pool. By default, this setting is enabled.

    For general information on SNATs and NATs, see Address translation: SNATs, NATs, and IP forwarding, on page 2-65 .

    The example in Figure 2.15 shows the syntax for disabling SNAT and NAT translation for any connections that use the pool my_pool.

     pool my_pool {     
    snat disable
    nat disable
    member 10.1.1.1:80
    member 10.1.1.2:80
    }

    Figure 2.15 Disabling SNAT and NAT translations

    To disable a SNAT or NAT connection for a pool using the Configuration utility

    1. In the navigation pane, click Pools.
    2. Click the Add button.
    3. Clear the Enable SNATs check box. (By default, this box is checked.)
    4. Click Done.

    To disable a SNAT or NAT connection for a pool from the command line

    Use the following command to disable a SNAT or NAT connection:

    b pool <pool_name> modify { snat disable }

    One case in which you might want to configure a pool to disable SNAT or NAT connections is when you want the pool to disable SNAT or NAT connections for a specific service. In this case, you could create a separate pool to handle all connections for that service, and then configure the snat disable or nat disable attribute on that pool. The following section describes this procedure.

    To disable SNAT connections that use a specific service

    The following procedure creates an automapped SNAT for a VLAN, creates a pool that disables SNAT or NAT connections, and then directs a wildcard virtual server using port 162 to send connections to the newly-defined pool.

    1. Enable SNAT automapping on the self IP address for VLAN my_vlan. For example:

      b self 192.168.33.14 vlan my_vlan snat automap enable

    2. Create an automapped SNAT for the VLAN my_vlan. For example:

      b snat map my_vlan to auto

    3. Create a forwarding pool with the snat disable attribute defined. For example:

      b pool snat_disable_pool { snat disable forward }

      Note: For information on forwarding pools, see Forwarding pools, on page 2-38 .

    4. Create a wildcard virtual server for the VLAN my_vlan, specifying port 162 and the pool snat_disable_pool. For example:

      b virtual my_vlan :162 use pool snat_disable_pool

    Figure 2.16 shows the resulting entries in the /config/bigip.conf file.

     # self IP addresses    
    self 192.168.33.14 {
    vlan my_vlan
    netmask 255.255.255.0
    broadcast 192.168.33.255
    snat automap enable

    }

    # server pools
    pool snat_disable_pool {
    snat disable
    forward

    }

    # virtual servers
    virtual servers:162 unit 1 {
    use pool snat_disable_pool
    translate addr disable

    Figure 2.16 Sample entries in the /config/bigip.conf file

    Figure 2.17 shows an example of a rule that sends SNAT connections to a pool that disables SNAT connections on a range of ports, defined in the class IP_Port_Range.

     # The snat_disable pool disables all SNAT connections.    
    if (client_port == one of IP_Port_Range {
    use ( snat_disable)
    }
    else {
    use ( other_pool)
    }

    # The IP_Port_Range class contains a list of two ports/services.

    class IP_Port_Range {
    161
    162
    }

    Figure 2.17 A rule that disables SNAT connections for a range of ports

    Forwarding pools

    A forwarding pool is a pool that specifies that a connection should be forwarded, using IP routing, instead of load balanced. In many cases, this eliminates the need to create a forwarding virtual server.

    Forwarding pools are typically used with wildcard virtual servers or network virtual servers only. When you enable forwarding on a pool, you can apply any feature that can be configured on a pool to a forwarding connection.

    A pool configured for forwarding has no members. Also, this type of pool cannot be the default gateway pool.

    Figure 2.18 shows an example of a pool configured for forwarding.

     pool my_pool {     
    link_qos to client 5
    link_qos to server 5
    forward
    }

    Figure 2.18 Example of a pool configured for forwarding

    To configure a pool for forwarding using the Configuration utility

    1. In the navigation pane, click Pools.
    2. Click the Add button.
    3. Click the Forwarding button. If you enable forwarding, you cannot enter a list of pool members.
    4. Click Done.

    To configure a pool for forwarding from the command line

    Use the following command to configure a forwarding pool:

    b pool <pool_name> { forward }

    Note: If you want to enable IP forwarding for a virtual server or globally for the Link Controller, see Forwarding virtual servers, on page 2-47 and IP forwarding, on page 2-77 , respectively.

    Virtual servers

    A virtual server with its virtual address is the visible, routable entity through which nodes in a load balancing pool are made available to a client, either directly or indirectly through a rule. (The exception is the forwarding virtual server, which simply forwards traffic and has no associated pools.)

    You must configure a pool of servers before you can create a virtual server that references the pool. Before you configure virtual servers, you need to know:

    • Which virtual server type meets your needs
    • Whether you need to activate optional virtual server properties

    Once you know which virtual server options are useful in your network, you can define any one of the four types of virtual servers.

    You can configure various types of virtual servers, depending on your needs. Table 2.8 shows the types of virtual servers that you can create.

    Virtual server types

    Virtual Server Type

    Description

    Standard virtual server

    A standard virtual server is a virtual server with a full IP address. For example:

    192.168.200.30:http

    Wildcard virtual server

    There are two types of wildcard servers:

    A port-specific wildcard virtual server is a virtual server with a port specified. A port-specific wildcard virtual server is used to accept all traffic for a specific service.

    A default wildcard virtual server is a wildcard virtual server with the service 0, *, or any. A default wildcard server acts like a default router, accepting all traffic that does not match a standard, network, or port-specific wildcard server.

    Network virtual server

    A network virtual server is a virtual server with a network IP address, allowing it to handle a whole range of addresses in a network. For example:

    192.168.200.0:http

    Forwarding virtual server

    A forwarding virtual server is a virtual server without a pool that simply forwards traffic to the destination node.

    Standard virtual servers

    A standard virtual server represents a specific site, such as an Internet web site or an FTP site, and it load balances content servers that are members of a pool. The IP address that you use for a standard virtual server should match the IP address that DNS associates with the site's domain name.

    To define a standard virtual server using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
    2. Click the Add button.
      The Add Virtual Server screen opens.
    3. In the Address box, type the virtual server's IP address or host name.
    4. In the Port box, either type a port number or select a service name from the list.
    5. In the Select Physical Resources screen, click the Pool button.
      If you want to assign a load balancing rule to the virtual server, click Rule and select a rule you have configured.
    6. In the Pool list, select the pool you want to apply to the virtual server.
    7. Click the Apply button.

    To define a standard virtual server from the command line

    Type the bigpipe virtual command as shown below. Also, remember that you can use host names in place of IP addresses, and that you can use standard service names in place of port numbers.

    b virtual <virt_ip>:<service> use pool <pool_name>

    For example, the following command defines a virtual server that maps to the pool my_pool:

    b virtual 192.200.100.25:80 use pool my_pool

    Note: If a virtual server is to have the same IP address as a node in an associated VLAN, you must perform some additional configuration tasks. These tasks consist of: creating a VLAN group that includes the VLAN in which the node resides, assigning self-IP addresses to the VLAN group, and disabling the virtual server on the relevant VLAN. For information on creating VLAN groups and assigning self IP addresses to them, see Creating VLAN groups, on page 1-13 . For information on disabling a virtual server for a specific VLAN, see Enabling or disabling a virtual server, on page 2-49 .

    Wildcard virtual servers

    Wildcard virtual servers are a special type of virtual server designed to manage network traffic for transparent network devices, such as transparent firewalls, routers, proxy servers, or cache servers. A wildcard virtual server manages network traffic that has a destination IP address unknown to the Link Controller. A standard virtual server typically represents a specific site, such as an Internet web site, and its IP address matches the IP address that DNS associates with the site's domain name. When the Link Controller receives a connection request for that site, the Link Controller recognizes that the client's destination IP address matches the IP address of the virtual server, and it subsequently forwards the client to one of the content servers that the virtual server load balances.

    However, when you are load balancing transparent nodes, a client's destination IP address is going to seem random. The client is connecting to an IP address on the other side of the firewall, router, or proxy server. In this situation, the Link Controller cannot match the client's destination IP address to a virtual server IP address. Wildcard virtual servers resolve this problem by not translating the incoming IP address at the virtual server level on the Link Controller. For example, when the Link Controller does not find a specific virtual server match for a client's destination IP address, it matches the client's destination IP address to a wildcard virtual server. The Link Controller then forwards the client's packet to one of the firewalls or routers that the wildcard virtual server load balances, which in turn forwards the client's packet to the actual destination IP address.

    Default vs. port-specific wildcard servers

    When you configure wildcard virtual servers and the nodes that they load balance, you can use a wildcard port (port 0) in place of a real port number or service name. A wildcard port handles any and all types of network services.

    A wildcard virtual server that uses port 0 is referred to as a default wildcard virtual server, and it handles traffic for all services. A port-specific wildcard virtual server handles traffic only for a particular service, and you define it using a service name or a port number. If you use both a default wildcard virtual server and port-specific wildcard virtual servers, any traffic that does not match either a standard virtual server or one of the port-specific wildcard virtual servers is handled by the default wildcard virtual server.

    By default, a default wildcard virtual server is enabled for all VLANs. However, you can specifically disable any VLANs that you do not want the default wildcard virtual server to support. Disabling VLANs for the default wildcard virtual server is done by creating a VLAN disabled list. Note that a VLAN disabled list applies to default wildcard virtual servers only. You cannot create a VLAN disabled list for a wildcard virtual server that is associated with one VLAN only.

    You can use port-specific wildcard virtual servers for tracking statistics for a particular type of network traffic, or for routing outgoing traffic, such as HTTP traffic, directly to a cache server rather than a firewall or router.

    We recommend that when you define transparent nodes that need to handle more than one type of service, such as a firewall or a router, you specify an actual port for the node and turn off port translation for the virtual server.

    For the procedure to create a default wildcard server, see Creating a default wildcard virtual server, on page 2-44 .

    Configuring wildcard virtual servers

    Creating a wildcard virtual server involves three tasks. First, you must create a pool that contains the addresses of the transparent devices. Next, you must create the wildcard virtual server. Then you must turn port translation off for the virtual server. The following sections describe these tasks, followed by the procedure for creating a default wildcard server.

    Creating a pool of transparent devices

    Before you create the wildcard virtual server, you create the pool of transparent devices that are the resources for the wildcard virtual server.

    To create a pool of transparent devices using the Configuration utility

    To create a pool of transparent devices using the Configuration utility, use the Add Pool wizard, available from the Pools screen. For more information, see To create a pool using the Configuration utility, on page 2-3 .

    To create a pool of transparent devices from the command line

    Create the pool of transparent devices, using the bigpipe pool command. For example, you can create a pool of transparent devices called transparent_pool that uses the Round Robin load balancing mode:

    b pool transparent_pool { member 10.10.10.101:80 member\ 10.10.10.102:80 member 10.10.10.103:80 }

    Creating a wildcard virtual server

    After you create the pool of transparent devices, you create the wildcard virtual server.

    To create a wildcard virtual server using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
    2. Click the Add button.
      The Add Virtual Server screen opens.
    3. In the Address box, type the wildcard IP address 0.0.0.0.
    4. In the Port box, type a port number, or select a service name from the list. Note that port 0 defines a wildcard virtual server that handles all types of services. If you specify a port number, you create a port-specific wildcard virtual server. The wildcard virtual server handles traffic only for the port specified. For more information, see Default vs. port-specific wildcard servers, on page 2-42 .
    5. In Resources, click the Pool button.
    6. In the Pool list, select the pool you want to apply to the virtual server.
    7. Click the Apply button.

    To create a wildcard virtual server from the command line

    To create a wildcard virtual server that maps to the pool transparent_pool, use the following command:

    b virtual 0.0.0.0:0 use pool transparent_pool

    Because the pool members are firewalls and need to handle a variety of services, the virtual server is defined using port 0 (or * or any). You can specify any valid non-zero port for the node port and then turn off port translation for that port. In this example, service checks ping port 80.

    Disabling port translation for a wildcard virtual server

    To turn off port translation for a wildcard virtual server using the Configuration utility

    After you define the wildcard virtual server with a wildcard port, you must disable port translation for the virtual server.

    1. In the navigation pane, click Virtual Servers.
      The Virtual Servers screen opens.
    2. In the virtual server list, click the virtual server for which you want to turn off port translation.
      The Virtual Server Properties screen opens.
    3. In the Enable Translation section, clear the Port box.
    4. Click the Apply button.

    To turn off port translation for a wildcard virtual server from the command line

    To turn off port translation for the port in the virtual server definition, use the following command:

    b virtual 0.0.0.0:0 translate port disable

    Creating a default wildcard virtual server

    You can create a default wildcard virtual server to handle any traffic that does not match either a standard virtual server or one of the port-specific wildcard virtual servers.

    To create a default wildcard virtual server using the Configuration utility

    1. In the Navigation pane, select Virtual Servers.
      The Virtual Servers screen displays.
    2. Click the Add button.
    3. In the Address field, type the IP address 0.0.0.0.
    4. Click Next.
    5. From the VLAN box, select all.
    6. Click Done.

    To create a default wildcard virtual server from the command line

    To create a default wildcard virtual server from the command line, use the bigpipe virtual command with the following syntax:

    b virtual *:* use pool <pool_name>

    Creating multiple wildcard servers

    Link Controller supports multiple wildcard virtual servers, all running simultaneously. Each wildcard virtual server must be assigned to an individual VLAN, and therefore handles packets for that VLAN only.

    To create multiple wildcard virtual servers, you can use either the Configuration utility or the bigpipe virtual command.

    To create multiple wildcard virtual servers using the Configuration utility

    To create multiple wildcard virtual servers using the Configuration utility, use the following procedure:

    1. In the Navigation pane, select Virtual Servers.
      The Virtual Servers screen displays.
    2. Click the Add button.
    3. In the Address field, type the IP address 0.0.0.0.
    4. In the Service field, type the name of a service or select a service from the list box.
    5. Click Next.
    6. From the VLAN box, choose a VLAN name. Selecting all creates a default wildcard virtual server.
    7. Click Next.
    8. Continue configuring all properties for the wildcard virtual server. Note that on the Configure Basic Properties screen, if you are creating a default wildcard virtual server, you can disable any VLANs associated with that wildcard virtual server.
    9. Click Done.

      Repeat for each wildcard virtual server that you want to create.

    To create multiple wildcard virtual servers from the command line

    To create a separate wildcard virtual server per VLAN from the command line, use the following command-line syntax:

    b virtual <vlan_name> use pool <pool_name>

    For example, the following commands define two wildcard virtual servers, the first for VLAN internal, and the second for VLAN external:

    b virtual internal use pool my_pool

    b virtual external use pool my_pool

    Network virtual servers

    You can configure a network virtual server to handle a whole network range, instead of just one IP address, or all IP addresses (a wildcard virtual server). For example, the virtual server in Figure 2.19 handles all traffic addresses in the 192.168.1.0 network.

    Figure 2.19 A sample network virtual server

     bigpipe virtual 192.168.1.0:0 {    
    netmask 255.255.255.0 use pool ingress_firewalls
    }

    A network virtual server is a virtual server that has no bits set in the host portion of the IP address. The example above directs all traffic destined to the subnet 192.168.1.0/24 through the Link Controller to the ingress_firewalls pool.

    The netmask of a network virtual server establishes which portion of the address is actually the network of a network virtual server. By default, this is the netmask of the self IP address. In the example, the network mask of 255.255.255.0 states that the network portion of the address is 192.168.1, which in this case is obvious because only the last octet has a zero value.

    A less obvious case would be the network virtual server 10.0.0.0:0. Here, the zero in the second octet is ambiguous: it could be a wildcard or it could be a literal zero. If it is a wildcard, this would be established by a netmask of 255.0.0.0. If it is a literal zero, this would be established by a netmask of 255.255.0.0.

    Another way you can use this feature is to create a catch-all web server for an entire subnet. For example, you could create the following network virtual server, shown in Figure 2.20 .

    Figure 2.20 A catch-all web server configuration.

     bigpipe virtual 192.168.1.0:http {    
    netmask 255.255.255.0 broadcast 192.168.1.255
    use pool default_webservers
    }

    This configuration directs a web connection destined to any address within the subnet 192.168.1.0/24 to the default_webservers pool.

    Forwarding virtual servers

    A forwarding virtual server is just like other virtual servers, except that the virtual server has no nodes to load balance. It simply forwards the packet directly to the node. Connections are added, tracked, and reaped just as with other virtual servers. You can also view statistics for forwarding virtual servers.

    To configure forwarding virtual servers using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
      The Virtual Servers screen opens.
    2. Click the Add button.
      The Add Virtual Server screen opens.
    3. Type the virtual server attributes, including the address and port number.
    4. Under Configure Basic Properties, clear the check from Enable Arp.
    5. On the Select Physical Resources screen, click the Forwarding button.
    6. Click the Apply button.

    To configure a forwarding virtual server from the command line

    Use the following syntax to configure forwarding virtual servers:

    b virtual <virt_ip>:<service> forward

    b virtual <virt_ip>:<service> arp disable

    For example, to allow only one service in:

    b virtual 206.32.11.6:80 forward

    b virtual <virt_ip>:<service> arp disable

    Use the following command to allow only one server in:

    b virtual 206.32.11.5:0 forward

    b virtual <virt_ip>:<service> arp disable

    To forward all traffic, use the following command:

    b virtual 0.0.0.0:0 forward

    In some of the configurations described here, you need to set up a wildcard virtual server on one side of the Link Controller to load balance connections across transparent devices. You can create another wildcard virtual server on the other side of the Link Controller to forward packets to virtual servers receiving connections from the transparent devices and forwarding them to their destination.

    Tip: If you do not want Link Controller to load balance your traffic but do want to take advantage of certain pool attributes, you can instead use a feature called a forwarding pool. For more information on forwarding pools, see Forwarding pools, on page 2-38 .

    Note: If a forwarding virtual server is to have the same IP address as a node in an associated VLAN, you must perform some additional configuration tasks. These tasks consist of: creating a VLAN group that includes the VLAN in which the node resides, assigning self-IP addresses to the VLAN group, and disabling the virtual server on the relevant VLAN. For information on creating VLAN groups and assigning self IP addresses to them, see Creating VLAN groups, on page 1-13 . For information on disabling a virtual server for a specific VLAN, see Enabling or disabling a virtual server, on page 2-49 .

    Virtual server options

    For each type of virtual server, you can configure several options. These options are shown in 2.9 .

    Virtual server configuration options

    Option

    Description

    Display virtual server information

    Using the bigpipe virtual show command, you can display information about one or more virtual servers.

    Enable/disable a virtual server

    By default, a virtual server is enabled. If you want to disable a virtual server, you can do so.

    Enable/disable a virtual address

    By default, a virtual address is enabled. If you want to disable a virtual address, you can do so.

    *Override netmask and broadcast

    *You can override the default netmask and broadcast for a network virtual address.

    Enable/disable address and port translation

    You can turn port translation off for a virtual server if you want to use the virtual server to load balance connections to any service.

    Reset connections when service is down

    You can configure the Link Controller to automatically reset connections to the virtual server when the service is down.

    Enable/disable dynamic connection rebinding

    You can cause any connections that were made to a node address or service to be redirected to another node, if the original node transitions to a down state.

    Disable ARP requests

    You can control gratuitous ARPs and ARP requests.

    Enable/disable TCP Resets on timeout

    When you enable this option, the virtual server sends a TCP Reset when a TCP connection is timed out. The default setting for this option is Enabled.

    Set FastFlow packet acceleration

    You can speed up packet flow for TCP connections when the packets are not fragmented.

    Set a connection limit

    You can set a concurrent connection limit on one or more virtual servers.

    Mirror state information

    You can use mirroring to maintain the same state information in the standby unit that is in the active unit, allowing transactions such as FTP file transfers to continue as though uninterrupted.

    Define a last hop pool

    You can direct reply traffic to the last hop router using a last hop pool. This overrides the auto_lasthop setting.

    Define resources

    You can configure a virtual server to use a pool or reference a rule. You can also specify that the virtual server is to function as a forwarding virtual server.

    Load balance traffic for any IP protocol

    You can configure a virtual server to load balance traffic that uses IP protocols other than TCP and UDP. For example, you can load balance IPSEC traffic from virtual private networks (VPNs).

    Delete a virtual server

    You can delete an existing virtual server.

    Reset virtual server statistics

    You can reset virtual server statistics.

    Displaying information about virtual addresses

    You can display information about the virtual addresses that host individual virtual servers. Use the following syntax to display information about one or more virtual addresses included in the configuration:

    b virtual <virt_ip> [... <virt_ip> ] show

    The command displays information such as the virtual servers associated with each virtual address, the status, and the current, total, and maximum number of connections managed by the virtual address since the Link Controller was last rebooted, or since the Link Controller became the active unit (redundant configurations only).

    Enabling or disabling a virtual server

    You can remove an existing virtual server from network service, or return the virtual server to service, using the disable and enable keywords. As an option, you can enable or disable a virtual server for a specific VLAN only.

    When you disable a virtual server, the virtual server no longer accepts new connection requests, but it allows current connections to finish processing before the virtual server goes to a down state.

    To disable or enable a virtual server using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
      The list of virtual servers displays.
    2. Click on the virtual server that you want to disable or enable.
      This displays the properties for that virtual server.
    3. If you want to disable the virtual server for all VLANs, clear the Enabled check box. If you want to disable the virtual server for a specific VLAN, locate the VLANs Disabled box and move the relevant VLAN name from the Existing list to the Disabled list, using the Move button (>>).
    4. If you want to enable the virtual server for all VLANs, click the Enabled check box (if not already checked). If you want to enable the virtual server for a specific VLAN, locate the VLANs Disabled box and move the relevant VLAN name from the Disabled list to the Existing list, using the Move button (>>).
    5. Click Done.

    Note: If the Enabled check box is checked and no VLANs are listed in the Disabled list of the VLANs Disabled box, the virtual server is enabled for all VLANs. If the Enabled check box is not checked, the virtual server is disabled for all VLANs.

    To disable or enable a virtual server from the command line

    Use the following syntax to disable a virtual server from network service:

    b virtual <virt_ip>:<service> [...<virt_ip>:<service>] disable

    If you want to disable or enable a virtual server for one or more specific VLANs only, use the following syntax:

    b virtual <virt_ip>:<service> vlans <vlan_list> disable | enable

    Use the following syntax to return a virtual server to network service:

    b virtual <virt_ip>:<service> enable

    Note: If you do not specify a VLAN name with the b virtual command, the virtual server is enabled or disabled on all VLANs.

    Enabling or disabling a virtual address

    You can remove an existing virtual address from network service, or return the virtual address to service, using the disable and enable keywords. Note that when you enable or disable a virtual address, you inherently enable or disable all of the virtual servers that use the virtual address.

    b virtual <virt_ip> disable

    Use the following syntax to return a virtual address to network service:

    b virtual <virt_ip> enable

    Setting a user-defined netmask and broadcast

    The default netmask for a virtual address, and for each virtual server hosted by that virtual address, is determined by the network class of the IP address entered for the virtual server. The default broadcast is automatically determined by the Link Controller, and it is based on the virtual address and the current netmask. You can override the default netmask and broadcast for a network virtual address only.

    All virtual servers hosted by the virtual address use the netmask and broadcast of the virtual address, whether they are default values or they are user-defined values.

    To set a custom netmask and broadcast

    If you want to use a custom netmask and broadcast, you define both when you define the network virtual server:

    b virtual <virt_ip>[:<service>] [vlan <vlan_name> disable | enable] [netmask <ip>] [broadcast <ip>] use pool <pool_name>

    Note: The Link Controller calculates the broadcast based on the IP address and the netmask. In most cases, a user-defined broadcast address is not necessary.

    Again, even when you define a custom netmask and broadcast in a specific network virtual server definition, the settings apply to all virtual servers that use the same virtual address. The following sample command shows a user-defined netmask and broadcast:

    b virtual www.SiteOne.com:http netmask 255.255.0.0\
    broadcast 10.0.140.255 use pool my_pool

    The /bitmask option shown in the following example applies network and broadcast address masks. In this example, a 24-bit bitmask sets the network mask and broadcast address for the virtual server:

    b virtual 206.168.225.0:80/24 use pool my_pool

    You can generate the same broadcast address by applying the 255.255.255.0 netmask. The effect of the bitmask is the same as applying the 255.255.255.0 netmask. The broadcast address is derived as 206.168.225.255 from the network mask for this virtual server.

    Setting translation properties for virtual addresses and ports

    Turning off port translation for a virtual server is useful if you want to use the virtual server to load balance connections to any service.

    You can also configure the translation properties for a virtual server address. This option is useful when the Link Controller is load balancing devices that have the same IP address. This is typical with the nPath routing configuration where duplicate IP addresses are configured on the loopback device of several servers.

    To enable or disable port translation

    Use the following syntax to enable or disable port translation for a virtual server:

    b virtual <virt_ip>:<service> translate port enable | disable | show

    To enable or disable address translation

    Use the following syntax to enable or disable address translation for a virtual server:

    b virtual <virt_ip>:<service> translate addr enable | disable | show

    Resetting connections when a service is down

    Using either the Configuration utility or the bigpipe virtual command, you can configure the Link Controller to automatically reset connections to the virtual server when the service becomes unavailable.

    To reset connections using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
    2. In the list of virtual servers, click a virtual server.
    3. Click the Virtual Server Properties tab.
    4. Check the Enable Reset on Service Down box.
    5. Press the Apply button.

    To reset connections from the command line

    Use the following command-line syntax:

    b virtual <ip address>:<service> svc_down reset enable

    Setting dynamic connection rebinding

    Dynamic connection rebinding is a feature for those virtual servers that are load balancing transparent devices such as firewalls or routers. Dynamic connection rebinding causes any connections that were made to a node address or service to be redirected to another node, if the original node transitions to a down state. In this case, all connections to the failed node that were made through the virtual server are moved to a newly-selected node from the virtual server's pool. The new node is selected using the pool's load-balancing algorithm. By default, dynamic connection rebinding is disabled.

    Note: This feature does not apply to virtual servers for non-transparent devices because they usually involve application state between the client and server node. This state cannot be recreated with a newly-selected node.

    To enable, disable, or show the status of dynamic connection rebinding, you can use either the Configuration utility or the bigpipe virtual command.

    To set dynamic connection rebinding using the Configuration utility

    To set dynamic connection rebinding using the Configuration utility, use the following procedure.

    1. In the Navigation pane, click Virtual Servers.
      The Virtual Servers screen opens.
    2. Click the IP address for the virtual server that you want to modify. The Properties page for the virtual server opens.
    3. Check the Enable Connection Rebind box.
    4. Click the Apply button.

    To set dynamic connection rebinding from the command line

    To manage dynamic connection rebinding using the bigpipe virtual command, type one of the following commands.

    b virtual <ip>:<service> conn rebind enable
    b virtual <ip>:<service> conn rebind disable
    b virtual <ip>:<service> conn rebind show

    Disabling ARP requests

    By default, the Link Controller responds to ARP requests for the virtual server address and sends a gratuitous ARP request for router table updates.

    To disable ARP requests using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
      The list of virtual servers displays.
    2. Click the virtual server that you want to disable or enable.
      This displays the properties for that virtual server.
    3. Clear the Enable ARP check box.
    4. Click the Apply button.

    To disable ARP requests from the command line

    To disable ARP requests from the command line, use the following command line syntax:

    b virtual <ip address>:<service> arp disable

    Turning software acceleration off for virtual servers using IPFW rate filters

    The software acceleration feature speeds packet flow for TCP connections when the packets are not fragmented. For configurations with no IPFW rate filter present, software acceleration is turned on by default by giving the global variable fastflow_active a default value of auto. The variable fastflow_active auto enables acceleration globally if IPFW filters are not present, and disables it globally if IPFW filters are present. (This is because, with acceleration on, IPFW only examines the first SYN packet in any given connection, rather than filtering all packets.) If you want to turn on acceleration globally but turn it off for the specific virtual servers that use IPFW rate filters, you must change the fastflow_active setting from auto to on, then disable the virtual servers individually using the bigpipe virtual <ip>:<service> accelerate disable command.

    To set software acceleration controls from the command line

    To enable software acceleration globally in a way that can be overridden for individual virtual servers, set the bigpipe global variable fastflow_active to on with the following command:

    b global fastflow_active on

    Then, to disable software acceleration for individual virtual servers that use IPFW rate filtering, use the following bigpipe command:

    b virtual <ip>:<service> accelerate disable

    For example, if you want to turn acceleration off for the virtual server 10.10.10.50:80, type the following command:

    b virtual 10.10.10.50:80 accelerate disable

    You can define a virtual server with acceleration disabled using the following syntax:

    b virtual <ip>:<service> use pool the_pool accelerate disable

    For example, if you want to define the virtual server 10.10.10.50:80 with the pool IPFW_pool and acceleration turned off, type the following command:

    b virtual 10.10.10.50:80 use pool IPFW_pool accelerate disable

    Setting a connection limit

    The default setting is to have no limit to the number of concurrent connections allowed on a virtual server.

    To set a concurrent connection limit

    You can set a concurrent connection limit on one or more virtual servers using the following command:

    b virtual <virt_ip> [:<service>] [...<virt_ip>[:<service>]]\ limit <max_conn>

    The following example shows two virtual servers set to have a concurrent connection limit of 5000 each:

    b virtual www.SiteOne.com:http www.SiteTwo.com:ssl limit 5000

    To turn off the connection limit

    To turn off the connection limit, set the <max conn> variable to zero:

    b virtual <virt_ip>[:<service>] [...<virt_ip>[:<service>] ]\ limit 0

    Mirroring virtual server state

    Mirroring provides seamless recovery for current connections, persistence information, SSL persistence, or sticky persistence when a Link Controller fails. When you use the mirroring feature, the standby unit maintains the same state information as the active unit. Transactions such as FTP file transfers continue as though uninterrupted.

    Note: Mirroring slows Link Controller performance and is primarily useful for long-lived services like FTP and Telnet. Mirroring is not useful for short-lived connections like HTTP.

    Since mirroring is not intended to be used for all connections and persistence, it must be specifically enabled for each virtual server.

    To control mirroring for a virtual server

    To control mirroring for a virtual server, use the bigpipe virtual mirror command to enable or disable mirroring of persistence information, or connections, or both. The syntax of the command is:

    b virtual <virt addr>:<service> mirror [conn] enable|disable

    To mirror connection information for the virtual server

    Use the conn argument to mirror connection information for the virtual server. To display the current mirroring setting for a virtual server, use the following syntax:

    b virtual <virt addr>:<service> mirror [conn] show

    If you do not specify conn for connection information, the Link Controller assumes that you want to display that information.

    Note: If you set up mirroring on a virtual server that supports FTP connections, you need to mirror the control port virtual server, and the data port virtual server.

    The following example shows the two commands used to enable mirroring for virtual server v1 on the FTP control and data ports:

    b virtual v1:21 mirror conn enable

    b virtual v1:20 mirror conn enable

    Setting up last hop pools for virtual servers

    In cases where you have more than one router sending connections to a Link Controller, connections are automatically sent back through the same router from which they were received when the auto_lasthop global variable is enabled, as it is by default. If you want to exclude one or more routers from auto-lasthop, or if the global auto_lasthop is disabled for any reason (for example, you may not want it for an SSL gateway), you can use a last hop pool instead. (If auto_lasthop is enabled, the last hop pool takes precedence over it.)

    To configure a last hop pool, you must first create a pool containing the router inside addresses. After you create the pool, use the following syntax to configure a last hop pool for a virtual server:

    b virtual <virt_ip>:<service> lasthop pool <pool_name> | none |\ show

    Referencing Link Controller resources

    Once you have created a pool or a rule, you must configure the virtual server to reference the pool or rule. You can configure a virtual server to reference a pool or rule by using either the Configuration utility or the bigpipe command.

    To configure a virtual server that references a pool or rule using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
      The Virtual Servers screen opens.
    2. Add the attributes you want for the virtual server such as address, port, unit ID, and interface.
    3. In the Resources section, click Pool or Rule.
    4. In the list of pools or rules, select the pool or rule you want to apply to the virtual server.
    5. Click the Apply button.

    To configure a virtual server that references a rule from the command line

    There are several elements required for defining a virtual server that references a rule from the command line:

    b virtual <virt_serv_key> { <virt_options> <rule_name_reference> }

    Each of these elements is described in Table 2.10 .

    The command line rule elements

    Rule element

    Description

    <virt_serv_key>

    A virtual server key definition:

    <virtual_address>:<virt_port> [unit <ID>]

    <virt_options>

    Virtual server options. For more information, see Virtual server options, on page 2-48 .

    <rule_name_reference>

    A rule name reference. Rule names are strings of 1 to 31 characters.

    use rule <rule_name>

    Load balancing traffic for any IP protocol

    Link Controller allows you to configure a virtual server to load balance IP traffic other than TCP and UDP traffic. This option can be configured on both translating and non-translating virtual servers.

    One benefit of this feature is that you can load balance virtual private network (VPN) client connections across several VPNs, eliminating the possibility of a single point of failure. A typical use of this feature would be for load balancing multiple VPN gateways in an IPSEC VPN sandwich, using non-translating virtual servers.

    An important point to note, however, is that although address translation of such protocols can be optionally activated, some protocols, such as IPSEC in AH mode, rely on the IP headers remaining unchanged. In such cases, you should use non-translating network virtual servers.

    By default, this feature is disabled on a virtual server.

    To enable load balancing for any IP protocol using the Configuration utility

    1. In the navigation pane, click Virtual Servers.
    2. In the Virtual Server list, click the virtual server for which you want to enable any IP load balancing.
    3. Click the Virtual Address Properties tab.
    4. In the Any IP Traffic section of the screen, check the Enable box.
    5. Click the Apply button.

    To enable load balancing for any IP protocol from the command line

    Use the any_ip option with the bigpipe virtual command, as shown in the following syntax:

    b virtual <ip address:service> any_ip enable

    Deleting a virtual server

    Use the following syntax to permanently delete one or more virtual servers from the Link Controller configuration:

    b virtual <virt_ip>:<service> [... <virt_ip>:<service>] delete

    Resetting statistics for a virtual server

    Use the following command to reset the statistics for an individual virtual server:

    b virtual [<virt_ip:port>] stats reset

    Using other Link Controller features with virtual servers

    After you create a pool and define a virtual server that references the pool, you can set up additional features, such as network address translation (NATs) or extended content verification (ECV). For details on network address translations, see NATs, on page 2-74 . For details on persistence for connections that should return to the node to which they last connected, see Persistence, on page 2-21 .

    Nodes

    Nodes are the network devices to which the Link Controller passes traffic. A network device becomes a node when it is added as a member to a load balancing pool. You can display information about nodes and set properties for nodes.

    The attributes you can configure for a node are listed in Table 2.11 .

    The attributes you can configure for a node.

    Node Attributes

    Description

    Enable/Disable nodes

    You can enable or disable nodes independent of a load balancing pool.

    Set node up/down

    You can set a node to up or down.

    Connection limit

    You can place a connection limit on a node.

    Associate a node with a monitor

    You can associate a health monitor with a node, creating an instance of that monitor.

    Add a node as a member of a pool

    You can add a node to a pool as a member. This allows you to use the load balancing and persistence methods defined in the pool to control connections handled by the node.

    To enable and disable nodes and node addresses

    A node must be enabled in order to accept traffic. When a node is disabled, it allows existing connections to time out or end normally and accept new connections only if they belong to an existing persistence session. (In this way a disabled node differs from a node that is set down. The down node allows existing connections to time out, but accepts no new connections.)

    To enable a node or node address, use the node command with the enable option:

    b node 192.168.21.1 enable

    To disable a node or node address, use the node command with the disable option:

    b node 192.168.21.1 disable

    To mark nodes and node ports up or down

    A node must be marked up in order to accept traffic. When a node is marked down it allows existing connections to time out but accepts no new connections.

    To mark a node down, specify the node command with a node address and the down option. (Note that marking a node down prevents the node from accepting new connections. Existing connections are allowed to complete.)

    b node 192.168.21.1 down

    To mark a node up, use the node command with the up option:

    b node 192.168.21.1 up

    To mark a particular service down, specify the node command with a node address and port, and the down option. (Note that marking a port down prevents the port from accepting new connections. Existing connections are allowed to complete.)

    b node 192.168.21.1:80 down

    To mark a particular port up, use the node command with up option:

    b node 192.168.21.1:80 up

    To set connection limits for nodes

    Use the following command to set the maximum number of concurrent connections allowed on a node:

    b node <node_ip>[:<service>][...<node_ip>[:<service>]] limit <max conn>

    To remove a connection limit, set the <max conn> variable to 0 (zero). For example:

    b node 192.168.21.1:80 limit 0

    The following example shows how to set the maximum number of concurrent connections to 100 for a list of nodes:

    b node 192.168.21.1 192.168.21.1 192.168.21.1 limit 100

    To remove a connection limit, set the <max conn> variable to 0 (zero).

    To associate a health monitor with a node

    Use the following command to associate a health monitor with a node:

    node <node> monitor use <monitor>

    A monitor can be placed on multiple nodes and a node can have multiple monitors placed on it. To place a monitor on multiple nodes:

    node <node_list> monitor use <monitor>

    To place multiple monitors on a node:

    node <node> monitor use <monitor1> and <monitor2>...

    For more information on using the node command with health monitors, refer to Health monitors, on page 2-79 .

    To display status of all nodes

    When you issue the bigpipe node show command, the Link Controller displays the node status (up or down, or unchecked), and a node summary of connection statistics, which is further broken down to show statistics by port. To display the status of a node from the command line, type the following command:

    b node show

    The report shows the following information:

    • Current number of connections
    • Total number of connections made to the node since last boot
    • Maximum number of concurrent connections since the last boot
    • Concurrent connection limit on the node
    • The total number of connections made to the node since last boot
    • Total number of inbound and outbound packets and bits

      Figure 2.21 shows the output of this command.

      Figure 2.21 Node status and statistics

       bigpipe node 192.168.200.50:20    
      NODE 192.168.200.50 UP
      | (cur, max, limit, tot) = (0, 0, 0, 0)
      | (pckts,bits) in = (0, 0), out = (0, 0)
      +- PORT 20 UP
      (cur, max, limit, tot) = (0, 0, 0, 0)
      (pckts,bits) in = (0, 0), out = (0, 0)

    To display the status of individual nodes and node addresses

    Use the following command to display status and statistical information for one or more node addresses:

    b node 192.168.21.1 show

    The command reads the status of each node address, the number of current connections, total connections, and connections allowed, and the number of cumulative packets and bits sent and received.

    Use the following command to display status and statistical information for one or more specific nodes:

    b node 192.168.21.1:80 show

    To reset statistics for a node

    Use the following command to reset the statistics for an individual node address:

    b node [<node_ip>:<service>] stats reset

    To add a node as a member of a pool

    You can add a node as a member of a load balancing pool. For detailed information about how to do this, see Member specification, on page 2-5 .

    Services

    Services are the standard Internet applications supported by Link Controller, such as HTTP, HTTPs, FTP, and POP3. Each service is known by its name and also by its well-known or reserved port number such as 80 or 443. (Specifically, a service is any valid service name in the /etc/services file or any valid port number between 0 and 65535.) The bigpipe service command allows you to enable and disable network traffic on services, and also set connection limits and timeouts. You can use the service name or the port number for the <service> parameter. Note that the settings you define with this command control the service for all virtual servers that use it. By default, access to all services is disabled.

    Table 2.12

    The attributes you can configure for a service.

    Attributes

    Description

    Allow access to services

    As a security measure, all services are locked down on the Link Controller. In order for the Link Controller to load balance traffic, you must enable access to the service on which the Link Controller will receive traffic.

    Connection limits

    You can define a connection limit for a service so that a flood of connections does not overload the Link Controller.

    Set idle connection timeouts

    You can set the idle connection timeout to close idle connections.

    Tip: Virtual servers using the same service actually share a port on the Link Controller. This command is global, you only need to open access to a port once; you do not need to open access to a port for each instance of a virtual server that uses it.

    To allow access to services using the Configuration utility

    Any time you create a virtual server and define a port or service with the Configuration utility, the port or service is automatically enabled.

    To allow access to services from the command line

    Using the bigpipe service command, you can allow access to one or more services at a time.

    b service <service>...<service> <protocol> [tcp|udp] enable

    For example, in order to enable HTTP (service 80) and Telnet (service 23) services, you can type the following bigpipe service command:

    b service 80 23 443 tcp enable

    To set connection limits on services

    Use the following syntax to set the maximum number of concurrent connections allowed on a service. Note that you can configure this setting for one or more services.

    b service <service> [...<service>] limit <max conn>

    To turn off a connection limit for one or more services, use the same command, setting the <max conn> parameter to 0 (zero) like this:

    b service <service> [...<service>] limit 0

    To enable or disable TCP for services

    You can enable or disable TCP for specific services. The default setting for all services is enabled. Use the following syntax to disable TCP for one or more services:

    b service <service> [...<service>] tcp disable

    To re-enable TCP, use this syntax:

    b service <service> [...<service>] tcp enable

    To enable or disable UDP for services

    You can enable or disable UDP for specific services. The default setting for all services is disabled. Use the following syntax to enable UDP for one or more services:

    b service <service> [...<service>] udp enable

    To disable UDP, use this syntax:

    b service <service> [...<service>] udp disable

    To set the idle connection timeout for TCP traffic

    To set the TCP timeout on one or more services, where the <seconds> parameter is the number of seconds before an idle connection is dropped, use the following syntax:

    b service <service> [<service>...] timeout tcp <seconds>

    For example, the following command sets the TCP timeout to 300 seconds for port 53:

    b service 53 timeout tcp 300

    To turn off TCP timeout for a service, use the above command, setting the <seconds> parameter to zero:

    b service 53 timeout tcp 0

    To set the idle connection timeout for UDP traffic

    To set the UDP timeout on one or more services, where the <seconds> parameter is the number of seconds before an idle connection is dropped, use the following syntax:

    b service <service> [<service>...] timeout udp <seconds>

    For example, the following command sets the UDP timeout to 300 seconds for port 53:

    b service 53 timeout udp 300

    To turn off UDP timeout for a service, use the above command, setting the <seconds> parameter to zero:

    b service 53 timeout udp 0

    To display service settings

    Use the following command to display the settings for all services:

    b service show

    Use the following syntax to display the settings for a specific service of services:

    b service <service> [...<service>] show

    For example, the command b service http show displays the output shown in Figure 2.22 .

    Figure 2.22 Sample output of the bigpipe service show command

     SERVICE 80 http tcp enabled timeout 1005 udp disabled timeout 60
    (cur, max, limit, tot, reaped) = (0, 0, 0, 0, 0)
    (pckts,bits) in = (0, 0), out = (0, 0)

    Address translation: SNATs, NATs, and IP forwarding

    The Link Controller uses address translation and forwarding in various ways to make nodes accessible that would otherwise be hidden on its internal VLAN.

    • A virtual server translates the destination address of an inbound packet from its own address (the virtual server's) to the address of the node to which it load balances the packet. It then translates the origin address of the reply back to its own address so the originating host will not try to address the member node directly. This translation is basic to the way the virtual server works in most configurations and it is enabled by default.
    • You can configure a SNAT (Secure Network Address Translation) or NAT (Network Address Translation) to give a node that is a member of a load balancing pool a routable address as an origin address for purposes of generating its own outbound traffic. A SNAT can be configured manually, or automatically using the SNAT auto-map feature.
    • You can configure a forwarding virtual server to expose selected nodes to the external network.
    • You can configure IP forwarding globally to expose all internal nodes to the external network

    For more information on enabling address translation for virtual servers, refer to Virtual servers, on page 2-40 . The following sections describe how to configure SNATs, NATs, and IP forwarding.

    SNATs

    A secure network address translation (SNAT) provides a routable alias IP address that a node can use as its source IP address when making connections to clients on the external network. Unlike a network translation address (NAT), a SNAT does not accept inbound traffic, and this is where its security lies. When you define a SNAT, you can use it in any of the following ways:

    • Assign a single SNAT address to a single node
    • Assign a single SNAT address to multiple nodes
    • Enable a SNAT for a VLAN

    Note that a SNAT address does not necessarily have to be unique; for example, it can match the IP address of a virtual server.

    The attributes you can configure for a SNAT are shown in Table 2.13 .

    The attributes you can configure for a SNAT

    Attributes

    Description

    Global SNAT properties

    Before you configure a SNAT, you can configure global properties for all SNATs on the Link Controller. Configuring global properties for a SNAT is optional.

    Manual SNAT mapping

    You can define a specific translation address to be mapped to an individual host.

    SNAT automapping

    You can configure Link Controller to automatically map a translation address.

    Setting SNAT global properties

    The SNAT feature supports three global properties that apply to all SNAT addresses:

    • Connection limits
      The connection limit applies to each node that uses a SNAT.
    • TCP idle connection timeout
      This timer defines the number of seconds that TCP connections initiated using a SNAT address are allowed to remain idle before being automatically disconnected.
    • UDP idle connection timeout
      This timer defines the number of seconds that UDP connections initiated using a SNAT address are allowed to remain idle before being automatically disconnected. This value should not be set to 0.

    To configure SNAT global properties using the Configuration utility

    1. In the navigation pane, click SNATs.
      The SNATs screen opens.
    2. In the Connection Limit box, type the maximum number of connections you want to allow for each node using a SNAT.
    3. To turn connection limits off, set the limit to 0.
    4. In the TCP Idle Timeout box, type the number of seconds that TCP connections initiated by a node using a SNAT are allowed to remain idle.
    5. In the UDP Idle Timeout box, type the number of seconds that UDP connections initiated by a node using a SNAT are allowed to remain idle. This value should not be set to 0.
    6. Click the Apply button.

    To configure SNAT global properties from the command line

    Configuring global properties for a SNAT requires that you enter three bigpipe commands. The following command sets the maximum number of connections you want to allow for each node using a SNAT.

    b snat limit <value>

    The following commands set the TCP and UDP idle connection timeouts:

    b snat timeout tcp <seconds>

    b snat timeout udp <seconds>

    Configuring a SNAT manually

    Once you have configured the SNAT global properties, you can manually configure SNAT address mappings. When you map a SNAT manually, you specify a particular translation IP address that you want the Link Controller to assign from any of the following:

    • One or more specified node addresses
    • One or more VLANs
    • A combination of specified node addresses and VLANs
    • All node addresses (known as a default SNAT)

    Note that a SNAT address does not necessarily have to be unique; for example, it can match the IP address of a virtual server. A SNAT address cannot match an address already in use by a NAT or another SNAT address.

    The following sections describe how to add a default SNAT and how to add a SNAT manually for individual node addresses, VLANs, or a combination of both.

    Adding a default SNAT manually

    If you do not want to configure a SNAT for each individual node, you can manually create a default SNAT. When you add a default SNAT, you are directing the Link Controller to map every node on the internal network to a default translation address.

    To add a default SNAT manually using the Configuration utility

    1. In the navigation pane, click NATs.
      The NATs screen displays.
    2. Click the SNATs tab.
    3. Click the Add Default button.
      The Add Default SNAT screen opens.
    4. In the Translation Address section, click IP, and type the IP address that you want Link Controller to assign as a translation address.
    5. Click Done.

    To add a default SNAT manually from the command line

    Use the following syntax to manually define the default SNAT. If you use the netmask parameter and it is different from the external interface default netmask, the command sets the netmask and derives the broadcast address.

    b snat map default to <snat_ip> [vlan <vlan_name>\ disable|enable] [netmask <ip>]

    Adding a SNAT for individual node addresses and VLANs

    If you do not want to add a default SNAT, you can add a SNAT for any individual node address or VLAN. The following procedures describe how to manually add a SNAT.

    To manually add a SNAT using the Configuration utility

    The Configuration utility allows you to define one SNAT for one or more original IP addresses, where the original IP address can be either a specific node address or a VLAN name.

    1. In the navigation pane, click NATs.
      The NATs screen displays.
    2. Click the SNATs tab.
    3. Click the Add button.
      The Add SNAT screen opens.
    4. In the Translation Address section, click IP, and type the IP address that you want Link Controller to assign as a translation address.
    5. Type each node's IP address into the Original Address: box and move the address to the Current List: box, using the Move button (>>). Also, verify that the option choose appears in the VLAN box.
    6. If you want to map the translation address from a VLAN, select the VLAN name from the VLAN box and move the selection to the Current List: box, using the Move button (>>).
    7. Click Done.

    To add a manual SNAT from the command line

    The bigpipe snat command defines one SNAT for one or more original IP addresses, where the original IP address can be either a specific node address or a VLAN name. To manually add a SNAT using the bigpipe snat command, use the following syntax.

    b snat map <orig_ip>... to <snat_ip>

    For example, to define a SNAT for two specific nodes:

    b snat map 192.168.75.50 192.168.75.51 to 192.168.100.10

    To define a SNAT for two internal VLANs:

    b snat map internal1 internal2 to 192.168.102.11

    To define a SNAT for both a node address and a VLAN:

    b snat map 192.168.75.50 internal2 to 192.168.100.12

    To create individual SNAT addresses

    Use the following command-line syntax to create a SNAT mapping:

    b snat map <orig_ip> [...<orig_ip>] to <snat_ip>\
    [vlan <vlan_name> disable | enable] [unit <unit ID>]\
    [netmask <ip>]

    If the netmask is different from the external interface default netmask, the command sets the netmask and derives the broadcast address.

    Configuring SNAT automapping

    Link Controller includes a feature called SNAT automapping. When you map a SNAT automatically, rather than manually, you enable the Link Controller to choose the translation IP address. You also enable the Link Controller to map that translation address from any of the following:

    • One or more specified node address
    • One or more VLANs
    • A combination of specific node addresses and VLANs
    • All node addresses (known as a default SNAT)

      SNAT automapping eliminates the need for you to specifically define an IP address as the translation address.

      The SNAT automapping feature is useful in the following cases:

    • Where there is a need to ensure that outbound traffic returning through ISPs or NAT-less firewalls returns through the same ISP or firewall.
    • Where a traditional single SNAT address would quickly exhaust the number of ephemeral ports available. As long as there is more than one eligible self IP address, SNAT automapping can increase the number of simultaneous connections possible by using the same ephemeral port on multiple addresses.
    • When the equivalent of a default SNAT is required for Link Controller units in active-active mode. (The conventional default SNAT does not work in active-active mode.)

    Adding an automapped default SNAT

    The Link Controller allows you to take advantage of the SNAT automapping feature when adding a default SNAT. When you add a default SNAT, you are enabling the Link Controller to map every node on the internal network to a default translation address. With the automapping feature, you do not need to define a specific translation address to which all nodes on the network will be mapped.

    To add the automapped default SNAT using the Configuration utility

    1. In the navigation pane, click NATs.
      The NATs screen displays.
    2. Click the SNATs tab.
    3. Click the Add Default button.
      The Add Default SNAT screen opens.
    4. Click the Automap button.
    5. Click Done.

    To add the automapped default SNAT from the command line

    To add a default SNAT using the automapping feature, type the bigpipe snat command as follows:

    b snat map default to auto

    Adding automapped SNATs for standard (active-standby) configurations

    When enabling SNAT automapping for VLANs, the Link Controller handles the SNATs in the following ways:

    • If you create a SNAT on an internal VLAN, a SNAT is performed on any connection made from that VLAN.
    • If you enable snat automap on a single self IP address, the translation address is that self IP address.
    • If you enable snat automap on more than one self IP address, (implying more than one IP network), the following rules apply:

      • If the connection is handled by a non-forwarding virtual server, the translation address is the self IP address that matches the IP network of the node selected by load balancing.
      • If the connection is handled by a forwarding virtual server or no virtual server, the translation address is the self IP address that matches the IP network of the next hop to the destination.
      • If there are no self addresses that match the IP network of the node or the next hop, any self IP address on the VLAN is eligible.

        To add a SNAT using the automapping feature, you must complete two procedures:

    • Enable the snat automap attribute on any self IP addresses.
    • Add the SNAT, specifying the Automap feature.

    The following sections explain these procedures.

    To enable the snat automap attribute on a self IP address from the command line

    When you enable automapping to add a SNAT, the translation address that the Link Controller maps to an individual node or a VLAN is the self IP address. Thus, prior to enabling automapping for the node or VLAN, you must enable the snat automap attribute on the self IP address. This is done from the command line, using the following syntax:

    b self <self IP address> snat automap enable

    For example, if you have the two self IP addresses 192.168.217.14 and 192.168.217.15, the following commands enable the snat automap attribute on those self IP addresses:

    b self 192.168.217.14 snat automap enable

    b self 192.168.217.15 snat automap enable

    Later, when you add a SNAT using automapping, the Link Controller maps either of those self IP addresses to the original node (or VLAN) that you specify.

    As another example, the following command enables the snat automap attribute on the self IP address 10.0.0.1, for the VLAN named external:

    b self 10.0.0.1 vlan external snat automap enable

    For more information, see To add an automapped SNAT from the command line, on page 2-72 .

    To add an automapped SNAT using the Configuration utility

    The Configuration utility allows you to define one SNAT for one or more original IP addresses, where the original IP address can be either a specific node address or a VLAN name.

    1. In the navigation pane, click NATs.
      The NATs screen displays.
    2. Click the SNATs tab.
    3. Click the Add button.
      The Add SNAT screen opens.
    4. In the Translation Address dialog area, click Automap.
    5. If you want to map the translation address from one or more specific nodes, enter each node's IP address into the Original Address: box and move the address to the Current List: box, using the Move button (>>). Also, verify that the option choose appears in the VLAN box.
    6. If you want to map the translation address to a VLAN, select the VLAN name from the VLAN box and move the selection to the Current List: field, using the Move button (>>).
    7. Click Done.

    To add an automapped SNAT from the command line

    The bigpipe snat command defines one SNAT for one or more original IP addresses, where the original IP address can be either a specific node address, or a VLAN name.

    For example, to define an automapped SNAT for two individual node addresses:

    b snat map 10.1.1.1 10.1.1.2 to auto

    In the preceding example, the translation address to which the nodes 10.1.1.1 and 10.1.1.2 will be mapped is the self IP address, assuming that you enabled the snat automap attribute on that self IP address prior to using the bigipipe snat command. For more information, see To enable the snat automap attribute on a self IP address from the command line, on page 2-71 .

    To define an automapped SNAT for a VLAN named internal:

    b snat map internal to auto

    To define an automapped SNAT for both a node address and a VLAN:

    b snat map 192.168.75.50 internal2 to auto

    Note: When adding automapped SNATs, you must also enable the snat automap attribute on the self IP address that the Link Controller will use as the translation address. For more information, see To enable the snat automap attribute on a self IP address from the command line, on page 2-71 .

    ISPs and NAT-less firewalls

    Link Controller handles ISPs and NAT-less firewalls in the following manner:

    • If multiple external interfaces are available, the inside addresses of the firewalls in the load balancing pool may each be connected to different interfaces and assigned to different VLANs.
    • A SNAT is then enabled on each VLAN.
    • A SNAT must also be enabled on the internal VLAN.

      For example, if the internal VLAN is named internal and the external VLANs are named external1 and external2, you would type the following commands:

      b snat internal to auto

      b snat external1 to auto

      b snat external2 to auto

    • If multiple external interfaces are not available, the ISP routers or firewalls are assigned to different IP networks. This will already be the case for ISPs.
    • For firewalls, the separate IP address ranges must be established on the inside and outside interfaces of each firewall. The separate networks are then assigned separate self addresses, for example, 10.0.0.1 and 11.0.0.1.

      Thus, if the internal and external VLANs are named internal and external, you type the following commands:

      b self 10.0.0.1 vlan external snat automap enable

      b self 11.0.0.1 vlan external snat automap enable

      b snat internal to auto

    Disabling SNATs and NATs for a pool

    When configuring a pool, you can specifically disable SNAT or NAT translations on any connections that use that pool. By default, this setting is enabled. For information on how to disable SNAT and NAT connections for a pool, see Disabling SNAT and NAT connections, on page 2-36 .

    Disabling ARP requests

    By default, the Link Controller responds to ARP requests for the SNAT address and sends a gratuitous ARP request for router table update. If you want to disable the SNAT address for ARP requests, you must specify arp disable.

    Additional SNAT configuration options

    The following procedures allow you to further configure SNATs.

    To delete SNAT addresses

    The following syntax deletes a specific SNAT:

    b snat <snat_ip> | default delete

    To show SNAT mappings

    The following bigpipe command shows mappings:

    b snat [<snat_ip> ...] show

    b snat default show

    The value of the <snat_ip> variable can be either the translated or the original IP address of the SNAT, or a SNAT-enabled VLAN name.

    The following command shows the current SNAT connections:

    b snat [<snat_ip> ...] dump [ verbose ]

    b snat default dump [ verbose ]

    The optional verbose keyword provides more detailed output.

    The following command prints the global SNAT settings:

    b snat globals show

    To enable mirroring for redundant systems

    The following example sets SNAT mirroring for all SNAT connections originating at 192.168.225.100:

    b snat 192.168.225.100 mirror enable

    To clear statistics

    You can reset statistics by node address, SNAT address, or VLAN name. Use the following syntax to clear all statistics for one or more nodes:

    b snat <node_ip> ... stats reset

    Use the following syntax to clear all statistics for one or more SNAT addresses:

    b snat <snat_ip> ... stats reset

    Use the following command to reset the statistics to zero for the default:

    b snat default stats reset

    NATs

    A network translation address (NAT) provides a routable alias IP address that a node can use as its source IP address when making or receiving connections to clients on the external network. (This distinguishes it from a SNAT, which can make outbound connections but refuses inbound connections.) You can configure a unique NAT for each node address included in a virtual server mapping.

    Note: Note that NATs do not support port translation, and are not appropriate for protocols that embed IP addresses in the packet, such as FTP, NT Domain or CORBA IIOP. You cannot define any NATs if you configure a default SNAT.

    Table 2.14 shows the attributes you can configure for a NAT.

    The attributes you can configure for a NAT

    NAT Attributes

    Description

    Original address

    The original address is the node IP address of a host that you want to be able to connect to through the NAT.

    Translated address

    The translated address is an IP address that is routable on the external network of the Link Controller. This IP address is the NAT address.

    Disabled VLAN list

    VLANs to which the NAT is not to be mapped can be explicitly disabled, as when there is more than one internal VLAN.

    Unit ID

    You can specify a unit ID for a NAT if the Link Controller is configured to run in active-active mode.

    The IP addresses that identify nodes on the Link Controller internal network need not be routable on the external network. This protects nodes from illegal connection attempts, but it also prevents nodes (and other hosts on the internal network) from receiving direct administrative connections, or from initiating connections to clients, such as mail servers or databases, on the Link Controller external interfaces.

    Using network address translation resolves this problem. Network address translations (NATs) assign to a particular node a routable IP address that the node can use as its source IP address when connecting to servers on the Link Controller external interfaces. You can use the NAT IP address to connect directly to the node through the Link Controller, rather than having the Link Controller send you to a random node according to the load balancing mode.

    Note: In addition to these options, you can set up forwarding virtual servers that allow you to selectively forward traffic to specific addresses. The Link Controller maintains statistics for forwarding virtual servers.

    Defining a network address translation (NAT)

    When you define standard network address translations (NATs), you need to create a separate NAT for each node that requires a NAT. You also need to use unique IP addresses for NAT addresses; a NAT IP address cannot match an IP address used by any virtual or physical servers in your network. You can configure a NAT with the Configuration utility or from the command line.

    To configure a NAT using the Configuration utility

    1. In the navigation pane, click NATs.
      The NATs screen opens.
    2. Click the Add button.
      The Add NAT screen opens.
    3. In the Add NAT screen, fill in the fields to configure the NAT. For additional information configuring a NAT, click the Help button.
    4. Click Done.

    To configure a NAT from the command line

    A NAT definition maps the IP address of a node <orig_addr> to a routable address on the external interface <trans_addr>. Use the following syntax to define a NAT:

    b nat <orig_addr> to <trans_addr> [vlans <vlan_list> disable | enable] [unit <unit ID>]

    The vlans <vlan_list> parameter is used to disable the specified VLANs for translation. By default, all VLANs are enabled.

    Use the unit <unit ID> parameter to specify the Link Controller to which this NAT applies in an active-active redundant system.

    The following example shows a NAT definition:

    b nat 10.10.10.10 to 10.12.10.10

    To delete NATs

    Use the following syntax to delete one or more NATs from the system:

    b nat <orig_addr> [...<orig_addr>] delete

    To display status of NATs

    Use the following command to display the status of all NATs included in the configuration:

    b nat show

    Use the following syntax to display the status of one or more selected NATs (see Figure 2.23 ).

    b nat <orig_addr> [...<orig_addr>] show

    Figure 2.23 Output when you display the status of a NAT

     NAT { 10.10.10.3 to 9.9.9.9 }    
    (pckts,bits) in = (0, 0), out = (0, 0)
    NAT { 10.10.10.4 to 12.12.12.12
    netmask 255.255.255.0 broadcast 12.12.12.255 }
    (pckts,bits) in = (0, 0), out = (0, 0)

    To reset statistics for a NAT

    Use the following command to reset the statistics for an individual NAT:

    b nat [<orig_addr>] stats reset

    Use the following command to reset the statistics for all NATs:

    b nat stats reset

    Disabling SNATs and NATs for a pool

    When configuring a pool, you can specifically disable any SNAT or NAT connections that use that pool. By default, this setting is enabled. For information on how to disable SNAT and NAT connections for a pool, see Disabling SNAT and NAT connections, on page 2-36 .

    Disabling ARP requests

    By default, the Link Controller responds to ARP requests for the NAT address and sends a gratuitous ARP request for router table update. If you want to disable the NAT address for ARP requests, you must specify arp disable.

    Additional restrictions

    The nat command has the following additional restrictions:

    • The IP address defined in the <orig_addr> parameter must be routable to a specific server behind the Link Controller.
    • You must delete a NAT before you can redefine it.
    • The interface for a NAT can only be configured when the NAT is first defined.

    IP forwarding

    IP forwarding is an alternate way of allowing nodes to initiate or receive direct connections from the Link Controller external network. IP forwarding directly exposes all of the node IP addresses to the external network, making them routable on that network. If your network uses the NT Domain or CORBA IIOP protocols, IP forwarding is an option for direct access to nodes.

    Tip: Use of SNATs and NATs, as well as forwarding pools and forwarding virtual servers, is preferable to global IP forwarding. For more information on forwarding pools and forwarding virtual servers, see Forwarding pools, on page 2-38 and Forwarding virtual servers, on page 2-47 .

    IP forwarding is a global setting that exposes the IP address of all internal nodes to the Link Controller external network, and clients can use it as a standard routable address. When you turn IP forwarding on, the Link Controller acts as a router when it receives connection requests for node addresses. You can use the IP filter feature to implement a layer of security that can help protect your nodes.

    Table 2.15 shows options associated with IP forwarding.

    The attributes you can configure for IP forwarding

    Option

    Description

    Enable IP forwarding globally

    You can enable IP forwarding globally for the Link Controller, either with the Configuration utility or by turning on the sysctl variable net.inet.ip.forwarding. To protect your nodes with this feature, we recommend that you use IP filters, which add a layer of security.

    Address routing issues

    If you enable IP forwarding, you need to route packets to the node addresses through the Link Controller.

    Configure the forwarding attribute for a pool

    Instead of enabling IP forwarding globally or creating a forwarding virtual server, you can create a pool with no members that forwards traffic instead of load balancing it. For more information, see Forwarding pools, on page 2-38 .

    Enable IP forwarding for a virtual server

    Instead of enabling IP forwarding globally, you can create a special virtual server with IP forwarding enabled. For information on creating a forwarding virtual server, see Forwarding virtual servers, on page 2-47 .

    Enabling IP forwarding globally

    You can enable IP forwarding globally on the Link Controller system. To set up IP forwarding globally, you need to complete two tasks:

    • Turn IP forwarding on
      The Link Controller uses a system control variable to control IP forwarding, and its default setting is off.
    • Verify the routing configuration
      You probably have to change the routing table for the router on the Link Controller external network. The router needs to direct packets for nodes to the Link Controller, which in turn directs the packets to the nodes themselves.

    To set global IP forwarding using the Configuration utility

    1. In the navigation pane, click System.
      The Network Map screen opens.
    2. Click the Advanced Properties tab.
      The Advanced Properties screen opens.
    3. Check the Allow IP Forwarding box.
    4. Click Apply.

    To set global IP forwarding from the command line

    Use the bigpipe global ip_forwarding command to set the variable. The default setting for the variable is disabled. You should change the setting to enabled:

    b global ip_forwarding enabled

    Addressing routing issues for IP forwarding

    Once you turn on IP forwarding, you probably need to change the routing table on the default router. Packets for the node addresses need to be routed through the Link Controller. For details about changing the routing table, refer to your router's documentation.

    Configuring the forwarding attribute for a pool

    You can configure IP forwarding so that it is done by a pool, rather than globally by the Link Controller or by an individual virtual server. For more information, see Forwarding pools, on page 2-38 .

    Enabling IP forwarding for a virtual server

    You can configure IP forwarding so that it is done by a virtual server, rather than globally by the Link Controller or by a specific pool. For more information, see Forwarding virtual servers, on page 2-47 .

    Health monitors

    Health monitors verify connections and services on nodes that are members of load balancing pools. The monitor checks the node at a set interval. If the node does not respond within a specified timeout period, the node is marked down and traffic is no longer directed to it.

    By default, an icmp (Internet Control Message Protocol) monitor is associated with every node that is a member of a load balancing pool. This monitor is of the simplest type, checking only the node address and checking only for a ping response. To change the interval and timeout values of this default check, or to check specific services on a node, you need to configure a custom monitor or monitors to add to the default monitor. The Link Controller provides a variety of service-specific monitors in template form. Some of these monitors are usable as is (assuming their default values are acceptable) and may be put in service simply by associating them with the nodes to be monitored. In most cases, however, the template is used purely as a template for configuring custom monitors. Configuring custom monitors and placing them in service is a three-step process:

    • Selecting the template
    • Configuring the monitor from the template
    • Associating the monitor with the node or nodes

    For example, for the default icmp monitor, we selected the icmp monitor template, as shown in Figure 2.24 .

    Figure 2.24 The icmp monitor template

     monitor type icmp {
    interval 5
    timeout 16
    dest *
    }

    The icmp monitor template has three attributes, interval, timeout, and dest, each with a default value. (All monitor templates have these three basic attributes. Other monitor templates have additional attributes as required by the service type.) These attributes are inherited by the custom monitor when it is configured and can be left at their default values or assigned new values as required.

    For the default monitor, template icmp is used as is, that is, as monitor icmp with its default attribute values. To change any of these default values, you need to create a custom monitor based upon icmp, for example, my_icmp. Only the values that are actually to be changed would need to be specified in the definition of the custom monitor. Therefore, if you want to change the timeout values only, you define the custom monitor as follows:

    b monitor my_icmp '{ use icmp timeout 20 }'

    This creates a new monitor in /config/bigip.conf, as shown in Figure 2.25 . You can display this monitor using the command b monitor my_icmp show.

    Figure 2.25 Custom icmp monitor

     monitor my_icmp{
    #type icmp
    "icmp"
    interval 5
    timeout 20
    }

    Once the custom monitor exists, you associate it with a node or nodes using the Configuration utility or the bigpipe node command as follows.

    b node 11.11.11.1 11.11.11.2 11.11.11.3 monitor use my_icmp

    Note: The nodes are identified by IP address only. icmp can ping addresses only, not specific ports on addresses. This creates three instances of monitor my_icmp, one for each address. You can display the instances using the command b node monitor my_icmp show.

    Figure 2.26 Output for the command b node monitor show

     +- NODE  ADDRESS 11.11.11.1   UP
    | |
    | +- icmp
    | 11.11.11.1 up enabled
    |
    +- NODE ADDRESS 11.11.11.2 UP
    | |
    | +- icmp
    | 11.11.11.2 up enabled
    |
    +- NODE ADDRESS 11.11.11.3 UP
    |
    +- icmp
    11.11.11.3 up enabled

    Note that each instance takes as its destination the same node it is associated with. This is because the dest value in my_icmp was left at the default *, which tells the instance to use the associated node as its destination. Assigning a specific address to dest, such as 11.11.11.1, would cause the monitor to verify all three addresses by checking that one address, making 11.11.11.2 and 11.11.11.3 dependent on 11.11.11.1.

    Selecting the monitor template

    Selecting a template is straightforward. Like icmp, each of the templates has a type based on the type of service it checks, for example, http, https, ftp, pop3, and takes that type as its name. (Exceptions are port-specific templates, like https_443, and the external template, which calls a user-supplied program.) To select a template, simply select the one that corresponds in name and/or type to the service you want to check. If more than one service is to be checked, for example http and https, more than one monitor can be placed on the node. (This creates a rule, namely that the node will not be considered up unless both monitors run successful checks.) You may not want to check all services available on a node specifically. If you want to verify only that the destination IP address is alive, or that the path to it through a transparent node is alive, use one of the simple templates, icmp or tcp_echo. If you want to verify TCP only, use the monitor template tcp.

    All monitor templates are contained in the read-only file /etc/base_monitors.conf. The following sections describe each of the monitor templates, its function, and the information required to configure a monitor from it. The templates are divided into three groups based on the types of monitors they support: simple monitors, ECV (Extended Content Verification) monitors, and EAV (Extended Application Verification) monitors. Also described are the port-specific monitor templates, which are derived from the other types.

    Working with templates for simple monitors

    Simple monitors are those that check node addresses only and verify simple connections only. Templates for these monitors are icmp and tcp_echo.

    Note: The templates icmp and tcp_echo are both usable as is, that is, they may be associated with nodes. It is important to understand, however, that using a template as is means that you are using the default attribute values. To change any of these values, you have to configure a custom monitor based on the template.

    Using icmp

    The icmp template uses Internet Control Message Protocol to make a simple node check. The check is successful if a response to an ICMP_ECHO datagram is received. icmp has no attributes other than the standard interval, timeout, and dest.

    Figure 2.27 The icmp monitor template

     monitor icmp {
    #type icmp
    interval 5
    timeout 16
    dest *
    }

    Using tcp_echo

    The tcp_echo template uses Transmission Control Protocol. The check is successful if a response to a TCP ECHO message is received. The tcp_echo monitor also supports transparent mode. In this mode, the node with which the monitor is associated is pinged through to the destination node. (For more information about transparent mode, refer to Using transparent and reverse modes, on page 2-93 .)

    To use tcp_echo, you must ensure that TCP ECHO is enabled on the nodes being monitored.

    Figure 2.28 The tcp_echo monitor template

     monitor tcp_echo  {    
    type tcp_echo
    interval 5
    timeout 16
    dest * //transparent
    }

    Working with templates for ECV monitors

    ECV monitors attempt to retrieve explicit content from nodes using send and recv statements. These include http, https and tcp.

    Note: The templates http, https, and tcp are all usable as is, and you may associate them with nodes. It is important to understand, however, that using a template as is means that you are using the default attribute values. To change any of these values, you have to configure a custom monitor based on the template.

    Using tcp

    The tcp template is for Transmission Control Protocol. A tcp monitor attempts to receive specific content. The check is successful when the content matches the recv expression. A tcp monitor takes a send string and a recv expression. If the send string is left blank, the service is considered up if a connection can be made. A blank recv string matches any response. Both transparent and reverse modes are options. (For more information about transparent and reverse modes, refer to Using transparent and reverse modes, on page 2-93 .)

    Figure 2.29 The tcp monitor template

     monitor tcp  {
    #type tcp
    interval 5
    timeout 16
    dest *:*
    send ""
    recv ""
    //reverse
    //transparent
    }

    Using http

    The http template is for HyperText Transfer Protocol. Like a tcp monitor, an http monitor attempts to receive specific content from a web page, and unlike a tcp monitor, sends a user name and password. The check is successful when the content matches the recv expression. An http monitor uses a send string, a recv expression, username, password, and optional get, url, transparent and reverse statements. (If there is no password security, use blank strings [""] for username and password.) The optional get statement replaces the send statement, automatically filling in the string "GET". Thus the following two statements are equivalent:

    send "GET/"
    get "/"

    The optional url statement takes the HTTP URL as a value and automatically fills in the dest value with the address the URL resolves to. (For more information about transparent and reverse modes, refer to Using transparent and reverse modes, on page 2-93 .) Both transparent and reverse modes are also options. (For more information about the get and url statements, refer to Using send, receive, url, and get statements, on page 2-92 .)

    Figure 2.30 The http monitor template

     monitor http {
    #type http
    interval 5
    timeout 16
    dest *:*
    send "GET /"
    recv ""
    username ""
    password ""
    //get
    //url
    //reverse
    //transparent
    }

    Using https

    The https template is for Hypertext Transfer Protocol Secure. An https monitor attempts to receive specific content from a web page protected by SSL security. The check is successful when the content matches the recv expression. An https monitor uses a send string, a recv expression, and a username and password (If there is no password security, use blank strings [""] for username and password.) The optional get statement replaces the send statement, automatically filling in the string "GET". Thus, the following two statements are equivalent:

    send "GET/"
    get "/"

    The optional url statement takes the HTTPS URL as a value and automatically fills in the dest value with the address the URL resolves to

    Figure 2.31 The https monitor template

     monitor https {
    #type https
    interval 5
    timeout 16
    dest *:*
    send "GET /"
    recv ""
    //get
    //url
    username ""
    password ""
    }

    Working with templates for EAV monitors

    EAV monitors verify applications on the node by running those applications remotely, using an external service checker program located in the directory /user/local/lib/pingers. These include ftp, pop3, smtp, sq., nntp, imap, ldap, and radius. Also included is the template external, which has a run attribute to specify a user-added external monitor.

    Using ftp

    The ftp template is for File Transfer Protocol. The monitor attempts to download a specified file to the /var/tmp directory. The check is successful if the file is retrieved. The ftp monitor takes a get statement, username, and password. The get statement takes the full path to the file as a value. The optional url statement may be used in place of get. The url takes the FTP URL as a value and automatically fills in the dest value with the address the URL resolves to. (For more information about the get and url statements, refer to Using send, receive, url, and get statements, on page 2-92 .)

    Figure 2.32 The ftp monitor template

     monitor ftp {
    #type ftp
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    get ""
    //url
    }

    Using pop3

    The pop3 template is for Post Office Protocol. The check is successful if the monitor is able to connect to the server, log in as the indicated user, and log out. The pop3 monitor requires username and password.

    Figure 2.33 The pop3 monitor template

     monitor pop3 {
    #type pop3
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    }

    Using smtp

    The smtp template is for Simple Mail Transport Protocol servers. An smtp monitor is an extremely simple monitor that checks only that the server is up and responding to commands. The check is successful if the mail server responds to the standard SMTP HELO and QUIT commands. An smtp monitor requires a domain name.

    Figure 2.34 The smtp monitor template

     monitor smtp {
    #type smtp
    interval 5
    timeout 16
    dest *:*
    domain ""
    }

    Using snmp_dca

    The snmp_dca template is used for load balancing traffic to servers that are running an SNMP agent, such as UC Davis or Windows 2000. In addition to defining ratio weights for CPU, memory, and disk use, you can also define weights for use by users. Figure 2.35 shows the snmp_dca monitor template.

    Figure 2.35 snmp_dca monitor template

     monitor type snmp_dca {
    #type snmp_dca
    interval 10
    timeout 30
    dest *:161
    agent_type "UCD"
    cpu_coefficient "1.5"
    cpu_threshold "80"
    mem_coefficient "1.0"
    mem_threshold "70"
    disk_coefficient "2.0"
    disk_threshold "90"
    }

    For detailed information on using the snmp_dca template, see Configuring SNMP servers, on page 2-17 .

    Using snmp_dca_base

    Like the snmp_dca template, the snmp_dca_base template is for load balancing traffic to servers that are running an SNMP agent, such as UC Davis or Windows 2000. However, this template should be used only when you want the load balancing destination to be based solely on user data, and not CPU, memory, or disk use. Figure 2.36 shows the snmp_dca_base monitor template.

    Figure 2.36 snmp_dca_base monitor template

     monitor type snmp_dca_base {
    #type snmp_dca_base
    interval 10

    timeout 30
    dest *:161
    }

    For detailed information on using the snmp_dca_base template, see Configuring SNMP servers, on page 2-17 .

    Using nntp

    The nntp template is for Usenet News. The check is successful if the monitor retrieves a newsgroup identification line from the server. An nntp monitor requires a newsgroup name (for example, "alt.cars.mercedes") and, if necessary, username and password.

    Figure 2.37 The nntp monitor template

     monitor nntp {
    #type nntp
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    newsgroup ""
    }

    Using sql

    The sql template is for service checks on SQL-based services such as Microsoft SQL Server versions 6.5 and 7.0, and also Sybase. The service checking is accomplished by performing an SQL login to the service. An executable program, tdslogin performs the actual login. The check is successful if the login succeeds.

    An sql monitor requires a database (for example, "server_db"), username, and password.

    Figure 2.38 The sql monitor template

     monitor sql {
    #type sql
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    database ""
    }

    Using imap

    The imap template is for Internet Message Access Protocol. The imap monitor is essentially a pop3 monitor with the addition of the attribute folder, which takes the optional key message_num. The check is successful if the specified message number is retrieved. An imap monitor requires username, password, and a folder. It also takes an optional message number, message_num.

    Figure 2.39 The imap monitor template

     monitor imap {
    #type imap
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    folder ""
    /message_num ""
    }

    Using radius

    The radius template is for Remote Access Dial-in User Service servers. The check is successful if the server authenticates the requesting user. A radius monitor requires a username, a password, and a shared secret string secret for the code number.

    Note: Servers to be checked by a radius monitor typically require special configuration to maintain a high level of security while also allowing for monitor authentication.

    Figure 2.40 The radius monitor template

     monitor radius {
    #type radius
    interval 5
    timeout 16
    dest *
    username ""
    password ""
    secret ""
    }

    Using ldap

    The ldap template is for Lightweight Directory Access Protocol, which implements standard X.500 for e-mail directory consolidation. A check is successful if entries are returned for the base and filter specified. An ldap monitor requires a username, a password, and a base and a filter string. The username is a distinguished name, that is, an LDAP-format user name. The base is the starting place in the LDAP hierarchy from which to begin the query. The filter is an LDAP-format key of what is to be searched for.

    Note: Servers to be checked by an imap monitor typically require special configuration to maintain a high level of security while also allowing for monitor authentication.

    Figure 2.41 A Sample monitor template

     monitor ldap {
    #type ldap
    interval 5
    timeout 16
    dest *:*
    username ""
    password ""
    base ""
    filter ""
    }

    Using external

    The external template is for a user-supplied monitor. An external monitor requires the executable name (run) of that monitor and any command line arguments (args) required.

    Figure 2.42 The external monitor template

     monitor external {
    #type external
    interval 5
    timeout 16
    dest *:*
    run ""
    args ""
    }

    Configuring a monitor

    The second step in creating a monitor and placing it in service is to configure the monitor from the monitor template. Configuring a monitor consists of giving it a name distinct from the monitor template name and assigning values to all attributes that are not to be left at their default values (and adding any optional attributes that are not present by default, like reverse or transparent). You can do this using the Configuration utility or at the command line using the bigpipe monitor command.

    To configure a monitor using the Configuration utility

    1. In the navigation pane, click Monitors.
      The Network Monitors screen opens.
    2. Click the Add button.
      The Add Monitor screen opens.
    3. In the Add Monitor screen, type in the name of your monitor (it must be different from the monitor template name), and select the monitor template you want to use.
    4. Click the Next button and you are guided through the configuration of your monitor.
    5. When you have finished configuring the monitor, click Done.

    To configure a monitor from the command line

    Use the bigpipe monitor command to configure the monitor at the command line. If you are defining the monitor with all attributes set to their default values, type:

    b monitor <name> '{ use <template_name> }'

    If you want to set one or more attributes to a new value, specify only those attributes and their values. For example, to create a tcp_echo monitor my_tcp_echo in bigpipe using the default values for the attributes interval, timeout, and dest, you would type:

    b monitor my_tcp '{ use tcp_echo }'

    If you are changing any of the default values, you need to specify only these changes. For example:

    b monitor my_tcp-echo '{ use tcp_echo interval 10 timeout 20 }'

    If you are using an optional attribute, such as transparent, add it to the list:

    b monitor my_tcp-echo '{ use tcp_echo interval 10 timeout 20\ transparent dest 198.192.112.13:22}'

    Note: If you are configuring an snmp_dca or snmp_dca_base monitor, see also Configuring SNMP servers, on page 2-17 .

    Monitor attributes

    Table 2.16 provides a summary of the monitor attributes and their definitions. For more information on the monitor templates and attributes, refer to Selecting the monitor template, on page 2-81 .

    Monitor attributes

    Attribute

    Definition

    interval <seconds>

    Ping frequency time interval in seconds.

    timeout <seconds>

    Ping timeout in seconds.

    dest <node_addr>

    Ping destination node. <node_address> Usually *:* for simple monitors, *:* for all others, causing the monitor instance to ping the address or address:port for which it is instantiated. Specifying address and/or port forces the destination to that address/port.

    send <string>

    Send string for ECV. Default send and recv values are empty (""), matching any string.

    recv <string>

    Receive expression for ECV. Default send and recv values are empty (""), matching any string.

    get <string>

    For the http and https monitors get replaces the recv statement, automatically filling in "GET". For the ftp monitor get can be used to specify a full path to a file. This automatically fills in dest.

    url

    For the http and https, and ftp monitors, url replaces the recv statement, supplies a URL and automatically fills in dest with the URL address.

    reverse

    A mode that sets the node down if the received content matches the recv string.

    transparent

    A mode that forces pinging through the node to the dest address for transparent nodes, such as firewalls.

    run <program>

    An external user-added EAV program.

    args <program_args>

    List of command line arguments for external program. The args are quoted strings set apart by spaces.

    username <username>

    User name for services with password security. For ldap this is a distinguished, that is, LDAP-format user name.

    password <password>

    Password for services with password security.

    newsgroup <newsgroup>

    Newsgroup, for type nntp EAV checking only

    database <database>

    Database name, for type sql EAV checking only.

    domain <domain_name>

    Domain name, for type smtp EAV checking only

    secret

    Shared secret for radius EAV checking only.

    folder

    Folder name for imap EAV checking only.

    message_num

    Optional message number for imap EAV.

    base

    Starting place in the LDAP hierarchy from which to begin the query, for ldap EAV checking only.

    filter

    LDAP- format key of what is to be searched for, for ldap EAV checking only.

    Entering string values

    You should enter all attribute values, except for interval, timeout, and dest, as quoted strings, even if they are numeric, as in the case of code numbers.

    Setting destinations

    By default, all dest values are set to the wildcard "*" or "*:*". This causes the monitor instance created for a node to take that node's address or address and port as its destination. An explicit dest value is used only to force the instance destination to a specific address and/or port which may not be that of the node. For more information about setting destinations, refer to Associating the monitor with a node or nodes, on page 2-96 .

    Using send, receive, url, and get statements

    The ECV monitor templates http, https, and tcp have the attributes send and recv for the send string and receive expression, respectively.

    The most common send string is "GET /" which simply retrieves a default HTML page for a web site. To retrieve a specific page from a web site, simply enter a fully qualified path name:

    "GET /www/support/customer_info_form.html"

    The receive expression is the text string the monitor looks for in the returned resource. The most common receive expressions contain a text string that would be included in a particular HTML page on your site. The text string can be regular text, HTML tags, or image names.

    The sample receive expression below searches for a standard HTML tag.

    "<HEAD>"

    You can also use the default null recv value "". In this case, any content retrieved is considered a match. If both send and recv are left empty, only a simple connection check is performed.

    For http and ftp, the special attributes get or url may be used in place of send and recv statements. The attribute get takes the full path to the file as a value and automatically fills in the dest value with the address the path resolves to. The following two statements are equivalent:

    send "GET/"
    get "/"

    The attribute url takes the URL as a value and automatically fills in the dest value with the address the URL resolves to. The URL is then resolved to supply the dest address automatically. The third statement below is equivalent to the first two combined:

    dest 198.192.112.13:22
    get "/"

    url "ftp://www.my_domain.com/"

    Using transparent and reverse modes

    The ECV monitors have optional keywords transparent and reverse. (The keyword transparent may also be used by tcp_echo.) The normal and default mode for a monitor is to ping the dest node by an unspecified route and to mark the node up if the test is successful. There are two other modes, transparent and reverse.

    In transparent mode, the monitor is forced to ping through the node it is associated with, usually a firewall, to the dest node. (In other words, if there are two firewalls in a load balancing pool, the destination node will always be pinged through the one specified and not through the one picked by the load balancing method.) In this way, the transparent node is tested as well: if there is no response, the transparent node is marked down. For more information about transparent mode, refer to Using transparent mode, on page 2-99 .

    In reverse mode, the monitor marks the node down when the test is successful. For example, if the content on your web site home page is dynamic and changes frequently, you may want to set up a reverse ECV service check that looks for the string "Error". A match for this string would mean that the web server was down. Transparent mode can also be used with tcp_echo.

    Transparent and reverse modes cannot be used on the same monitor.

    Testing SQL service checks

    SQL service checks may require manual testing before being implemented in a monitor, as follows:

    cd /usr/local/lib/pingers

    ./tdslogin 192.168.1.1 1433 mydata user1 mypass1

    Replace the IP address, port, database, user, and password in this example with your own information.

    You should receive the message:

    Login succeeded!

    If you receive the connection refused message, verify that the IP and port are correct.

    If you are still having trouble, you should verify that you can log in using another tool. For example, if you have Microsoft NT SQL Server version 6.5, there is a client program ISQL/w included with the SQL software. This client program performs simple logins to SQL servers. Use this program to test whether you can login using the ISQL/w program before attempting logins from the Link Controller.

    On the SQL Server, you can run the SQL Enterprise Manager to add logins. When first entering the SQL Enterprise Manager, you may be prompted for the SQL server to manage.

    You can register servers by entering the machine name, user name, and password. If these names are correct, the server will be registered and you will be able to click an icon for the server. When you expand the subtree for the server, there will be an icon for Logins.

    Underneath this subtree, you can find the SQL logins. Here, you can change passwords or add new logins by right-clicking the Logins icon. Click this icon to open an option to Add login. After you open this option, type the user name and password for the new login, as well as which databases the login is allowed to access. You must grant the test account access to the database you specify in the EAV configuration.

    Running user-added EAVs

    You may add your own monitors to those contained in /user/local/lib/pingers. For running these added programs, the monitor template external is used. The executable program is specified as the value of the attribute run. By default, the monitor looks for the run program in /user/local/lib/pingers. If the program resides elsewhere, a fully qualified path name must be entered. Any command line arguments to be used with the program are entered as args values. For example, suppose the program my_pinger is to be run with a -q option, so that it would be entered on the command line as follows:

    my_pinger -q

    This monitor might be specified as follows:

    b monitor custom '{ use external run "my_pinger" args "-q" }'

    Alternatively, you may pass arguments to the external monitor as environment variables. For example, you might want to enter this command:

    /var/my_pinger /www/test_files/first_test

    This could be specified in the conventional manner:

    b monitor custom '{ use external run "/var/my_pinger" args "www/test_files/first_test" }'

    It could also be specified in this way:

    b monitor custom '{ use external run "/var/my_pinger" DIRECTORY "www/test_files" FILE "first_test" }'

    This defines the monitor as shown in Figure 2.43 .

    Figure 2.43 Monitor template for an external monitor

     monitor custom { 
    use external
    run "/var/my_pinger"
    DIRECTORY "www/test_files"
    FILE "first_test" }

    This frees the monitor definition from the rigidity of a strictly ordered command line entry. The arguments are now order-independent and may be used or ignored by the external executable.

    Showing, disabling, and deleting monitors

    You can show, disable, and delete monitors using the Configuration utility or from the command line. Deleting a monitor removes it from the /config/bigip.conf file. Disabling a monitor instance simply removes that instance from service until it is re-enabled. Disabling a monitor (which can be performed only at the command line) disables all instances of the monitor. All monitor instances are enabled by default.

    To show or delete a monitor using the Configuration utility

    1. In the navigation pane, click Monitors.
      A screen opens that lists monitors in two columns, System Supplied and User Defined.
    2. To show a monitor, simply click the monitor name.
    3. To delete a monitor, click the Delete button for the monitor. Note that only user-defined monitors can be deleted.

    To show a monitor from the command line

    You can display a selected monitor or all monitors using the bigpipe monitor show command:

    b monitor <name> show

    b monitor show all

    To delete a monitor from the command line

    You can delete a selected monitor using the bigpipe monitor delete command:

    b monitor <name> delete

    To disable a monitor instance using the Configuration utility

    1. In the navigation pane, click Monitors.
      The Monitors screen opens.
    2. Click the appropriate tab for the monitor instances: Basic Associations, Node Associations, or Node Address Associations. The resulting screen shows the existing associations (monitor instances).
    3. Click the node you want to disable.
      The Properties screen for that node opens.
    4. In the Monitor Instances portion of the screen, clear the Enable check box.
    5. Click Apply.
      The monitor instance is now disabled.

    To disable a monitor or monitor instance from the command line

    To disable a monitor, use the bigpipe monitor <name> disable command:

    b monitor <name> disable

    This has the effect of disabling all instances of the monitor, as shown in Figure 2.44 .

    Figure 2.44 All monitor instances disabled

     +- NODE  11.12.11.20:80   UP
    | |
    | +- http
    | 11.12.11.20:80 up disabled
    |
    +- NODE 11.12.11.21:80 UP
    | |
    | +- http
    | 11.12.11.21:80 up disabled
    |
    +- NODE 11.12.11.22:80 UP
    |
    +- http
    11.12.11.22:80 ip disabled

    To disable a monitor instance, use the bigpipe monitor instance <addr:port> disable command:

    b monitor instance <addr:port> disable

    Disabled monitors and instances may be re-enabled as follows:

    b monitor <name> enable

    b monitor instance <addr:port> enable

    To delete a monitor with no node associations from the command line

    You can delete a monitor if it has no existing node associations and no references in a monitor rule. To delete a monitor, use the bigpipe monitor <name> delete command:

    b monitor my_http delete

    If the monitor has instances, the instances must first be deleted using the bigpipe node <addr:port> monitor delete command. (Refer to Showing and deleting associations, on page 2-101 .)

    Associating the monitor with a node or nodes

    Now that your monitor exists, the final step is to associate it with the nodes to be monitored. This creates an instance of the monitor for each node. At the command line, association is done using bigpipe node command:

    b node <addr_list> monitor use <name>

    For example, to associate monitor http with nodes 11.12.11.20:80, 11.12.11.21:80, and 11.12.11.22:80, use the following bigpipe node command:

    b node 11.12.11.20:80 11.12.11.21:80 11.12.11.22:80 monitor use\ http

    This creates a monitor instance of http for each of these nodes. You can verify this association using the bigpipe monitor show command:

    b node monitor show

    This would produce the output shown in Figure 2.45 .

    Figure 2.45 The output of the b node monitor show command

     +- NODE  11.12.11.20:80   UP
    | |
    | +- http
    | 11.12.11.20:80 up enabled
    |
    +- NODE 11.12.11.21:80 UP
    | |
    | +- http
    | 11.12.11.21:80 up enabled
    |
    +- NODE 11.12.11.22:80 UP
    |
    +- http
    11.12.11.22:80 ip enabled

    The actual monitor instance for each node is represented by the output lines highlighted with bold text in Figure 2.45 .

    Reviewing types of association

    While the term node association is applied generally, there are three types of association based on whether the monitor is associated with an address and a port, address(es) only, or port only. These are node association, address association, and port association.

    • Node association, strictly defined, is the association of a monitor with an address and port.
    • Address association is the association of a monitor with an address only.
    • Port association is the association of a monitor with a port only. For a port association, a wildcard character (*) is used to represent all addresses.

      Once a monitor has been associated with a node, address, or port, no other monitor can be associated with the same node, address or port. However, an address association does not prevent a monitor from being associated with a node of the same address, or the reverse.

    Using a simple association

    The http example given above is the simplest kind of association, a node association performed using a monitor with a dest value of *:*. It can be seen in Figure 2.30, on page 2-83 , that in each case the instance destination node is identical to the node the monitor has been associated with. This is because the template http, shown in Figure 2.30 , was used as is, with a dest value of *:*. Either or both wildcard symbols can be replaced by an explicit dest value by creating a new monitor based on http. This is referred to as node and port aliasing, described in the following section.

    Using node and port aliasing

    Usually the health of a node is checked by pinging that node. For this reason the dest attribute in the monitor template is always set to "*" or "*:*". This causes the monitor instance created for a node to take that node's address or address and port as its destination. An explicit dest value forces the instance destination to a specific address and/or port which may not be that of the node. This causes the monitor to ping that forced destination by an unspecified path. Suppose, for example, that the association performed using http instead used a monitor my_http with a dest value of *:443. The node association command would be identical except that http is now replaced with my_http:

    b node 11.12.11.20:80 11.12.11.21:80 11.12.11.22:80 monitor use my_http

    This creates three instances of the monitor with the following dest values as shown in Figure 2.46 .

    Figure 2.46 Node ports aliased

     +- NODE  11.12.11.20:80   UP
    | |
    | +- my_http
    | 11.12.11.20:443 up enabled
    |
    +- NODE 11.12.11.21:80 UP
    | |
    | +- my_http
    | 11.12.11.21:443 up enabled
    |
    +- NODE 11.12.11.22:80 UP
    |
    +- my_http
    11.12.11.22:443 up enabled

    This is referred to as port aliasing. The node itself can also be aliased, by assigning an explicit address to dest. For example, dest could set to 11.11.11.1:80. This is called node aliasing and for the nodes 11.12.11.20:80, 11.12.11.21:80, and 11.12.11.21:80 it would produce the following instances, (which are in fact one instance associated with three different nodes) as shown in Figure 2.47 .

    Figure 2.47 Node addresses aliased

     +- NODE  11.12.11.20:80   ADDR UP
    | |
    | +- my_http
    | 11.11.11.1:80 checking enabled
    |
    +- NODE 11.12.11.21:80 ADDR UP
    | |
    | +- my_http
    | 11.11.11.1:80 checking enabled
    |
    +- NODE 11.12.11.22:80 ADDR UP
    |
    +- my_http
    11.11.11.1:80 checking enabled

    Using transparent mode

    Sometimes it is necessary to ping the aliased destination through a transparent node. Common examples are checking a router, or checking a mail or FTP server through a firewall. For example, you might want to check the router address 10.10.10.53:80 through a transparent firewall 10.10.10.101:80. To do this, you would specify 10.10.10.53:80 as the monitor dest address (a node alias) and add the flag transparent:

    b monitor http_trans '{ use http dest 10.10.10.53:80 transparent }'

    Then you would associate the monitor http_trans with the transparent node:

    b node 10.10.10.101:80 monitor use http_trans

    This causes the address 10.10.10 53:80 to be checked through 10.10.10.101:80. (In other words, the check of 10.10.10.53:80 is routed through 10.10.10.101:80.) If the correct response is not received from 10.10.10.53:80, then 10.10.10.101:80 is marked down.

    Note: Transparent mode applies only to the ECV monitors and to tcp_echo.

    Using logical grouping

    In the preceding examples, only one monitor has been associated with the nodes. You may associate more than one monitor with a node or nodes by joining them with the Boolean operator and. This creates a rule, and the node is marked as down if the rule evaluates to false, that is, if not all the checks are successful. The most common example is the use of an HTTP monitor and an HTTPS monitor:

    b node 11.12.11.20:80 monitor use my_http and my_https

    The monitors themselves must be configured with the grouping in mind. For example, if the dest values of both monitors were set to *:*, then both monitor instances would try to ping the default port 80. This would both defeat the purpose of the HTTPS monitor and cause an automatic failure, since two monitors would be trying to ping the same address and port simultaneously.

    Instead, monitor my_http should be given a dest value of *:* and monitor my_https should be given a dest value of *:443. This causes only the my_http monitor instances to default to 80. The my_https monitor instances are forced to the explicit port 443, avoiding a conflict as shown in Figure 2.48 .

    Figure 2.48 Use of a monitor rule

     MONITOR  my_http and https_443
    |
    +- NODE 11.12.11.20:80 UP
    | |
    | +- my_http
    | | 11.12.11.20:80 up enabled
    | |
    | +- https_443
    11.12.11.20:443 up enabled

    Using wildcards to specify addresses

    The wildcard * can be used to specify addresses. A wildcard address association creates instances of the monitor for all nodes load balanced by the Link Controller:

    b node * monitor use my_tcp_echo:

    A wildcard with a port association creates instances of the monitor for every node configured to service that port:

    b node *:80 monitor use my_http:

    To associate a monitor using the Configuration utility

    1. In the navigation pane, click Monitors.
      The Network Monitors screen opens.
    2. Click one of three tabs:
    • If you are associating the monitor with a node (the IP address plus the port), click the Node Associations tab.
    • If you are associating the monitor with a node address only (the IP address minus the port), click the Node Address Associations tab.
    • If you are associating the monitor with a port only (the port minus the IP address), click the Port Associations tab.
    1. Regardless of the selection you made in step 2, a dialog box opens with the boxes Choose Monitor and Monitor Rule. Type the monitor name or select one from the list.
    2. If you want to associate more than one monitor, click the Move button (>>) to add the monitor name to the Monitor Rule box.
    3. Repeat the previous two steps for each monitor you want to associate with a node.
    4. Click Apply to associate the monitor(s).
      For additional information associating a monitor, click the Help button.

    Showing and deleting associations

    There are node commands for showing, and deleting node associations.

    To show or delete associations using the Configuration utility

    1. In the navigation pane, click Monitors.
      The Network Monitors screen opens.
    2. Click one of three tabs:
    • If you are showing or deleting a node association (a node is the IP address plus the port) click the Node Associations tab.
    • If you are showing or deleting a node address association (the IP address minus the port), click the Node Address Associations tab.
    • If you are showing or deleting a port association (the port minus the IP address), click the Port Associations tab.
    1. Regardless of the selection you made in step 2, a dialog box opens showing existing associations, and with a Delete Existing Associations check box.
    2. Delete associations by checking the box, then clicking Apply.

      Note: For wildcard address associations, the wildcard (*) association itself is shown in addition to each of the individual associations it produces. To delete all these associations, it is necessary to delete the wildcard association.

    To show associations from the command line

    You can display a selected node association or all node associations using the bigpipe node monitor show command:

    b node monitor show

    b node <addr:port> monitor show

    To delete associations from the command line

    You can delete a selected node association or all node associations using the bigpipe node monitor delete command:

    b node <addr:port> monitor delete

    In deleting specific monitor instances, it is important to consider how the association was made. If a monitor instance was created using a wildcard address, the wildcard must be deleted. For example, if multiple associations were created by entering b node *:80 monitor use my_tcp_echo, you would delete it by typing:

    b node *:80 monitor delete

    If multiple associations were created by entering b node * monitor use my_tcp_echo, you delete it by typing:

    b node * monitor delete