Appliance Administration Manual v7.6
Appliance Administration Manual v7.6
v7.6
rev. 1.2.1
This document covers all required administration information for Loadbalancer.org appliances
8
About this Manual
This document covers all required administration information for v7.6.x Loadbalancer.org appliances.
Version 7.6.4
The latest version of the appliance (v7.6.4) includes the following new features, updates and bug fixes:
Layer 4
• When draining then halting a real server the weight no longer incorrectly gets set to 1
Layer 7
• Setting the weight of a real server to zero no longer puts it into an inescapable drain state
• Caught error reported when adding a port 443 Layer7 service with a currently active SSL offloading
service
• HAProxy Virtual Service is marked as down if failing health-check and feedback agent enabled
System Overview
• Real servers with the same IP under different virtual services can now be drained automatically
• Taking multiple real servers offline rapidly no longer causes incorrect states
9
• Agent drain state reported incorrectly
STunnel
Other
• It's now possible to search for Virtual/Real services from the edit page
• SSH No longer allows server CBC mode and weak MAC algorithm ciphers
Routing
• It's now possible to use IPV6 link local addresses for default gateway
• It's now possible to select default gateway interface for IPV4 and IPV6
Appliance Security
The appliance includes a security lockdown command (lbsecure) that enables passwords to set, network
access to be locked down and SSH key regeneration in one simple step. This command can be run on a
single appliance or an HA pair. For more details please refer to page 60.
Appliance Configuration
Initial network configuration can be carried out on the console by using the Network Setup Wizard, using
standard Linux network setup commands, or by connecting to the default IP address:port in a browser
(192.168.2.21:9080) and making changes using the WUI.
Once the network is configured, the appliance can be configured manually or by using the Setup Wizard. The
WUI is accessible using HTTP on port 9080 and HTTPS on port 9443. It's also possible to configure the load
balancer at the console using the text based Links browser, although using the WUI is the recommended
method.
For a clustered pair the slave device must be defined on the master. All configuration must be carried out on
the master unit, the slave is then automatically kept in-sync as changes are made on the master.
10
Deployment Guides
Deployment guides have also been written that focus on load balancing specific applications. An up to date
listing is available on the solutions page of our website: http://www.loadbalancer.org/solutions.php.
At the time of writing, the following deployment & quick-reference guides are available:
Additional Information
This manual should provide you with enough information to be very productive with your Loadbalancer.org
appliance. However, if there are aspects of the appliance that have not been covered, or if you have any
questions, please contact our support team : [email protected].
11
Chapter 2 – Load Balancing Concepts
12
Load Balancing – the Basics
Loadbalancer.org appliances enable two or more servers to be combined into a cluster. This enables inbound
requests to be distributed across multiple servers which provides improved performance, reliability and
resilience. Appliances can also be deployed as a clustered pair (our recommended solution) which creates a
highly-available configuration.
Supported Protocols
Loadbalancer.org appliances support virtually any TCP or UDP based protocol including HTTP, HTTPS, FTP,
SMTP, RDP, SIP, IMAP, POP, DNS etc. etc.
Destination Hashing
This algorithm assign jobs to servers through looking up a statically assigned hash table by their destination
IP addresses.
13
this and would continue to send requests to the overloaded server based on the algorithm selected. With the
agent installed on the Real Server, feedback is provided to the load balancer and the algorithm is then
adjusted to reduce requests that are sent to that server. For more details on using the agent please refer to
page 133.
Layer 4 vs Layer 7
A fundamental choice when setting up the load balancer is whether to configure the services at layer 4 or
layer 7.
The Basics
At layer 4 the primary protocols used are TCP and UDP. These protocols are not aware of upper level
protocols such as FTP, HTTP, HTTPS, DNS, RDP etc. Therefore the load balancer can only make load
balancing decisions based on details available at layers 4 and below such as port numbers and IP addresses.
At layer 7, the load balancer has more information to make load balancing related decisions since more
information about upper levels protocols is available.
Layer 7 load balancing uses a proxy at the application layer (HAProxy). HTTP requests are terminated on the
load balancer, and the proxy generates a new request which is passed to the chosen Real Server.
Performance
Due to the increased amount of information at layer 7, performance is not as fast as at layer 4. If raw
throughput is a primary concern, then layer 4 is probably the better choice.
Persistence
Persistence (aka affinity or sticky connections) is the ability to ensure that a specific client connects back to
the same server within a specific time limit. It is normally required when the session state is stored locally on
the web server rather than in a separate database. At Layer 4, Source IP persistence is the only option. At
layer 7, additional methods are available such as HTTP cookie persistence where the load balancer sets a
cookie to identify the session and Microsoft Connection Broker where the load balancer is able to utilize the
redirection token for reconnecting users to existing sessions.
Transparency
Transparency refers to the ability to see the originating IP address of the client. Connections at Layer 4 are
always transparent where as at layer 7 the IP address of the load balancer is recorded as the source address
unless additional configuration steps are taken (such as using TProxy or utilizing the X-Forwarded-For
headers, please see pages 129 and 104 respectively).
Our Recommendation
Where possible we recommend that Layer 4 Direct Routing (DR) mode is used. This offers the best possible
performance since replies go direct from the Real Servers to the client, not via the load balancer. It's also
relatively simple to implement.
Ultimately, the final choice depends on your specific requirements and infrastructure.
14
Loadbalancer.org Terminology
Acronym Terminology
VIP Virtual IP address – the address of the load balanced cluster of RIPs,
the address presented to connecting clients
Layer 4 Part of the seven layer OSI model, descriptive term for a network
device that can route packets based on TCP/IP header information
Layer 7 Part of the seven layer OSI model, descriptive term for a network
device that can read and write the entire TCP/IP header and payload
information at the application layer
SSL Termination The SSL certificate is installed on the load balancer in order to decrypt
(Pound & STunnel) HTTPS traffic on behalf of the cluster
MASQUERADE Descriptive term for standard firewall technique where internal servers
are represented as an external public IP address. Sometimes referred
to as a combination of SNAT & DNAT rules
One-Arm The load balancer has one physical network card connected to one
subnet
Two-Arm The load balancer has two network interfaces connected to two subnets
– this may be achieved by using two physical network cards or by
assigning two addresses to one physical network card
15
Chapter 3 – Load Balancing Methods
16
Supported Methods
The Loadbalancer.org appliance is one of the most flexible load balancers on the market. The design allows
different load balancing modules to utilize the core high availability framework of the appliance.
Multiple load balancing methods can be used at the same time or in combination with each other.
Layer 7 SSL Termination Usually required in order to process cookie persistence One or Two-Arm
(Pound & STunnel) in HTTPS streams on the load balancer
Processor intensive
Layer 7 SNAT Layer 7 allows great flexibility including full SNAT and One or Two-Arm
(Source Network WAN load balancing, cookie insertion and URL
Address Translation: switching
HAProxy) Not as fast as Layer 4
Key:
Recommended if HTTP cookie persistence is required, also used for several Microsoft
applications such as Exchange, Sharepoint & Remote Desktop Services and for overall
deployment simplicity since real servers can be on any accessible subnet and no
Real-Server changes are required
Only required for Direct Routing implementation across routed networks (rarely used)
One-Arm The load balancer has one physical network card connected to one subnet
The load balancer has two network interfaces connected to two subnets – this can
Two-Arm be achieved by using two physical network cards or by assigning two addresses to
one physical network card
17
Direct Routing (DR)
One-arm direct routing (DR) mode is a very high performance solution that requires little change to your
existing infrastructure. N.B. Kemp, Brocade & A10 Networks call this Direct Server Return and F5 call it N-
Path.
Direct Routing works by changing the destination MAC address of the incoming packet on the fly
which is very fast
However, this means that when the packet reaches the Real Server it expects it to own the VIP. This
means you need to make sure the Real Server responds to both its own IP and the VIP, but does not
respond to ARP requests for the VIP. Please refer to page 70 for more details on solving the ARP
problem
On average, DR mode is 8 times quicker than NAT for HTTP, 50 times quicker for Terminal Services
and much, much faster for streaming media or FTP
Load balanced services can be configured directly on the interface (normally eth0) with no additional
IP address. However, when using a clustered pair, all load balanced Virtual Services must be
configured on a floating IP to enable failover & failback between master & slave
The Virtual Service and Real Servers must be in the same switch fabric / logical network. They can
be on different subnets, provided there are no router hops between them. If multiple subnets are
used, an IP address in each subnet must be defined on the load balancer
Port translation is not possible in DR mode i.e. having a different RIP port than the VIP port
DR mode is transparent, i.e. the Real Server will see the source IP address of the client
Administration of the load balancer is via any active IP address (on port 9080)
18
Network Address Translation (NAT)
Sometimes it's not possible to use DR mode. The two most common reasons being: if the application cannot
bind to the RIP & VIP at the same time; or if the host operating system cannot be modified to handle the ARP
problem. The second choice is Network Address Translation (NAT) mode. This is also a high performance
solution but it requires the implementation of a two arm infrastructure with an internal and external subnet to
carry out the translation (the same way a firewall works).
In two-arm NAT mode the load balancer translates all requests from the external Virtual Service to
the internal Real Servers
Normally eth0 is used for the internal network and eth1 is used for the external network although this
is not mandatory. If the Real Servers require Internet access, Autonat should be enabled using the
WUI option: Cluster Configuration > Layer 4 – Advanced Configuration, the external interface should
be selected
When the wizard is used, Real Servers are automatically given access to the Internet through the
load balancer (via Auto-NAT)
The Real Servers must have their default gateway configured to point at the load balancer. When
master & slave units are used, a floating IP must be used to enable failover. N.B. It is possible to
have the Real Servers located on routed subnets, but this would require a customized routing
configuration on the Real Servers and is not recommended
Load balanced services can be configured directly on the interface (normally eth0) with no additional
IP address. However, when using a clustered pair all load balanced Virtual Services must be
configured on a floating IP to enable failover & failback between master & slave
Normally the Virtual Service and Real Servers should be located on different subnets within the same
logical network (i.e. no router hops) and the load balancer should have an IP address in each subnet.
N.B. It is possible to have Real and Virtual Services in the same subnet – please refer to the page 91
If you want Real Servers to be accessible on their own IP address for non-load balanced services,
e.g. SMTP or RDP, you will need to setup individual SNAT and DNAT firewall script rules for each
Real Server. Please refer to page 90 for more details
NAT mode is transparent, i.e. the Real Server will see the source IP address of the client
Administration of the load balancer is via any active IP address (on port 9080)
Port translation is possible in NAT mode, i.e. VIP:80 → RIP8080 is allowed
19
NAT Mode Packet re-Writing
In NAT mode, the inbound destination IP address is changed by the load balancer from the Virtual Service IP
address (VIP) to the Real Server. For outbound replies the load balancer changes the source IP address of
the Real Server to be the Virtual Services IP address.
In this simple example all traffic destined for IP address 10.0.0.20 on port 80 is load-balanced to the real IP
address 192.168.1.50 on port 80.
1) The incoming packet for the web server has source and destination addresses as:
4) The packet is written back to the VIP address and returned to the client as:
20
Source Network Address Translation (SNAT)
If your application requires that the load balancer handles cookie insertion then you need to use SNAT mode.
This mode is also used with numerous Microsoft applications such as Exchange, Sharepoint, Lync etc.
This mode has can be deployed in one-arm or two-arm configuration and does not require any changes to
the application servers. However, since the load balancer is acting as a full proxy it doesn't have the same
raw throughput as the layer 4 methods.
The network diagram for the Layer 7 HAProxy SNAT mode is very similar to the Direct Routing example
except that no re-configuration of the Real Servers is required. The load balancer proxies the application
traffic to the servers so that the source of all traffic becomes the load balancer.
As with other modes a single unit does not require a Floating IP, although it is recommended to make
adding a slave unit easier
SNAT is a full proxy and therefore load balanced Real Servers do not need to be changed in any way
Because SNAT is a full proxy any server in the cluster can be on any accessible subnet including
across the Internet or WAN
SNAT is not transparent by default, i.e. the Real Servers will not see the source IP address of the
client, they will see the load balancers IP address. If required, this can be solved by either enabling
TProxy on the load balancer, or for HTTP, using X-forwarded-For headers. Please refer to pages
129 and 104 respectively for more details.
NOTE : For detailed configuration examples using various modes, please refer to chapter 10
starting on page 176.
21
Other Considerations
NOTE : Load balancers work most effectively if the application servers are completely
stateless. This means that if a web server fails and is automatically taken out of the cluster;
then all the current user sessions will be transferred to other servers in the cluster without the
users needing to re login to the application again. If your application doesn't have a
persistent data store then you can't have seamless fail over for your back-end servers.
If so, these files either need to be on shared storage such as an NFS/CIFS mount, or they need to be
replicated to all of the nodes in the cluster.
This problem is easily resolvable by implementing a shared persistent data store for the cluster. This is
usually either done with a shared back-end database or a shared memory solution.
22
What do You do if Your Application is not Stateless?
Some applications require state to be maintained such as:
You may also find that you are unable to modify your HTTP/HTTPS based application to handle shared
session data.
For these cases, you can use persistence based on source IP address. You lose the ability to have
transparent fail-over, but you do still get increased capacity and manageability. This persistence problem
occurs with all load balancers and all vendors use standard methods and technologies to mitigate the issue.
Source IP (subnet)
Cookie (Active or Passive)
SSL session ID
Microsoft Connection Broker / Session Broker Integration
The standard Layer 4 persistence method is source IP persistence, you can handle millions of persistent
connections at Layer 4. Just modify your Virtual Service to be persistent if you require source IP persistence.
Cookies are a Layer 7 based persistence method that can offer more even traffic distribution and also handle
any clients where the source IP address may change during the session (e.g. mega proxies).
SSL session ID based persistence is useful in certain circumstances, although due to the way some browsers
operate – notably older versions of Internet Explorer, the session ID can be renegotiated frequently (every few
seconds) which effectively breaks the persistence.
23
Which Load Balancing Method should I Use?
Layer 4 DR Mode offers the best performance and requires limited Real Server changes. The server
application must be able to bind to the both the RIP & VIP at the same time.
Layer 4 NAT Mode is also a high performance solution but not as fast as DR mode. It requires the
implementation of a two-arm infrastructure with an internal and external subnet to carry out the translation
(the same way a firewall works). Also each Real Server must use the load balancer as the default gateway.
Layer 7 SNAT Mode offers greater flexibility but at lower performance levels. It supports HTTP cookie
insertion, RDP cookies, Connection Broker integration and works very well with either Pound or STunnel
when SSL termination is required. It does not require any changes to the application servers and can be
deployed in one-arm or two-arm mode and. HAProxy is a high performance solution, but since it operates as
a full proxy, it cannot perform as fast as the layer 4 solutions.
Our Recommendation
Where possible we recommend that Layer 4 Direct Routing (DR) mode is used. This offers the best possible
performance since replies go directly from the Real Servers to the client, not via the load balancer. It's also
relatively simple to implement.
Ultimately, the final choice does depend on your specific requirements and infrastructure.
IMPORTANT NOTE : If you are using Microsoft Windows Real Servers (i.e. back-end servers)
make sure that Windows NLB (Network Load Balancing) is completely disabled to ensure that this
does not interfere with the operation of the load balancer.
24
Chapter 4 – Appliance Fundamentals
25
The Hardware Appliance – Unpacking and Connecting
Connect the power lead from the power socket to the mains or UPS
Connect a network cable from the switch to one of the Ethernet ports – typically eth0 but this is not
mandatory
If using a two-armed configuration connect another cable to a second Ethernet port – typically eth1
but this is not mandatory (N.B. the Enterprise and Enterprise R16 have 2 ports, the MAX and 10G
have 4 ports)
For a clustered hardware pair, the units must be able to communicate either via network (ucast), via
serial cable or both. By default, ucast only is used. If serial is preferred or you want to use both
methods, connect a serial cable (1 supplied with each appliance) between the two appliances.
N.B. If a serial cable is used, Heartbeat must be configured for this using the WUI option: Cluster
Configuration > Heartbeat Configuration and enabling 'Serial'
Attach a monitor to the VGA port and keyboard to the USB or PS/2 port
Check mains power is on and press the power switch to start the appliance (the fans should start &
front panel LED’s should light)
Serial connection
for the fail-over
(heartbeat) cable
eth1 is usually the
eth0 is usually the
external network
internal network
N.B. The above image shows the Enterprise MAX, for connecting other models please refer to the Appendix.
26
The Virtual Appliance – Hypervisor Deployment
Supported Hypervisors
Currently, the Virtual Appliance is available for the following hypervisors:
• Microsoft Hyper-V
• KVM
Host Requirements
To run the Loadbalancer.org Enterprise VA (irrespective of which Hypervisor is being used) the following basic
server specifications must be met:
• 64bit CPU
• Virtual Technology hardware support – either Intel-VT or AMD-V compliant CPU's
For an Intel based server, VT must be enabled in the BIOS as shown in the example below:
If your server is unable to support 64bit guests, an error message will be displayed when attempting to start
the VA.
N.B. To access the downloads you'll need to enter your name, email address and phone number (optional),
specify the application that you'll be load balancing and select the Hypervisor type (VMware, Hyper-V or
KVM). Once the required details are entered, click Send, we'll then send you an email that includes the
various download links. All information provided is 100% confidential. We may follow up with an email or
phone call to see how you are getting on with the trial and offer assistance but under no circumstances will
Loadbalancer.org send you other promotional material or share your information with a third party.
27
VMware Deployment
The exact steps depend on which VMware environment is in use. The following list provides a basic
guideline:
Hyper-V Deployment
Windows 2008 R2
1. Start Hyper-V Manager, then using the right-click menu or the Actions pane select Import Virtual
Machine and then click Next
2. Browse to the location of the extracted download and select the folder LBVMHYPER-Vv7
3. Select the option "Copy the virtual machine (create a new unique ID)" and also select the "Duplicate
all files so the same virtual machine can be imported again" check-box, click Import
4. The import will start, once complete the new appliance will appear in the Virtual Machine list
5. The appliance has 4 NIC cards, to connect these right-click the appliance and select Settings then for
each Network Adapter select the required network
6. Right-click and select Start to power up the appliance, allow a minute to boot
7. If you're deploying a clustered pair, you'll first need to do one of the following steps before importing
the second virtual machine. If this is not done, the second virtual machine cannot be deployed
because the disk from the first import already exists, and there will therefore be a conflict:
i) Shutdown the first VM and modify the name of the disk
or
ii) Change the default file location using the Hyper-V Settings option in the Actions pane
Once one of the above is done, repeat steps 1-6 to create the second virtual machine.
Windows 2012
1. Start Hyper-V Manager, then using the right-click menu or the Actions pane select Import Virtual
Machine then click Next
2. Browse to the location of the extracted download and select the folder LBVMHYPER-Vv7
3. Click Next until prompted for the Import Type, make sure that 'Copy the virtual machine (create a
new unique ID)' is selected and click Next
4. Tick the check-box 'Store the Virtual Machine in different location', then define a suitable location for
the virtual machines files and click Next
5. Define a location for the virtual hard disk files
6. Click Next, then click Finish to complete the import process. Once complete, the load balancer will
appear in the Virtual Machines list
7. The appliance has 4 NIC cards, to connect these right-click the appliance and select Settings then for
each Network Adapter select the required network
8. Highlight the new load balancer and start it either by using the right-click menu or the Actions pane
If you're deploying a clustered pair, repeat steps 2-8 for the slave unit, making sure that a different folder
location is selected in steps 4 & 5.
28
KVM Deployment
The following steps should be followed on the KVM host:
N.B. Network cards are set to NAT by default so adjust as needed before powering on
N.B. Please refer to the XML file for additional configuration notes
NOTE : For the VA, four NICs are included but only eth0 is connected by default at power on.
If the other NICs are required, these should be connected using the network configuration
screen within the Hypervisor.
29
Once logged in, enter the IP address / mask, default gateway & DNS servers at the prompts as shown below:
After the required settings have been entered, a summary will be presented along with details of how to
access the WUI as shown below:
As mentioned in the text the IP address is now configured for interface eth0.
IP addresses for the other interfaces can now be configured using the WUI option: Local Configuration >
Network Interface Configuration (to access the WUI please refer to pages 32 and 35) or by using Linux
commands as explained in the following section.
Username: root
Password: loadbalancer
e.g.
30
route add default gw <IP address> <interface>
e.g.
N.B. Setting the IP address in this way is temporary, the IP address MUST be set via the WUI to make
this permanent otherwise settings will be lost after a reboot
Local Methods
Console Access
To access the console, simply connect a monitor and keyboard to the load balancer, power up and you'll be
presented with a login prompt. The console can also be accessed via the serial port if the default heartbeat
configuration is used - i.e. heartbeat is configured to communicate over the network only.
links 127.0.0.1:9080/lbadmin
Log in to Links:
Username: loadbalancer
Password: loadbalancer
Use the Up, Down & Enter keys to move between and select the various menu options.
N.B. The preferred configuration method is the WUI which can be accessed via a browser as detailed
on page 32.
Keyboard Layout
To change the keyboard locale edit the file: /etc/sysconfig/keyboard, e.g. to change from a UK to a US layout:
1. edit /etc/sysconfig/keyboard using a browser such as 'vi' or 'vim' for Linux or WinSCP under Windows
2. replace KEYTABLE="uk" with KEYTABLE="us"
3. re-boot the appliance
31
Remote Methods
When configuring the appliance remotely, take care when changing network and firewall settings. If you do
lock yourself out, you'll either need local console access or you can use remote management tools such as
IPMI or iDRAC. All Supermicro based appliances include IPMI support, iDRAC is included on the Enterprise
MAX & 10G and is optional on the Enterprise. For details on configuring both IPMI & iDRAC please refer to
the Appendix.
Using a web browser, access the WUI using the following URL:
http://192.168.2.21:9080/lbadmin/
(replace 192.168.2.21 with your IP address if it's been changed)
N.B. If you prefer you can use the HTTPS administration address:
https://192.168.2.21:9443/lbadmin/
(replace 192.168.2.21 with your IP address if it's been changed)
Once logged in, you'll be asked if you want to run the web based setup wizard. If you click [Accept]
the Layer 7 Virtual Service configuration wizard will start. If you prefer to configure the appliance
manually, simple click [Dismiss]. The wizard can also be used to configure an HA pair as explained
in the section below.
32
NOTE : A number of interoperability issues have been found with various versions of IE. The
WUI has been tested and verified using both Firefox & Chrome.
• Now start the WUI and run the setup wizard by clicking the [Accept] link or by using: Cluster
Configuration > Setup Wizard and clicking General Layer 7 Virtual Service
• Define the required Virtual Service settings as shown in the example below:
33
• Now continue and add the associated Real Servers as shown below:
• Use the Add Real Server button to define additional Real Servers, once all are defined click Attach
Real Servers
• Finally reload HAProxy using the Reload HAProxy button in the blue box at the top of the screen or
by using the WUI option: Maintenance > Restart Services and clicking Reload HAProxy
• Set the IP address on both appliances using one of the methods described on page 29
• Now on the device to be the master unit run the HA setup wizard using the WUI option: Cluster
Configuration > Setup Wizard and clicking Configure high-availability pair of load balancers
• Set High-Availability Configuration to Clustered Pair and define the Slave IP Address as shown in
the example below:
34
• Click Configure Cluster
• Both units must be able to communicate with each other to enable the clustered pair to operate. This
is via ucast over the network - the default for both hardware and virtual appliances. For hardware
appliances this can also be via serial cable. If serial comms is required:
◦ Once the 'Slave node configured' confirmation message is displayed, on the master unit go to:
Cluster Configuration > Heartbeat Configuration and enable the Serial option, then click Modify
Heartbeat Configuration
◦ On the master unit restart heartbeat using the Restart Heartbeat button in the blue box at the
top of the screen or by using the WUI option: Maintenance > Restart Services
• Now on the master unit run through the steps defined in the previous section to create the Layer 7
Virtual Service
NOTE : Running the wizard again will permit additional Layer 7 VIPs and associated RIPs to
be defined.
NOTE : To restore manufacturer's settings use the WUI option: Maintenance > Backup &
Restore > Restore Manufacturer's Defaults. N.B. this will reset the IP address to
192.168.2.21/24
NOTE : For a clustered pair, all configuration must be carried out on the master unit, the slave
unit will then be synchronized automatically via the network.
If you have already used the web based wizard, then you will already be using the WUI. From here all
administration tasks can be carried out. If not, access the WUI as follows:
N.B. If you prefer you can use the HTTPS administration address: https://192.168.2.21:9443/lbadmin/
35
Main Menu Options:
System Overview – Displays a graphical summary of all VIPs, RIPs and key appliance statistics
Local Configuration – Configure local host settings such as IP address, DNS, system time etc.
Cluster Configuration – Configure load balanced services such as VIPs & RIPs
Maintenance – Perform maintenance tasks such as service restarts and taking backups
View Configuration – Display the saved appliance configuration settings
Reports – View various appliance reports & graphs
Logs – View various appliance logs
Support – Create a support download, contact the support team & access useful links
36
Full Root Access
One of the great advantages of the Loadbalancer.org appliance is that you have full root access. This unlocks
the benefits of the underlying Linux OS. Other vendors tend to lock this down and only provide limited access
to certain tools.
NOTE : If you do require a custom configuration please contact our support team to discuss
your requirements: [email protected]
37
Chapter 5 – Appliance Management
38
Network Configuration
Physical Interfaces
The number of physical network interfaces depends on the model. The Enterprise and Enterprise R16 have 2
physical interfaces, the MAX and 10G have 4 physical interfaces and the various VA's have 4 interfaces. If
multiple logical interfaces are required, these can be added simply by specifying multiple IP addresses as
shown below. If multiple cables must be connected, an external switch can be used.
Typically, the main reason for using all 4 interfaces is when bonding (e.g. 802.3ad) is required in a two-arm
NAT mode (layer 4) or two-arm SNAT mode (layer 7) highly available configuration.
Configuring IP Addresses
IP addresses can be configured using the WUI option: Local Configuration > Network Interface Configuration.
Normally eth0 is used as the internal interface and eth1 is used as the external interface. However, unlike
other appliances on the market you can use any interface for any purpose. In a standard one-arm
configuration you would just need to configure eth0, the subnet mask and the default gateway. Both IPv4 and
IPv6 addresses can be configured. CIDR notation is used as shown below (e.g.192.168.2.100/24 which is
equivalent to 192.168.2.100/255.255.255.0), please see the appendix for more details.
To set IP address(es):
Assign the required IP address/mask, multiple addresses can be assigned to each adapter as shown
below:
39
Click Configure Interfaces
NOTE : If you already have Virtual Services defined when making changes to the network
configuration, you should verify that your Virtual Services are still up and working correctly
after making the changes.
NOTE : For the VA, four NICs are included but only eth0 is connected by default at power on.
If the other NICs are required, these should be connected using the network configuration
screen within the Hypervisor.
Configuring Bonding
In the WUI, open Local Configuration > Network Interface Configuration
If you want to bond eth0 and eth1, check the box named Bond eth0 & eth1 as bond0
NOTE : At this point the interfaces will still have the same IP settings configured previously.
Once an IP address is defined for the bond and Configure Interfaces in clicked these
addresses will be removed and only the bond address will apply. If bonding is later disabled
these addresses will be re-applied to the interfaces.
40
NOTE : If you have a master and slave configured as an HA pair, make sure you configure
bonding in the same way on both units. Failure to do this will result in heartbeat related issues.
Loadbalancer.org appliances support this using the standard Linux bonding driver. Once you have setup the
appliance using a single network card and are happy with the configuration you can set up bonding using
Local Configuration > Network Interface Configuration.
If required you can change the bonding mode in the file: /etc/modprobe.d/loadbalancer.conf. By default mode
1 is used which configures the bond for high availability. Simply edit the file and set the mode setting as
needed.
Supported Modes:
mode=1
Change to mode 0
Change to mode 4
This option requires the ports on the switch to be configured as a TRUNK with 802.3ad support.
NOTE : If your Real Servers, ESX hosts etc. support network bonding using Broadcom's SLB
(Smart Load Balancing), this can cause issues in Layer 4 DR mode if older drivers are used.
We have successfully tested SLB (Auto Fallback Disable) with driver version 15.2.0.5.
Therefore at least this version is recommended.
41
Configuring VLANs
Native 802.1Q VLAN support can be enabled to load balance clusters on multiple VLANs.
In access mode, switch ports are dedicated to one VLAN. The switch handles all the tagging and detagging
of frames – the station connected to the port does not need to be configured for the VLAN at all. In trunk
mode, the switch passes on the raw VLAN frames, and the station must be configured to handle them. Trunk
mode is usually used to connect two VLAN-carrying switches, or to connect a server or router to a switch.
If the load balancer is connected to an access mode switch port no VLAN configuration is required. If the load
balancer is connected to a trunk port, then all the required VLANs will need to be configured on the load
balancer.
To configure a VLAN:
An extra IP Address Assignment field named eth0.250 will be created as shown below, the required IP
address should be entered in this field
NOTE : If you have a clustered pair, don't forget to configure the same VLANs on the slave as
these will not be replicated / created automatically.
42
Configuring MTU Settings
In the Default Gateway section define the IP addresses as shown in the example below:
43
To configure Static Routes:
In the Static Routes section configure the subnets & gateways as shown in the example below:
N.B. Unlimited static routes can be defined, additional blank rows will be added to the WUI screen as
they're used
Select the required Role – for a single unit leave this set to master, for an HA pair set the master
appliance to master and the slave unit to slave
44
N.B. If Hostname is left at its default value of lbmaster, when Role is changed to slave, Hostname will be
automatically set to lbslave, if a custom hostname has been specified this will remain unchanged
irrespective of which role is selected
Click Update
To configure NTP:
In the WUI, open Local Configuration > System Date & Time
45
Manual Configuration
Set the data & time using the Date & time fields
NOTE : When using a clustered pair (i.e. master & slave) date and time changes on the
master will not be automatically replicated to the slave, therefore the slave must also be set
manually.
Click Update
46
Enter an appropriate IP address or hostname in the Smart Host field
Click Update
Define whether logs should be local, written to a remote Syslog server or both
Click Update
SNMP Configuration
The appliance supports SNMP. Typical SNMP settings can be configured using the WUI.
To Configure SNMP:
Click Update
47
NOTE : Please refer to page 209 for details on the various OIDs and associated MIBs for the
appliance.
To run a command:
The results of the command as well as any errors will be displayed at the top of the screen.
48
Restoring Manufacturer's Settings
The load balancers settings can be reset to factory default values in two ways. In both cases this will remove
all custom configuration from the load balancer. All VIPs and RIPs will be removed and the IP address
configured for eth0 will be set to 192.168.2.21.
To restore settings:
In the WUI, open Maintenance > Backup & Restore > Restore Tab
lbrestore
Restarting Services
The various services running on the appliance can be manually reloaded or restarted if required. This is
normally only required for HAProxy, Pound, STunnel and Heartbeat when configuration changes are made.
49
Restart Ldirectord
Restart Layer 4 Services. Restarting Ldirectord will result in a loss of layer 4 services during the restart. This
causes the related process to be stopped and a new instance started. Generally only needed if Ldirectord has
failed for some reason and needs to be started again from scratch.
Reload Ldirectord
Reload Layer 4 Services. The Ldirectord configuration is re-read and re-applied. Note that a reload occurs
automatically whenever a layer 4 VIP or RIP and added, deleted or modified.
Restart HAProxy
Restart Layer 7 Services. Restarting HAProxy will result in a loss of layer 7 services during the restart
Restarting HAProxy will cause any persistence tables to be dropped and all connections to be closed, it's a
complete restart and reload of the HAProxy configuration.
Reload HAProxy
Reload Layer 7 Services. HAProxy will start a new process (leaving the old one) with the new configuration.
New connections will be passed onto this process, the old process will maintain existing connections and
eventually terminate when there are no more connections accessing it. If you are using stick tables for
persistence the entries will be copied between processes. N.B. If you have long lasting tcp connections it can
take quite some time for the old process to terminate, leaving those users running the old configuration. If this
is taking too long – See Restart HAProxy.
Restart Pound
Restart Pound SSL Termination Service. Restarting Pound will result in a loss of SSL termination services
during the restart.
Restart STunnel
Restart STunnel SSL Termination Service. Restarting STunnel will result in a loss of SSL termination services
during the restart.
Restart Heartbeat
Restart Heartbeat Services. Restarting Heartbeat will result in a loss of service during the restart. Restarting
heartbeat will cause a temporary loss of all layer 4, layer 7 and SSL services.
Reload Heartbeat
From v7.6 this option forces heartbeat to stop (for the active member of an HA pair the floating IP's will also
be taken down, for a single unit they will be left up) then after an appropriate delay heartbeat is reloaded. This
option is useful with a clustered pair when a device needs to be re-introduced without disrupting running
services (see page 159).
Restart Firewall
Restarts iptables. This will clear then re-read and re-apply the firewall rules.
50
Restart Syslogd
Restart the syslog service.
Restart Collectd
Restart the graphs data collector service.
Restart SNMPD
Restart the SNMP service.
NOTE : Since services may be restarted during the update process we recommend
performing the update during a maintenance window.
For some updates (e.g. v7.5.4 to 7.6) a full appliance restart is required. In these cases a
restart notification message will be displayed after the update is complete.
51
Checking the Current Software Version & Revision
The software version number is displayed in the top right corner of the WUI. To determine the current revision
run the following command at the console, via an SSH session or via the WUI using the following command:
cat /etc/loadbalancer.org/version.txt
Online Update
to perform an online update:
If the latest version is already running, the following message will be displayed:
Enter a valid Authorization Key – this can be found in your Technical Support Document under Online
Update Code
52
Click Online Update
The online update process will start, and will display update messages similar to the following:
Once complete (the update can take several minutes depending on download speed and upgrade
version) the following message is displayed:
If there are any specific post upgrade requirements such as a service restart these will be listed on the
screen.
Notes:
• As indicated in the WUI, we recommend that you should backup your XML configuration and firewall
script using the links provided before running the update
• Make sure that the load balancer is able to access the Internet – if you have a proxy server, this can
be defined using Local Configuration > Physical Advanced Configuration
• Make sure that the default gateway is set correctly (Local Configuration > Routing)
• Make sure that a valid DNS server is specified (Local Configuration > Hostname & DNS)
53
Offline Update
If the load balancer does not have access to the Internet, Offline Update can be used.
As explained in the on-screen text, contact the Loadbalancer.org support to obtain the archive &
checksum files
NOTE : Since services may be restarted during the update process we recommend
performing the update during a maintenance window.
1. First perform the update on the slave unit using the online or offline update methods described
previously. Take care to follow any on-screen instructions that are displayed (e.g. service restarts)
2. Now update the master unit in the same way.
54
IMPORTANT NOTE : For a clustered pair, we strongly recommend fully testing & validating
the master / slave failover process before going live. If testing was not carried out before go-
live, we recommend scheduling a maintenance window to do this. For detailed steps, please
refer to page 163.
Firewall Configuration
NOTE : Whilst the load balancer is capable of supporting complex firewall rules, we do not
recommend using the load balancer as your main bastion host. We recommend that the load
balancer is deployed behind your external firewall.
1. All Virtual Service connections are dealt with on the INPUT chain not the FORWARD chain
2. The WUI runs on HTTP port 9080 and HTTPS port 9443
4. SNAT & DNAT is handled automatically for all layer 4 NAT mode (LVS) and layer 7 (HAProxy) based
Virtual/Real load balanced services
5. You can use the standard Linux filters against spoofing attacks and syn floods
7. Plenty of extra information is available on the Internet relating to Linux Netfilter and LVS, if you need
any assistance please email our support team : [email protected]
55
Manual Firewall Configuration
The firewall can be configured manually using the WUI based script editor. This enables iptables rules and
any other required commands to be easily defined. The form allows you to directly edit /etc/rc.d/rc.firewall.
Custom rules can be configured, or for belt & braces security your external firewall settings can be replicated
on to the load balancer for multi-layer security.
If you're planning to use NAT mode you may want to use the load balancer as your main firewall but we
recommend it is better and simpler to keep your firewall separate from the load balancer, especially if you
want to set up VPNs etc.
You can also use the firewall script to group ports together using Firewall Marks (see page 92).
Define additional rules anywhere in the script above the last two lines:
echo "Firewall Activated"
exit 0;
Click Update
WARNING : Be careful! - make a backup before changing this script so that you know you can
roll everything back if you cause a problem. A backup can be created using the WUI option:
Maintenance > Backup & Restore > Make Local Firewall Script Backup
56
Firewall Lock-down Wizard
The firewall lock down wizard can be used to automatically configure the load balancer to allow access to the
various admin ports from one specific IP address or subnet. The wizard automatically detects the IP of the
client running the WUI and inserts this into the Admin IP field. The default mask is set to 255.255.255.0 which
can be changed as required.
When run, the script rc.lockdownwizard loads the settings from the definitions file rc.lockdownwizard.conf and
uses them to generate the rules. The web interface writes the definitions rc.lockdownwizard.conf. You can
modify rc.lockdownwizard via ssh or from the web interface using [Modify the firewall lock down wizard
script]. Apart from this link there is no other influence from the WUI.
The default script does not depend on the configured Virtual Services or Real Servers, so the wizard does not
need to be re-run when services are changed.
However, it does depend on the IP addresses of master and slave, and the admin related ports used by the
web interface, heartbeat, and HAProxy. If those settings are changed, the firewall lockdown wizard will need
to be re-run in order to reflect the changes. The re-run of the firewall lockdown wizard will adapt the
rc.lockdownwizard.conf definitions file automatically - all your changes in the script rc.lockdownwizard won't
be touched when you re-run the firewall lockdown wizard.
N.B. For a clustered pair, the lockdown wizard must be run on each appliance
57
Disabling the lock-down script
To disable the lock-down script un-check the Enable lock down script check-box and click the Update
Firewall lock down button.
N.B. If you accidentally block your own access to the appliance you will need to clear the current firewall
rules and try again. to clear the firewall tables completely use the following command at the console:
/etc/rc.d/rc.flush-iptables
Set the required value using the Connection Tracking table size field
Click Update
Username Default Default Permissions (see also the group table below)
Password Group
appliance administration account
loadbalancer loadbalancer config *
* It's not possible to change the default group for user 'loadbalancer'
N.B. These are Apache .htaccess style accounts and are not related to the local Linux OS level accounts.
58
The permissions for each group are shown below:
Menu / Permissions
System Local Cluster View
Group Maintenance Reports Logs Support
Overview configuration Configuration Configuration
In the following section, click the [Modify] link next to the relevant user
59
Adding New Users
Enter the required Username & Password and click Add New User
By default, new users will be added to the report group (least privilege). To change this, click [Modify]
next to the user, select the required group and click Edit User
It's possible to reset passwords via the command line if required. To do this you'll need to login as root to the
console / SSH session. The htpasswd command can then be used as shown below:
It also regenerates the SSH keys that are used to secure communicating between the master and slave
appliance. To start the script, at the console or via an SSH terminal session run the following command:
lbsecure
The image below illustrates how the script works for a single appliance:
60
Once the script has finished, the “Security enhancement complete” message is displayed as shown above.
NOTE : If lbsecure is run on the master of a correctly configured HA pair, the passwords,
firewall rules and SSH keys will also be updated on the slave appliance.
61
Chapter 6 – Configuring Load Balanced Services
62
Layer 4 Services
The Basics
Layer 4 services are based on LVS (Linux Virtual Server). LVS implements transport layer load balancing
inside the Linux kernel. It is used to direct requests for TCP/UDP based services to the Real Servers, and
makes services on the Real Servers appear as a Virtual Service on a single IP address.
Layer 4 services are transparent by default, i.e. the source IP address is maintained through the load
balancer.
Layer 4 persistence is based on source IP address & destination port. The time out value is in seconds and
each time the client makes a connection the timer is reset, so even a 5 minute persistence setting could last
for hours if the client is active and regularly refreshes their connection.
When a VIP is added the load balancer automatically adds a corresponding floating IP address which is
activated instantly. Check View Configuration > Network Configuration to ensure that the Floating IP address
has been activated correctly. They will show up as secondary addresses / aliases.
Multiple ports can be defined per VIP, for example 80 & 443. In this case it may also be useful to enable
persistence (aka affinity / stickiness) to ensure that clients hit the same back-end server for both HTTP &
HTTPS traffic and also prevent the client having to renegotiate the SSL connection.
NOTE : It's not possible to configure a VIP on the same IP address as any of the network
interfaces. this ensures services can move between master and slave appliances.
Enter the required ports(s) in the Virtual Service Ports field, separate multiple ports with commas, specify
a range with a hyphen and specify all ports using an asterisk (*)
63
NOTE : The following ports are used by the appliance and therefore cannot be used for Virtual
Services: 22 (SSH), 9080 (WUI – HTTP), 9443 (WUI – HTTPS), 7777 (HAProxy statistics
page), 7778 (HAProxy persistence table replication and 9081 (nginx fallback page).
Click Update
64
is also kind to clients when using SSL, and
unfortunately sometimes required with HTTP if your
web application cannot keep state between Real
Servers.
N.B. If your Real Servers cannot keep session state
persistence themselves, then you will obtain
performance benefits from a load balancer, but may
not obtain reliability benefits.
65
External Script command The custom check script, used with the external
check type. The script should be placed in
/var/lib/loadbalancer.org/check, and given world read
and execute permissions.
Negotiate Check Related The options available depend on which protocol is
Options selected for the health-check.
Protocol Specify the protocol to use for negotiate health
checks. For common protocols, this will match the
Virtual Service port. Simple TCP may be used to send
an arbitrary string to the server, and match against its
response.
Virtual Host If the Negotiate check should be performed on a
specific Virtual Host, specify the hostname here.
Database Name The database to use for the MySQL Negotiate check.
This is a required option if MySQL is selected under
Negotiate Check Service above. There is no default.
Radius Secret Configure the RADIUS secret string for the RADIUS
negotiate check.
Login The login name to use with the Negotiate check
where authentication is required.
Password The password to use with the Negotiate check where
authentication is required.
Request to send With negotiate checks, the request to send to the
server. The use of this parameter varies with the
protocol selected in Service to Check.
66
response of 92 would imply that the Real Servers
CPU is 92% idle. The load balancer will then use the
formula ((92 / 10) * requested_weight) to find the new
weight. Using this method an idle Real Server will get
10 times as many new connections as an overloaded
server.
Fallback Server The server to route to if all of the Real Servers in the
group fail the health check. The local nginx fallback
server is configured for the ports 80 and 9081
(configured to always show the index.html page).
When using HAProxy Layer 7 the nginx server port 80
is automatically disabled. You can also configure the
fallback server to be a 'Hot Spare' if required.
For example you have one server in the cluster and
one fallback they will act as a master / slave pair.
IP Address Set the fallback server IP Address.
Port Set the fallback server port, for DR mode leave this
blank as it must be the same as the VIP.
MASQ Fallback Masquerade fallback. When enables, this enables the
fallback server to be set as a Layer 7 Virtual Service.
This is especially useful in WAN/DR site
environments.
Email Alert Destination Destination email address for server health-check
Address notifications.
Click Add a new Real Server next to the relevant Virtual Service
67
Enter an appropriate Label (name) for the new Real Server
Enter the required port in the Real Server Port field. This only applies to NAT mode, in DR mode port
redirection is not possible so by default the port is the same as defined in the VIP
Specify the required Weight, the is an integer specifying the capacity of a server relative to the others in
the pool, the valid values of weight are 0 through to 65535, the default is 100. The higher the value, the
more connections the server will receive
Specify the Minimum Connections, this is an integer specifying the lower connection threshold of a server.
The valid values are 0 through to 65535. The default is 0, which means the lower connection threshold is
not set
If Minimum Connections is set with other values, the server will receive new connections when the
number of its connections drops below its lower connection threshold. If Minimum Connections is not set
but Maximum Connections is set, the server will receive new connections when the number of its
connections drops below three fourths of its upper connection threshold
Specify the Maximum Connections, this is an integer specifying the upper connection threshold of a
server. The valid values of Maximum Connections are 0 through to 65535. The default is 0, which means
the upper connection threshold is not set
68
Persistence Considerations
Persistence State Table Replication
If you want the current persistent connection table to work when the master load balancer swaps over to the
slave then you can start the synchronization daemons on each load balancer to replicate the data in real time.
First login to the master appliance using SSH or the console, then as root run the following commands:
Then login to the slave appliance using SSH or the console, then as root run the following commands:
N.B. To ensure that these sync daemons are started on each reboot put these commands in the rc.firewall.
This can be done via the WUI using Maintenance > Firewall Script. Make sure that the full path is specified in
the firewall script, i.e.
After a few seconds you can confirm that it is working by seeing the output from:
ipvsadm -Lc
N.B. This is the same command that the 'Layer 4 Current Connections' report is based on.
When run on the active device the output will show all connections including those in state 'NONE' i.e. the
persistence entries. When run on the passive device, the output will only include connections in state 'NONE'
since only these are being replicated.
NOTE : Setting this option can generate a high level of connection state synchronization data
between the master and slave load balancers.
69
DR Mode Considerations
The ARP Problem
DR mode works by changing the MAC address of the inbound packets to match the Real Server selected by
the load balancing algorithm. To enable DR mode to operate:
• Each Real Server must be configured to accept packets destined for both the VIP address and the
Real Servers IP address (RIP). This is because in DR mode the destination address of load balanced
packets is the VIP address, whilst for other traffic such as health-checks, administration traffic etc. it's
the Real Server's own IP address (the RIP). The service/process (e.g. IIS) must also respond to both
addresses.
• Each Real Server must be configured so that it does not respond to ARP requests for the VIP
address – only the load balancer should do this.
Configuring the Real Servers in this way is referred to as 'Solving the ARP problem'. The steps required
depend on the OS used as detailed in the following sections.
e.g.
This means redirect any incoming packets destined for 10.0.0.21 (the Virtual Service) locally, i.e. to the
primary address of the incoming interface on the Real Server.
70
NOTE : Method 1 may not always be appropriate if you're using IP-based virtual hosting on
your web server. This is because the iptables rule above redirects incoming packets to the
primary address of the incoming interface on the web server rather than any of the virtual
hosts that are configured. Where this is an issue, use method 2 below instead.
Also, Method 1 does not work with IPv6 Virtual Services, use method 2 below instead.
Step 1: re-configure ARP on the Real Servers (this step can be skipped for IPv6 Virtual Services)
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.eth0.arp_ignore=1
net.ipv4.conf.eth1.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.eth0.arp_announce=2
net.ipv4.conf.eth1.arp_announce=2
Step 2: re-configure DAD on the Real Servers (this step can be skipped for IPv4 Virtual Services)
net.ipv6.conf.lo.dad_transmits=0
net.ipv6.conf.lo.accept_dad=0
/sbin/sysctl -p
71
N.B. Steps 1, 2 & 3 can be replaced by writing directly to the required files using the following commands:
(temporary until the next reboot)
With Solaris the loopback interface does not respond to ARP requests so you just add your VIPs to it.
You will need to add this to the startup scripts for your server.
You will need to add this to the startup scripts for your server.
NOTE : Don't forget that the service on the Real Servers needs to listen on both the RIP
address and VIP address as mentioned previously.
NOTE : Failure to correctly configure the Real Servers to handle the ARP problem is the most
common mistake in DR mode configurations.
72
Solving the ARP Problem for Windows Servers
4. Once the device list appears, select Add a new device at the top of the list, click Next
5. Select No, I want to select the hardware from a list, click Next
6. Scroll down the list and select Network Adapters, click Next
7. Select Microsoft & Microsoft Loopback Adapter, click Next as shown below
73
Step 2: Configure the Loopback Adapter
1. Open the Control Panel and double-click Network and Dial-up Connections
4. Select Internet Protocol (TCP/IP), click Properties and configure the IP address and mask to be
the same as the Virtual Service IP address (VIP), e.g. 192.168.2.20/24 as shown below
74
5. Click Advanced and change the Interface metric to 254 as shown below, this prevents the adapter
responding to ARP requests for the VIP address
6. Click OK on Advanced Settings, TCP/IP Properties and Connection Properties to save and apply the
new settings
7. Repeat the above steps for all other Windows 2000 Real Servers
75
Windows Server 2003
Windows server 2003 supports the direct routing (DR) method through the use of the MS Loopback Adapter
to handle the traffic. The IP address on the Loopback Adapter must be set to be the same as the Virtual
Services IP address (VIP). If the Real Server is included in multiple VIPs, you can add additional IP
addresses to the Loopback Adapter that correspond to each VIP.
4. Scroll to the bottom of the list, select Add a new hardware device, click Next
5. Select Install the hardware that I manually select from a list (Advanced), click Next
7. Select Microsoft & Microsoft Loopback Adapter, click Next as shown below
76
Step 2: Configure the Loopback Adapter
4. Select Internet Protocol (TCP/IP), click Properties and configure the IP address and mask to be
the same as the Virtual Service (VIP), e.g. 192.168.2.20/24 as shown below
77
5. Click Advanced, un-check Automatic metric and change Interface metric to 254 as shown below,
this prevents the adapter responding to ARP requests for the VIP address
6. Click OK on Advanced Settings & TCP/IP Properties, then click Close on Connection Properties to
save and apply the new settings
7. Now repeat the above process for all other Windows 2003 Real Servers
NOTE : For Windows server 2003 SP1 & later, if you have enabled the built-in firewall, you will
need to create an exception to enable access to the web server. This exception by default will
allow traffic on both the network and Loopback Adapters.
78
Windows server 2008
The basic concept is the same as for Windows 2000 / 2003. However, additional steps are required to set the
strong / weak host behavior. This is used to either block or allow interfaces receiving packets destined for a
different interface on the same server. As with Windows 2000 / 2003, if the Real Server is included in multiple
VIPs, you can add additional IP addresses to the Loopback Adapter that correspond to each VIP.
1. Click Start, then run hdwwiz to start the Hardware Installation Wizard
3. Select Install the hardware that I manually select from a list (Advanced), click Next
1. Open Control Panel and click View Network status and tasks under Network and internet
2. Click Change adapter settings
3. Right-click the new Loopback Adapter and select Properties
79
4. Un-check all items except Internet Protocol Version 4 (TCP/IPv4) as shown below
5. Select Internet Protocol Version (TCP/IPv4), click Properties and configure the IP address to be
the same as the Virtual Service (VIP) with a subnet mask of 255.255.255.255, e.g. 192.168.2.20 /
255.255.255.255 as shown below
6. Click OK on TCP/IP Properties, then click Close on Connection Properties to save and apply the new
settings
7. Now repeat the above process on the other Windows 2008 Real Servers
N.B. For Windows 2008, it's not necessary to modify the interface metric on the advanced tab and
should be left set to Automatic
80
Step 3: Configure the strong / weak host behavior
Windows Server 2000 and Windows Server 2003 use the weak host model for sending and receiving for all
IPv4 interfaces and the strong host model for sending and receiving for all IPv6 interfaces. You cannot
configure this behavior. The Next Generation TCP/IP stack in Windows 2008 and later supports strong host
sends and receives for both IPv4 and IPv6 by default. To ensure that Windows 2008 is running in the correct
mode to be able to respond to the VIP, the following commands must be run on each Real Server:
For these commands to work, the LAN connection NIC must be named “net” and the loopback NIC must be
named “loopback” as shown below. If you prefer to leave your current NIC names, then the commands above
must be modified accordingly. For example, if your network adapters are named “LAN” and “LOOPBACK”,
the commands required would be:
N.B. The names for the NICs are case sensitive, so make sure that the name used for the interface and the
name used in the commands match exactly.
1. Start Powershell or use a command Window to run the 3 netsh commands as shown below
2. Now repeat these 3 commands on the other Windows 2008 Real Servers
81
Windows Server 2012
The basic concept is the same as for Windows 2000 / 2003. However, additional steps are required to set the
strong / weak host behavior. This is used to either block or allow interfaces receiving packets destined for a
different interface on the same server. As with Windows 2000 / 2003 / 2008, if the Real Server is included in
multiple VIPs, you can add additional IP addresses to the Loopback Adapter that correspond to each VIP.
1. Click Start, then run hdwwiz to start the Hardware Installation Wizard
3. Select Install the hardware that I manually select from a list (Advanced), click Next
82
4. Un-check all items except Internet Protocol Version 4 (TCP/IPv4) as shown below
5. Select Internet Protocol Version (TCP/IPv4), click Properties and configure the IP address to be
the same as the Virtual Service (VIP) with a subnet mask of 255.255.255.255, e.g. 192.168.2.20 /
255.255.255.255 as shown below
6. Click OK on TCP/IP Properties, then click Close on Ethernet Properties to save and apply the new
settings
7. Now repeat the above process on the other Windows 2012 Real Servers
N.B. For Windows 2012, it's not necessary to modify the interface metric on the advanced tab and
should be left set to Automatic
83
Step 3: Configure the strong / weak host behavior
Windows Server 2000 and Windows Server 2003 use the weak host model for sending and receiving for all
IPv4 interfaces and the strong host model for sending and receiving for all IPv6 interfaces. You cannot
configure this behavior. The Next Generation TCP/IP stack in Windows 2008 and later supports strong host
sends and receives for both IPv4 and IPv6 by default. To ensure that Windows 2012 is running in the correct
mode to be able to respond to the VIP, the following commands must be run on each Real Server:
For these commands to work, the LAN connection NIC must be named “net” and the loopback NIC must be
named “loopback” as shown below. If you prefer to leave your current NIC names, then the commands above
must be modified accordingly. For example, if your network adapters are named “LAN” and “LOOPBACK”,
the commands required would be:
N.B. The names for the NICs are case sensitive, so make sure that the name used for the interface and the
name used in the commands match exactly.
1. Start Powershell or use a command Window to run the 3 netsh commands as shown below
2. Now repeat these 3 commands on the other Windows 2012 Real Servers
84
Verifying netsh Settings for Windows 2008 & 2012
To verify that settings have been configured correctly, run the following command on each Real Server to
clearly list the settings that have been applied to the interface:
i.e.
for the 'loopback' adapter run: netsh interface ipv4 show interface loopback
for the 'net' adapter run: netsh interface ipv4 show interface net
e.g.
NOTE : For Windows server 2008 / 2012, if you want to leave the built-in firewall enabled,
you'll either need to enable the relevant default firewall exceptions or create your own to
enable access to the web server. By default these exceptions will allow traffic on both the
network and loopback adapters.
NOTE : Failure to correctly configure the Real Servers to handle the ARP problem is the most
common problem in DR configurations.
85
Configuring IIS to Respond to both the RIP and VIP
For DR & TUN modes, it's also important to make sure that your application (IIS in this case) responds to
both the VIP and RIP.
By default, IIS listens on all configured IP addresses, this is shown in the example below (shows Windows
2003 example). As can be seen the IP address field is set to 'All Unassigned'.
If the default configuration is left, no further IIS configuration is required. If you do change the IP address in
the bindings from 'All Unassigned' to a specific IP address, then you need to make sure that you also add a
binding for the Virtual Service IP address (VIP) as shown in the example below:
86
Windows 2008 / 2012
By default, IIS listens on all configured IP addresses, this is shown in the example below (shows Windows
2008 example). As can be seen the IP address field is set to “All Unassigned”.
If the default configuration is left, no further IIS configuration is required. If you do change the IP address in
the bindings from “All Unassigned” to a specific IP address, then you need to make sure that you also add a
binding for the Virtual Service IP address (VIP) as shown in the example below:
87
Windows Firewall Settings
For Windows Server 2003 SP1 & later, if you have enabled the built-in firewall, you will need to enable the
Web Server (HTTP) exception to permit access to the web server. This exception is created automatically
when IIS is installed and when enabled allows traffic on both the network and Loopback Adapters.
For Windows 2008 R1 the firewall configuration is very similar to windows 2003 R2. Again, an exception is
created automatically that must be enabled to permit port 80 HTTP traffic. You just need to enable
the firewall for both interfaces then ensure that the WWW service check-box is ticked as shown below:
88
Windows 2008 R2 Firewall Settings
Windows 2008 automatically creates several default firewall rules for both inbound and outbound traffic.
There are 3 firewall profiles and interfaces can be associated with one of these 3 profiles (domain, private
and public) although the Loopback Adapter automatically gets associated with the public profile and this
cannot be changed.
For a web server listening on port 80 the following default HTTP rules need to be enabled as shown below:
89
NAT Mode Considerations
NAT mode load balancing has the advantage that the only change required to the Real Servers is to modify
the default gateway and possibly the IP address and subnet. Whilst NAT mode is fairly straight forward, a few
points need to be considered.
1. By default your Real Servers won't be able to access the Internet through the new default gateway
(except when replying to requests made through the external VIP).
2. Non-load balanced services on the Real Servers (e.g. RDP for management access to Windows
servers) will not be accessible since these have not been exposed via the load balancer
Change Auto-NAT from off to the external interface being used – typically eth1
Click Update
This activates the rc.nat script that forces external network traffic to be MASQUERADED to and from the
external network. The iptables masquerade rule that's used for this is shown below:
Setup a Virtual Service with a single Real Server for each service
or
Setup a floating IP address and individual SNAT/DNAT rules for each service as shown in the example
below. These lines can be added to the firewall script using the WUI option Maintenance > Firewall Script
INT_ADDR="10.50.110.238"
EXT_ADDR="192.168.111.250"
90
Once the above SNAT/DNAT rules have been configured, the following firewall entries will be listed under
View Configuration > Firewall Rules
N.B If Autonat is already enabled, only the DNAT rule (i.e. not the SNAT rule) will be required.
Normally, when a client on the same subnet as the Real Server tries to access the Virtual Service on the load
balancer the request will fail. This is because the Real Server will use the local network to get back to the
client rather than going through the load balancer.
This replaces the default route with a new route which goes via the loadbalancer.
Any local traffic (same subnet) is handled by this route and any external traffic is handled by the default route
(which also points at the load balancer).
91
Route Configuration for Linux Servers
To rectify this issue for Linux servers, we need to modify the local network route by changing to a higher
metric:
Then we need to make sure that local network access uses the load balancer as its default route:
route add -net 192.168.2.0 netmask 255.255.255.0 gateway 192.168.2.21 metric 0 dev eth0
Any local traffic (same subnet) is then handled by this manual route and any external traffic is handled by the
default route (which also points at the load balancer).
Firewall Marks
Using firewall marks enables multiple ports to be combined into a single Virtual Service. A common use of
this feature is to aggregate port 80 (HTTP) and port 443 (HTTPS) so that when a client fills their shopping
cart on via HTTP, then move to HTTPS to give their credit card information, they will remain on the same
Real Server.
This will automatically configure the load balancer for firewall marks.
For NAT mode VIPs, leave the Real Server port blank as shown below:
92
Packets will then be passed to the Real Servers on the same port as it was received at the VIP.
N.B. For Layer 4 DR mode VIPs, there is no Real Server Port field since port translation is not possible in this
mode.
NOTE : To create an auto firewall mark VIP that listens on all ports, simply specify * in the
ports field rather than a specific port number.
NOTE : The heath check port is automatically set to be the first port in the list, e.g. if ports 80
& 443 are defined for the VIP, the check port is automatically set to port 80. This can be
changed if required using the Check Port field.
EXAMPLE 1 – Setup a new DR Mode Firewall Mark when no Initial VIP has been Created
93
Leave the Virtual Service Ports field blank (the ports will be defined in the firewall script in step 5 below)
Set Protocol to Firewall Marks
Set the Forwarding Method to Direct Routing
Click Update
Click Update
94
Step 4: Add the Associated Floating IP Address for the VIP
Click Update
If using a clustered pair, make the same changes to the firewall script (i.e. step 5) on the slave unit.
** The VIP is now configured and will be accessible on TCP ports 80 & 443 **
95
EXAMPLE 2 – Setup a Firewall Mark by Modifying an Existing VIP
In this case, the VIP and the associated floating IP address will already exist so does not need to be created
manually.
96
Click Update
When using firewall marks the load balancer forwards traffic to the selected Real Server without changing
the destination port. So, incoming traffic to port 80 on the Virtual IP will be forwarded to port 80 on one of
the Real Servers. Likewise, incoming traffic to port 443 will be forwarded to port 443 on the same Real
Server
You can only have one health check port assigned, so if you are grouping port 80 and 443 traffic together
you can only check one of these ports, typically this would be port 80
You can specify a range of ports rather than a single port as shown below:
You can leave the upper limit blank to use the default upper limit as shown below:
97
You can specify a range of IP addresses as shown below:
Lock Ldirectord Configuration – Prevent the web interface from writing the Ldirectord configuration file, so
that manual changes are retained. Manual changes to the Ldirectord configuration file may be overwritten if
settings are edited in the WUI. Locking the configuration file will prevent the web interface from modifying the
file so that custom edits are preserved.
A warning message will be displayed on all Layer 4 configuration pages, and changes will be denied.
NOTE : If manual changes are made to configuration files, then Lock Ldirectord Configuration
is unchecked, any changes made via the WUI will overwrite the manual changes.
Check Interval – Layer 4 (Ldirectord) health check interval in seconds. If this setting is too low, you may
experience unexpected Real Server downtime.
98
Check Timeout – Layer 4 (Ldirectord) health check timeout in seconds. If this setting is too low, you may
induce unexpected Real Server downtime.
Negotiate Timeout – Layer 4 (Ldirectord) negotiate health check timeout in seconds. The negotiate checks
may take longer to process as they involve more server side processing than a simple TCP socket connect
check. If this setting is too low, you may induce unexpected Real Server downtime.
Failure Count – Layer 4 (Ldirectord) number of times a check has to fail before taking server offline. The
time to detect a failure and take down a server will be (check interval + check timeout) * failure count.
Quiescent – When a Real Server fails a health check, do we kill all connections?
When Quiescent is set to yes, on a health check failure the Real Server is not removed from the load
balancing table, but the weight is set to 0. Persistent connections will continue to be routed to the failed
server, but no new connections will be accepted.
When Quiescent is set to no, the server is completely removed from the load balancing table on a health
check failure. Persistent connections will be broken and sent to a different Real Server.
N.B. Quiescent only applies to health checks – it has no effect on taking Real Servers offline in System
Overview. To manually force a Real Server to be removed from the table, set Quiescent to no and arrange for
the server to fail its health check. This may be done, for example, by shutting down the daemon or service,
changing the negotiate check value, or shutting down the server.
Email Alert Source Address – Specify the global source address of the email alerts. When an email alert is
sent, the system will use this address as the 'From' field.
Email Alert Destination Address – Specify the global destination email alert address. This address is used
to send notifications of Real Server health check failures. This can also be configured on a Virtual Service
level.
Auto NAT – Automatically NAT outbound network connections from internal servers. By default servers
behind the load balancer in a NAT configuration will not have access to the outside network. However clients
on the outside will be able to access load balanced services. By enabling Auto NAT the internal servers will
have their requests automatically mapped to the load balancers external IP address. The default
configuration is to map all requests originating from internal network eth0 to the external IP on eth1. If you are
using a different interface for external traffic you can select it here. Manual SNAT and DNAT configurations
for individual servers can also be configured in the firewall script.
Multi-threaded – Perform health checks with multiple threads. Using multiple-threads for health checks will
increase performance when you have a large number of Virtual Services.
99
Layer 7 Services
The Basics
Layer 7 services are based on HAProxy which is a fast and reliable proxying and load balancing solution for
TCP and HTTP-based applications.
Since HAProxy is a full proxy, Layer 7 services are not transparent by default, i.e. the client source IP address
is lost as requests pass through the load balancer and instead are replaced by the load balancer's own IP
address.
Layer 7 supports a number of persistence methods including source IP address, HTTP cookie (both
application based and inserted), Connection Broker, RDP cookie and SSL session ID.
When a VIP is added the load balancer automatically adds a corresponding floating IP address which is
activated instantly. Check View Configuration > Network Configuration to ensure that the Floating IP address
has been activated correctly. They will show up as secondary IP addresses under the relevant interface.
Multiple ports can be defined per VIP, for example 80 & 443. In this case it may also be useful to enable
persistence (aka affinity / stickiness) to ensure that clients hit the same back-end server for both HTTP &
HTTPS traffic and also prevent the client having to renegotiate the SSL connection.
With Layer 7, port re-direction is possible, i.e. VIP:80 → RIP:8080 is supported
From v7.6.3, manual configuration of layer 7 services is possible using the WUI.
NOTE : It's not possible to configure a VIP on the same IP address as any of the network
interfaces. this ensures services can move between master and slave appliances
100
Enter the required ports(s) in the Virtual Service Ports field, separate multiple ports with commas, specify
a range with a hyphen and specify all ports using an asterisk
NOTE : the following ports are used by the appliance and therefore cannot be used for Virtual
Services: 22 (SSH), 9080 (WUI – HTTP), 9443 (WUI – HTTPS), 7777 (HAProxy statistics
page), 7778 (HAProxy persistence table replication and 9081 (nginx fallback page).
Select the Layer 7 protocol to be handled by this Virtual Service, either HTTP or TCP
HTTP Mode – Selected if the Virtual Service will handle only HTTP traffic. Allows more flexibility in the
processing of connections. The HTTP Cookie and HTTP application cookie modes, and the X-Forwarded-
For header all require HTTP to be selected. In addition, HAProxy logs will show more information on the
client requests and Real Server responses.
TCP Mode – Required for non HTTP traffic such as HTTPS, RPC, RDP, FTP etc.
If the VIP will be configured manually, check (enable) the Manual Configuration check-box
N.B. Please refer to page 106 for more information on manually configuring layer 7 services
Click Update
Now proceed to define the RIPs (Real Servers) as detailed on page 105
Option Description
HTTP Pipeline Mode Select how HAProxy should handle HTTP pipelining to client and server
Close client, force close server - Close the server connection at the TCP
layer, as well as sending the Connection: close header. Also close the client
connection using HTTP.
Work around broken Work around Real Servers that do not correctly implement the HTTP
Connection: close Connection:close option. This does not take effect when HTTP pipeline
mode is set to No change.
Balance Mode The scheduler used to specify server rotation. Specify the scheduler to
utilize when deciding the back-end server to use for the next new
connection.
Persistence Mode Select how the load balancer should track clients so as to direct each
request to the same server.
HTTP Cookie - The load balancer will set an HTTP Cookie to track each
client.
101
Application Cookie - Where an existing HTTP Cookie is set by the web
application on the Real Servers, use this to track each client.
SSL Session ID - Read the Session ID from the SSL connection and use
this to track each client.
MS Session Broker - Use the server-set msts RDP Cookie to track clients
connecting to a Microsoft Terminal Server. The Session Broker service
must be enabled on the real servers.
RDP Client Cookie - Use the client-set mstshash RDP Cookie to track
clients connecting to a Microsoft Terminal Server. If the cookie is missing,
source IP persistence will be used instead.
Source IP - Make sure the same source IP always hits the same server.
Persistence table size - The size of the table of connections in KB. The
size of the table of connections (approx 50 bytes per entry) where
connection information is stored to allow a session to return to the same
server within the timeout period. The default units are in KB.
Feedback Method Select whether HAProxy should query each Real Server for its load level.
Agent - The Real Server is queried every health check interval for the real
server's percent CPU idle. This is used to set each Real Server's weight to
a value proportional to its initial weight. For example, if the initial weight is
100 and the percentage cpu idle is 34, the weight will be set to 34.
Remember lower numbers mean lower priority for traffic, when compared
with other real servers in the pool.
None - HAProxy will not modify the Real Server's weight.
102
Fallback Server Configure fallback server settings. i.e. where to direct requests if all RIPs
are down.
External Script - Use a custom file for the health check. Specify the script
name & path in the Check Script field.
MySQL - The check consists of sending two MySQL packets, one Client
Authentication packet, and one QUIT packet, to correctly close the MySQL
session. It then parses the MySQL Handshake Initialization packet and/or
Error packet. It's a basic but useful test and does not produce errors or
aborted connects on the server. However, it requires adding an
authorization in the MySQL table as follows:
e.g.
Check Port - Specify a different port for health checks. If specified this
setting overrides the default checkport, useful when you are balancing
multiple ports.
Request to send - Specify a specific file for the health check. Open the
specified file and check for the response expected. This may be used to run
a server-side script to check the health of the backend application.
For example, if index.html was specified in this field, the following check
directive would be automatically created in the HAProxy configuration file:
option httpchk GET /index.html HTTP/1.0
103
N.B. the back-slash character before 'index.html' is added automatically
Response expected - The content expected for a valid health check on the
specified file. The response expected can be any valid regular expression.
Continuing the example above, if the file index.html contained the word
'Copyright' response expected would be set to Copyright. The following
check directive would then be automatically created in the HAProxy
configuration file: http-check expect rstring Copyright
Host Header - Set the HTTP Host header to be sent with health check
requests. If the real server's web server is configured to require a Host
header, the value to be used in health checks may be set here.
Maximum Connections Specifies the maximal number of concurrent connections that will be sent to
this server. If the number of incoming concurrent requests goes higher than
this value, they will be queued, waiting for a connection to be released.
Timeout Use this option to override the default client & server timeouts in the Layer 7
advanced section.
Set X-Forwarded-For Header Instruct HAProxy to add an X-Forwarded-For (XFF) header to all requests,
showing the client's IP Address. If HTTP is selected under Layer 7 Protocol,
HAProxy is able to process the header of incoming requests. With this
option enabled, it will append a new X-Forwarded-For header containing the
client's IP Address. This information may be extracted by the Real Server
for use in web applications or logging.
Force to HTTPS If set to 'Yes' any HTTP connections that are made on this VIP will be forced
to reconnect using HTTPS.
This will keep any entered URL. If you are terminating the SSL on the
Loadbalancer you should use the same VIP address for both the SSL
Termination and Layer7 configurations.
HTTPS Redirect Code Indicates which type of HTTP redirection is desired. Codes 301, 302, 303,
(available when Force to 307 and 308 are supported, with 302 used by default if no code is specified.
HTTPS is enabled)
301 means "Moved permanently", and a browser may cache the Location.
302 means "Moved permanently" and means that the browser should not
cache the redirection.
303 is equivalent to 302 except that the browser will fetch the location with a
GET method.
307 is just like 302 but makes it clear that the same method must be
reused.
308 replaces 301 if the same method must be used.
Proxy Protocol Enable Proxy Protocol if using STunnel SSL Off-load. If you wish to use this
VIP with STunnel for SSL off-load whilst passing the client's IP address to
the real servers this option needs to be enabled (checked). Please ensure
that TProxy is enabled in the Layer7 Advanced options and that the 'Set as
Transparent Proxy' is enabled in your STunnel VIP.
NOTE : For more details on configuring health-checks please refer to Chapter 7 starting on
page 141.
104
Creating Real Servers (RIPs)
You can add an unlimited number of Real Servers to each Virtual Service (except the Enterprise R16 which is
limited to 4 x VIPs each with up to 4 RIPs). For layer 7 VIPs port redirection is possible so the Real Server
port field can be set to a different value to the VIP port. Real Servers in a Layer 7 configuration can be on any
subnet in any network as long as they are accessible from the load balancer.
to add a new layer 7 RIP:
Click Add a new Real Server next to the relevant Virtual Service
Specify the required Weight, this is an integer specifying the capacity of a server relative to the others in
the pool, the valid values of weight are 0 through to 65535, the default is 1
Persistence Considerations
Persistence State Table Replication
If you want the current persistent connection table to work when the master load balancer swaps over to the
slave then this can be enabled using the WUI. Enabling this option will replicate persistence tables for all
relevant layer 7 VIPs to the peer load balancer.
Click Update
N.B. This option is not available if you have IPv6 Virtual Services in your HAProxy configuration.
105
Layer 7 – Custom Configurations
From v7.6.3 it's possible to manually configure custom Layer 7 services via the WUI. Previously the HAProxy
configuration file (/etc/haproxy/haproxy.cfg) had to be manually edited which had a number of disadvantages.
Step 1
Create a new layer 7 Virtual Service using the WUI option: Cluster Configuration > Layer 7 - Virtual Services
ensuring that the Manual Configuration check-box is ticked. Enabling this option stops the HAProxy
configuration file being written for this virtual service, leaving the user to configure via the WUI option: Cluster
Configuration > Layer 7 – Manual Configuration instead.
Step 2
Define the required layer 7 Real Servers using the WUI option: Cluster Configuration > Layer 7 – Real
Servers.
Step 3
Use the WUI option: Cluster Configuration > Layer 7 - Manual Configuration to manually define the Virtual
Service and Real Servers using the same Names, IP Addresses and Ports used in steps 1 & 2.
NOTE : Make sure you use the same Names, IP Addresses and Ports in Step 3 as you did in
Step 1 & 2. This is required to ensure that the system overview is able to report the VIP & RIP
status correctly. If different details were used, this would not be possible.
listen VIP1
bind 192.168.2.110:80
mode http
balance leastconn
acl ACL-1 path_beg /staff/ ← see note 1
acl ACL-2 path_beg /staff ← see note 1
redirect location https://login.domain.com if ACL-1 or ACL-2 ← see note 2
cookie SERVERID insert nocache indirect
server backup 127.0.0.1:9081 backup non-stick
option httpclose
option forwardfor
option redispatch
option abortonclose
maxconn 40000
server rip1 192.168.110.111:80 weight 1 cookie rip1 check inter 2000 rise 2 fall 3
minconn 0 maxconn 0 on-marked-down shutdown-sessions
server rip1 192.168.110.112:80 weight 1 cookie rip1 check inter 2000 rise 2 fall 3
minconn 0 maxconn 0 on-marked-down shutdown-sessions
Configuration Steps:
1. Using the WUI option: Cluster Configuration > Layer 7 – Virtual Services create a Layer 7 VIP with
the required Label (name), IP Address and Port, and ensure that the Manual Configuration check-
box is enabled, e.g. :
106
2. Using the WUI option: Cluster Configuration > Layer 7 – Real Servers define the associated RIPs in
the normal way, e.g. :
3. Select the WUI option: Cluster Configuration > Layer 7 – Manual Configuration and define the
required VIP / RIP settings in the text window using the same Names, IP Addresses and Ports used
in the WUI. .e.g. :
listen VIP1
bind 192.168.2.110:80
mode http
balance leastconn
acl ACL-1 path_beg /staff/
acl ACL-2 path_beg /staff
redirect location https://login.domain.com if ACL-1 or ACL-2
cookie SERVERID insert nocache indirect
server backup 127.0.0.1:9081 backup non-stick
option httpclose
option forwardfor
option redispatch
option abortonclose
maxconn 40000
server rip1 192.168.110.111:80 weight 1 cookie rip1 check inter 2000 rise
2 fall 3 minconn 0 maxconn 0 on-marked-down shutdown-sessions
server rip1 192.168.110.112:80 weight 1 cookie rip1 check inter 2000 rise
2 fall 3 minconn 0 maxconn 0 on-marked-down shutdown-sessions
4. Click Update
5. Now reload HAProxy using the Reload HAProxy button in the blue Commit Changes box at the top
of the screen or by using the WUI option: Maintenance > Restart Services
107
Notes:
1. These lines configure 2 ACL's named ACL-1 & ACL-2 where the criteria for a match is that the URL
starts with either /staff/ or /staff
2. This line causes a redirect to https://login.domain.com to occur when either acl is matched
Manual Config Ex. 2 – Load Balancing with URL matching using ACL's
To support URL matched load balancing the structure of the HAProxy configuration file must be changed to
use the front-end / back-end model as shown in the example below:
frontend f1
bind 192.168.2.110:80
acl ACL-1 path_beg /test1
acl ACL-2 path_beg /test2
use_backend b1 if ACL-1
use_backend b2 if ACL-2
default_backend b2
option httpclose
backend b1
cookie SERVERID insert nocache indirect
server s1 192.168.2.111:80 weight 1 cookie s1 check
server s2 192.168.2.112:80 weight 1 cookie s2 check
backend b2
cookie SERVERID insert nocache indirect
server s3 192.168.2.113:80 weight 1 cookie s3 check
server s4 192.168.2.114:80 weight 1 cookie s4 check
Configuration Steps:
1. Using the WUI option: Cluster Configuration > Floating IPs , add a floating IP for the new VIP, in this
example 192.168.2.110 is added to match the IP address required:
3. Select the WUI option: Cluster Configuration > Layer 7 – Manual Configuration and define the
required VIP / RIP settings in the text window. .e.g. :
108
frontend F1
bind 192.168.2.110:80
acl ACL-1 path_beg /test1
acl ACL-2 path_beg /test2
use_backend B1 if ACL-1
use_backend B2 if ACL-2
default_backend B2
option httpclose
backend B1
cookie SERVERID insert nocache indirect
server s1 192.168.2.111:80 weight 1 cookie s1 check
server s2 192.168.2.112:80 weight 1 cookie s2 check
backend B2
cookie SERVERID insert nocache indirect
server s3 192.168.2.113:80 weight 1 cookie s3 check
server s3 192.168.2.114:80 weight 1 cookie s3 check
4. Click Update
5. Now reload HAProxy using the Reload HAProxy button in the blue Commit Changes box at the top
of the screen or by using the WUI option: Maintenance > Restart Services
Notes:
2. path_beg matches the beginning of the path to a certain value, in this case /test1 & /test2 and then
directs requests to the appropriate back-end, either backend B1 or B2
IMPORTANT : This example uses the Frontend/Backend structure to define the Layer 7
Virtual Service. When using this structure, the related Virtual Service cannot be displayed in
the System Overview so there is no need to define a matching VIP in this case.
These are fairly simple examples to show the principle of using ACLs. For much more information please
refer to the HAProxy manual at the following link:
http://www.haproxy.org/download/1.6/doc/configuration.txt
109
HAProxy Error Codes
401 when an authentication is required to perform the action (when accessing the stats page)
408 when the request timeout strikes before the request is complete
500 when HAProxy encounters an unrecoverable internal error, such as a memory allocation
failure, which should never happen
502 when the server returns an empty, invalid or incomplete response, or when an "rspdeny" filter
blocks the response
503 when no server was available to handle the request, or in response to monitoring requests
which match the "monitor fail" condition
504 when the response timeout strikes before the server responds
http://www.haproxy.org/download/1.6/doc/configuration.txt
110
Layer 7 – Advanced Configuration
This section allows you to configure the various layer 7 global settings.
111
Lock HAProxy Configuration – Prevent the WUI writing to the HAProxy configuration file. Manual changes
to the HAProxy configuration file may be overwritten if settings are edited in the web interface. Locking the
configuration file will prevent the web interface from modifying the file, so that custom edits are preserved. A
warning message will be displayed on all Layer 7 configuration pages, and changes will be denied.
NOTE : This Feature is now deprecated. It's now possible to configure each virtual service as
read-only. The manual configuration can then be created using the WUI option: Layer 7 -
Manual Configuration
Logging – Activate detailed logging of the Layer 7 HAProxy service. When activated the HAProxy log is
written to /var/log/haproxy.log.
Log Only Errors – Do not log operational connection details, only log errors.
Redispatch – Allows HAProxy to break persistence and redistribute to working servers should failure occur.
Normally this setting should not require changing.
Connection Timeout – HAProxy connection timeout in milliseconds. This setting should normally not require
changing.
Client Timeout – HAProxy client timeout in milliseconds. This setting should normally not require changing.
Real Server Timeout – HAProxy Real Server timeout in milliseconds. This setting should not require
changing.
Maximum Connections – HAProxy maximum concurrent connections. This setting should not require
changing, unless you are running a high volume site. See also Maximum Connections for a Virtual Service
(HAProxy).
Ulimit – The maximum number of file descriptors used for layer 7 load balancing.
N.B. From v7.6.3 this value is now auto-configured internally based on other system parameters and does
not need to be set here.
Abort on Close – Abort connections when users close their connection. Recommended as the probability for
a closed input channel to represent a user hitting the 'STOP' button is close to 100%
Transparent Proxy – Enable TProxy support for Layer 7 HAProxy. TProxy support is required in order for the
Real Servers behind a layer 7 HAProxy configuration to see the client source IP address. The load balancer
must be in a NAT configuration (internal and external subnets) with the Real Servers using an IP address on
the load balancer (preferably a floating IP) as their default gateway.
N.B. Since the load balancer must be in a NAT configuration (i.e. VIPs & RIPs in different subnets) to utilize
TProxy, it is not always an appropriate solution. In situations such as this, it's also possible to use the X-
forwarded-for header with layer 7 Virtual Services. Most web servers can then be configured to record the X-
Forwarded-For IP address in the log files.
112
For details on how to enable X-Forwarded-For support, please refer to page 104. For details on how to
enable X-Forwarded-For support with Apache and IIS, please refer to the following Loadbalancer.org blog
links:
Apache - http://blog.loadbalancer.org/apache-and-x-forwarded-for-headers/
IIS - http://blog.loadbalancer.org/iis-and-x-forwarded-for-header/
Interval – Interval between health checks. This is the time interval between Real Server health checks in
milliseconds.
Rise – Number of health checks to Rise. The number of positive health checks required before re-activating
a Real Server.
Fall – Number of health checks to Fall. The number of negative health checks required before de-activating a
Real Server.
Feedback Agent Interval - The time in milliseconds between each feedback agent check from HAProxy to
the feedback agent.
HAProxy Statistics Page Password – Set the password used to access Reports > Layer 7 Status.
HAProxy Statistics Page Port – Change the listening port for the HAProxy web based statistics report from
the default of TCP 7777.
Advanced Stats - Enable/disable additional actions available on the HAProxy stats page.
Request Buffer Length – Set the health check buffer length in bytes.
N.B. Changing this value will effect the performance of HAProxy. Do not make changes unless you know
exactly what you are doing.
Lower values allow more sessions to coexist in the same amount of RAM, and higher values allow some
applications with very large cookies to work. The default value is 16384 bytes. It is strongly recommended not
to change this from the default value, as very low values will break some services such as statistics, and
values larger than the default size will increase memory usage, possibly causing the system to run out of
memory. Administrators should consider reducing the Maximum Connections parameter if the request buffer
is increased.
Header Buffer Length – Set the header buffer length, in bytes The header buffer is a section of the request
buffer, reserved for the addition and rewriting of request headers. The default value is 1024 bytes. Most
applications will only require a small header buffer, as few headers are added or rewritten.
Persistence Table Replication – When enabled, HAProxy's persistence tables are replicated to the slave
device.
Persistence Table Replication Port – Set the TCP port to use for persistence table replication. The default
port is TCP 7778.
113
SSL Termination
Concepts
SSL termination can be performed on the Real Servers or on the load balancer (aka SSL offloading).
Notes:
• Data is encrypted from client to server. This provides full end-to-end data encryption as shown in the
diagram below
• It's not possible to use HTTP cookie persistence since the packet is encrypted and therefore the
cookie cannot be read – in this case the only option is source IP persistence
Notes:
• Since SSL is terminated on the load balancer, by default, data from the load balancer to the web
servers is not encrypted as shown in the diagram above. This may or may not be an issue depending
on the network structure between the load balancer and web servers and your security requirements
N.B. From v7.6 re-encryption is possible between the load balancer and the Real Servers (aka SSL
bridging). To use this, enable the 'Re-encrypt to Backend' option for each RIP and click Update.
Each server must be correctly configured for HTTPS for this to work and an appropriate certificate
must also be installed.
• A Pound or STunnel SSL VIP is used to terminate SSL. The backend for the VIP can be either a
Layer 4 NAT mode VIP or a Layer 7 HAProxy VIP. DR mode cannot be used since Pound acts as a
proxy, and the real servers see requests with a source IP address of the VIP. However, since the real
servers believe that they own the VIP (due to the loopback adapter configured to handle to ARP
problem) they are unable to reply to Pound.
114
NOTE : SSL termination on the load balancer can be very CPU intensive. In most cases, for a
scalable solution, terminating SSL on the Real Servers is the best option.
A fairly common configuration is to include port 80 in the VIPs definition and also enable persistence. This
ensures that both HTTP and HTTPS requests from a particular client are always sent to the same Real
Server as shown below:
115
Enter an appropriate Label (name) for the new Virtual Service
Enter the required port in the Virtual Service Port field – typically 443
Enter the required IP address in the Back-end Virtual Service IP Address field
This is normally the same IP address as the Virtual Service IP address but can be any valid IP. The IP
address specified must correspond to a Layer 7 HAProxy VIP or a Layer 4 NAT mode VIP. Unencrypted
traffic will be sent here for load balancing.
N.B. DR mode cannot be used since STunnel acts as a proxy, and the Real Servers see requests with a
source IP address of the Virtual Service. However since the Real Servers believe that they own the Virtual
IP (due to the Loopback Adapter configured to handle to ARP problem) they are unable to reply to
STunnel
Enter the required port in the Back-end Virtual Service Port field
Define the list of accepted ciphers using the Ciphers to use field
By default the cipher is set to: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-
RSA-AES128-SHA:RC4:HIGH:!MD5:!aNULL:!EDH
This can be modified as required, or the field can be cleared (blank) to allow all available ciphers (not
recommended)
116
Configure Do not Insert Empty Fragments
Disables a countermeasure against a SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. This
option needs to be enabled (checked) to ensure mitigation of both the BEAST and CRIME MITM attacks.
It is also required for PCI Testing.
The following STunnel options should be set to mitigate the BEAST attack:
If these options are set, this should prevent the BEAST attack, and should also help to mitigate DoS attacks
and MITM Attacks.
117
Creating a Pound SSL Virtual Service
Enter the required port in the Virtual Service Port field – typically 443
Enter the required IP address in the Back-end Virtual Service IP address field
This is normally the same IP address as the Virtual Service IP address but can be any valid IP. The IP
address specified must correspond to a Layer 7 HAProxy VIP or a Layer 4 NAT mode VIP. Unencrypted
traffic will be sent here for load balancing.
N.B. DR mode cannot be used since Pound acts as a proxy, and the Real Servers see requests with a
source IP address of the Virtual Service. However since the Real Servers believe that they own the Virtual
IP (due to the Loopback Adapter configured to handle to ARP problem) they are unable to reply to Pound
118
Enter the required port in the Back-end Virtual Service Port field
Define the list of accepted ciphers using the Ciphers to use field
By default the cipher is set to: ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-
RSA-AES128-SHA:RC4:HIGH:!MD5:!aNULL:!EDH
This can be modified as required, or the field can be cleared (blank) to allow all available ciphers (not
recommended)
This option should be set to 'No Client Renegotiation' to mitigate the BEAST attack.
119
Click Update to create the SSL VIP
Header Field Value Add your own header to be passed on by Pound. Set
Field Value allows the value part of the header to be
specified: [field-name]: [field-value]
The following Pound options should be set to mitigate the BEAST attack:
Allow Client Renegotiation – this option should be set to 'No Client Renegotiation'
If these options are set, this should prevent the BEAST attack, and should also help to mitigate DoS attacks
and MITM Attacks.
to generate a CSR:
120
Click Generate SSL Certificate Request
Copy the resulting CSR from the top pane and send this to your chosen Certificate Authority
N.B. Select Apache as the platform type during the certificate generation process.
121
Once you receive your signed certificate from the CA, copy/paste this into the lower pane
If you need to add an intermediate certificate, paste it after the signed certificate in the lower pane.
Using a text editor such as vi or vim under Linux or Notepad under Windows create an empty file called
pem.txt for example. Then copy/paste the Certificate, the Private Key and any additional Intermediate
Certificates into the file as follows (truncated versions are shown):
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIJAL98jhEiUm3iMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgN
2bShC2AVC+ZDMNu6bvCdvfySi6EypUcIvEwao7ZbyaAEbcSVympQJdgs6W6ajiLSf£
-----END CERTIFICATE-----
MIICXAIBAAKBgQCcPYkYHm8gYwIm3HyoVxjrymusOeIFgZlWyuaebIrreCpIo+iydRf
YwC2ZCE0HwquomN/q4ctnhgeN+kugDxlgCTVYd3eo/Dv/KZ16p4HUlrTqwES4Lunff
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIJAL98jhEiUm3iMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgN
E89UJCG2nMW5JVBNkyHYbQTvU8MeR3iIhe2fw+qVE2pgxWYWaGm8QwTsxQKgbx
2bShC2AVC+ZDMNu6bvCdvfySi6EypUcIvEwao7ZbyaAEbcSVympQJdgs6W6ajiLSf£
-----END CERTIFICATE-----
122
Exporting PFX Certificates from Windows Servers
When exporting certificates from Windows servers, make sure that Yes, export the private key is selected,
this will enable the output format to be PFX. Also make sure that Include all certificates in the certification
path if possible is selected.
Navigate to the bottom of the screen, the using the browse option select the relevant certificate file (either
PEM or PFX format)
Once uploaded, restart Pound / STunnel using the restart link at the top of the page or via the WUI option:
Maintenance > Restart Services
NOTE : If your master & slave are correctly configured as a clustered pair, when you upload
the certificate file to the master, the file will be automatically copied over to the slave unit.
NOTE : It's important to backup all of these files. This can be done via the WUI from
Maintenance > Backup & Restore > Download SSL Certificates.
http://slproweb.com/products/Win32OpenSSL.html
At this URL you'll need to download and install the Visual C++ 2008 Redistributable, then download either the
light or full version of OpenSSL. Once installed, you'll have an OpenSSL directory located on your filesystem
(default location c:\OpenSSL)
To use the program, open a command window, navigate to the location where it was installed (by default
c:\OpenSSL\bin) then run the required command as detailed below.
123
Converting PFX certificates to PEM format
e.g.
e.g
openssl pkcs12 -in /root/cert.pfx -nodes -out /root/cert.pem
openssl x509 -in drive:\path\filename.cer -inform DER -out drive:\path\filename.pem -outform PEM
e.g
openssl x509 -in c:\cert.cer -inform DER -out c:\cert.pem -outform PEM
openssl x509 -in /path/filename.cer -inform DER -out /path/filename.pem -outform PEM
e.g
openssl x509 -in /root/cert.cer -inform DER -out /root/cert.pem -outform PEM
If a password has been included in the private key, this should be removed before it is used with your PEM
file. This can be done using the following OpenSSL command either on the load balancer or another machine
with openssl installed:
124
SSL Re-encryption (aka SSL Bridging)
From v7.6 it's possible to terminate SSL on the load balancer and then re-encrypt the HTTP traffic between
the load balancer and each Real Server. Each Real Server must have an SSL certificate and be correctly
configured for HTTPS. This option DOES NOT check the state of the installed SSL Certificate on the Real
Server which will allow for the use of locally generated SSL Certificates.
To enable re-encryption:
For each Real Server use the WUI option: Cluster Configuration > Layer 7 – Real Servers > [Modify]
Click Update
125
Lock Pound Configuration – When enabled it will stop the user interface overwriting the configuration files
so manual changes can be made.
Logging – Activate detailed logging of the Pound SSL termination service. When activated the Pound log is
written to /var/log/Poundssl.
Client Timeout – Configure the global client response timeout in seconds. This setting should not require
changing.
Global Server Timeout – Configure the global Real Server response timeout in seconds. This setting should
not require changing.
Ulimit – Set Ulimit value for Pound the process. This setting will change the maximum number of file
descriptors available to the Pound process. The default is 81000.
Ulimit – Set Ulimit value for Pound the process. This setting will change the maximum number of file
descriptors available to the Pound process. The default is 81000.
Transparent Proxy – Enable TProxy support in Pound SSL. The combination of Pound, TProxy, and
HAProxy allows SSL termination on the load balancer whilst passing the client's IP address to the Real
Servers. This option also automatically enables TProxy for HAProxy.
NOTE : One consequence of using transparent proxy with both Pound and HAProxy is that
you can no longer access the HAProxy Virtual Service directly. With transparency turned on
HAProxy will only accept traffic from Pound. One way to get around this is to configure the
HAProxy VIP to listen on 2 ports. One will listen on port 80, and be your standard HTTP
service. The other will listen on a different port; 81 for example – and will be the destination for
traffic from Pound. This is covered on page 130.
Debug Level – Option to set the debugging level for all STunnel Services. The Debug Level is a one of the
syslog level names or numbers emergency (0), Alert (1), Critical (2), err (3), Warning (4), Notice (5),
Information (6), or Debug (7). The higher the number the more detail will be contained in the STunnel Logs.
Disable Nagle Algorithm – More details can be found in RFC 896. With this option ticked (enabled) the
Nagle Algorithm will be disabled.
126
HTTP to HTTPS Redirection
V7.6 introduces the capability to force HTTP to HTTPS redirection via the WUI. Previously, a manual edit was
required. This can be achieved both when terminating SSL on the Real Servers and when offloading SSL on
the load balancer.
• VIP1 – This is a layer 7 (HAProxy), HTTP mode VIP that listens on port 80 and redirects all
connections to VIP2
N.B. This VIP will show purple/green in the System Overview. This occurs once Force to HTTPS is
enabled (see below)
• VIP2 – This is a layer 7 (HAProxy), TCP mode VIP that listens on port 443 and load balances
connections between real servers RIP1 & RIP2
NOTE : It's not possible to enable TProxy when using this configuration.
127
SSL Termination on the Load Balancer
• VIP1 – This is a Pound or STunnel VIP that listens on port 443, terminates the SSL connection and
then forwards the decrypted HTTP connections to VIP2 on port 80
• VIP2 – This is a layer 7 (HAProxy), HTTP mode VIP that listens on port 80 and load balances
connections between real servers RIP1 and RIP2. It also redirects connections that have NOT come
from Pound or STunnel, i.e. client connections directly on port 80
NOTE : It's not possible to enable TProxy when using this configuration.
NOTE : If you require to re-encrypt the data from the load balancer to the Real Server, enable
the Re-encrypt to Backend option for the each real server. See page 125 for more details.
128
Using Transparent Proxy (TProxy)
HAProxy, Pound and STunnel are proxies which means that a new connection is established from the proxy
out to the back-end server in response to an inbound client connection to the proxy. This means that the
source IP address of the packet reaching the server will be the proxies address, or more specifically the IP
address assigned to the load balancers Ethernet interface.
TProxy can be used with HAProxy, Pound and STunnel to maintain the actual source IP address of the client.
When enabling TProxy, it's important to be aware of the topology requirements for TProxy to work correctly.
This is covered in the examples below.
In this example, TProxy is enabled with a layer 7 Virtual Service. This setup is illustrated in the following
diagram.
• The RIPs must be on a different subnet to the VIP – this can achieved by using 2 IP addresses
assigned to a single interface, or two separate interfaces (in the above example, eth1 = 192.168.2.1
and eth0 = 192.168.4.1)
• TProxy must be enabled using the WUI option: Cluster Configuration > Layer 7 – Advanced
Configuration and setting Transparent Proxy to 'On'
• On the Real Servers, the default gateway must be configured to be an IP address on the load
balancer. When using a clustered pair, this should be a floating IP to allow failover to the slave
129
TProxy, HAProxy & Pound
In this example, Pound is used to terminate SSL. Pound passes the decrypted traffic to a layer 7 back-end
VIP where the Real Servers are configured. This setup is illustrated in the following diagram.
N.B. Using STunnel rather than Pound in this scenario is not supported. For STunnel, 2 separate HAProxy
VIPs must be used as explained on the following page.
• The RIPs must be on a different subnet to the VIP – this can achieved by using 2 IP addresses
assigned to a single interface, or two separate interfaces (in the above example, eth1 = 192.168.2.1
and eth0 = 192.168.4.1)
• Configure the Layer 7 VIP to listen on 2 ports – e.g. 80 & 81, then use port 81 for the Pound back-
end and port 80 for client connections. Configure the Pound VIP to listen on the same IP address /
port 443 and set its back-end to be port 81 of the HAProxy VIP.
This way, clients connect to a single IP address listening on port 80 & 443.
• TProxy for HAProxy must be enabled using the WUI option: Cluster Configuration > Layer 7 –
Advanced Configuration and setting Transparent Proxy to 'On'
• TProxy for Pound must be enabled using the WUI option: Cluster Configuration > SSL – Advanced
Configuration and setting Transparent Proxy to 'On'
• On the Real Servers, the default gateway must be configured to be an IP address on the load
balancer. When using a clustered pair, this should be a floating IP to allow failover to the slave
130
TProxy, HAProxy & STunnel
In this example, STunnel is used to terminate SSL. STunnel passes the decrypted traffic to a layer 7 back-
end VIP where the Real Servers are configured. As mentioned in the previous section, when STunnel is used,
2 separate HAProxy VIPs are required. This setup is illustrated in the following diagram.
N.B. If you require a single IP address with persistence across both ports 80 and 443, use the
TProxy/HAProxy/Pound configuration described on the previous page.
• The RIPs must be on a different subnet to the VIP – this can achieved by using 2 IP addresses
assigned to a single interface, or two separate interfaces (in the above example, eth1 = 192.168.2.1
and eth0 = 192.168.4.1)
• Configure each Layer 7 VIP to listen on 1 port – e.g. port 80. Then configure the same Real Servers
for both VIPs
• TProxy for HAProxy must be enabled using the WUI option: Cluster Configuration > Layer 7 –
Advanced Configuration and setting Transparent Proxy to 'On'
• For VIP2, TProxy for STunnel must be enabled by checking the Proxy Protocol option when
creating or modifying the VIP
• For the STunnel VIP, TProxy must be enabled by checking the Set as Transparent Proxy option
when creating or modifying the VIP
• On the Real Servers, the default gateway must be configured to be an IP address on the load
balancer. When using a clustered pair, this should be a floating IP to allow failover to the slave
131
Floating IPs
In order for the load balancer to function, the unit must physically own the Virtual IP address that the clients
are accessing before they get re-directed to a Real Server in the cluster. The floating IP(s) are added
automatically when new Virtual Services are created.
It's also possible to manually define Floating IP(s) if required, this is normally only required when manually
configuring firewall marks or when using layer 4 NAT mode or TProxy where in both cases the load balancer
must be the default gateway for the Real Servers.
The Floating IP(s) are controlled by heartbeat to ensure that only one of the load balancer appliance's
(normally the master) owns the Floating IP(s) at any time.
IMPORTANT NOTE : When using a clustered pair, ensure that the slave also has a static IP
address assigned that's in the same subnet as the floating IP being added. Failure to do so will
result in heartbeat issues during a failover.
NOTE : Floating IPs are not deleted automatically when Virtual Services are removed or
modified, this must be done manually.
132
Server Feedback Agent
The load balancer can modify the weight (amount of traffic) of each server by gathering data from either a
custom agent or an HTTP server. For layer 4 VIPs the feedback method can be set to either agent or HTTP,
for Layer 7 VIPs, only the agent method is supported.
A telnet to port 3333 on a Real Server with the agent installed will return the current idle stats as an integer
value in the range 0 – 100. The figure returned can be related to CPU utilization, RAM usage or a
combination of both. This can be configured using the XML configuration file located in the agents installation
folder (by default C:\ProgramData\LoadBalancer.org\LoadBalancer).
The load balancer typically expects a 0-99 integer response from the agent which by default relates to the
current CPU idle state, e.g. a response of 92 would imply that the Real Servers CPU is 92% idle. The load
balancer will then use the formula (92/100*requested_weight) to find the new optimized weight.
N.B. The 'Requested Weight' is the weight set in the WUI for each Real Server.
For more information please also refer to the following blog article:
http://blog.loadbalancer.org/open-source-windows-service-for-reporting-server-load-back-to-haproxy-load-
balancer-feedback-agent/
Windows Agent
The latest Windows feedback agent can be downloaded from:
http://downloads.loadbalancer.org/agent/loadbalanceragent.msi
Click Next
133
Select the installation folder and click Next
N.B. .NET Framework v3.5 is required by the agent and .NET Framework v4.0 is required by the Monitor
N.B. The agent should be installed on all Real Serves in the cluster
134
• To start the service, click Start
• To stop the service, click Stop
Installation
N.B. The agent files must be installed on all Real Servers, not the load balancer.
# Install xinetd
apt-get install xinetd (if not already installed)
# Then
cp lb-feedback.sh /usr/bin/lb-feedback.sh
chmod +x /usr/bin/lb-feedback.sh
cp lb-feedback /etc/xinetd.d/lb-feedback
chmod 644 /etc/xinetd.d/lb-feedback
/etc/init.d/xinetd restart
# Testing
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
95%
135
Custom HTTP Agent
You can use any HTTP server responding on port 3333 to give feedback information to the load balancer.
The format of this information must be an integer number of 0-100 without any header information.
Using this method you can generate a custom response based on your applications requirements i.e. a
mixture of memory usage, IO, CPU etc.
Configuration
As mentioned, from v7.6 both layer 4 and layer 7 VIPs are supported. To Configure Virtual Services to use
Agent / HTTP Feedback follow the steps below:
• Change the Feedback Method to either Agent or HTTP for layer 4 VIPs
• Click Update
136
Configuring VIPs & RIPs via Command Line / Script
Halt a server lbcli --action halt --vip <VIP Name> --rip <RIP Name>
Online a server lbcli --action online --vip <VIP Name> --rip <RIP Name>
Layer 7 VIP
lbcli --action add-vip --layer 7 --vip_type <ipv4|ipv6> --vip <VIP Name>
--ip <VIP IP Address> --ports <ports> --mode <http|other_tcp>
Layer 7 RIP
lbcli --action add_rip --vip <VIP Name> --rip <RIP Name> --layer 7 --ip
<RIP IP Address> --port <Port value> --rip_type <ipv4|ipv6> --weight
<Weight value>
Delete a RIP lbcli --action delete_rip --vip <VIP Name> --rip <RIP Name>
137
N.B. The above information is also displayed when typing the following command:
Notes:
138
Layer 4 using ipvsadm
For layer 4, the ipvsadm command can be used. Several examples are provided below.
Add a TCP based Virtual Service & use weighted round robin scheduling:
ipvsadm -A -t 192.168.65.192:80 -s wrr
Add a UDP based Virtual Service & use weighted least connection scheduling:
ipvsadm -A -u 192.168.65.192:80 -s wlc
139
Layer 7 using Socket Commands
For layer 7 HAProxy VIPs, the socat socket command can be used as shown in the examples below.
N.B. Other examples can be found by searching for “Unix Socket Commands” at the following link:
http://haproxy.1wt.eu/download/1.6/doc/configuration.txt
IMPORTANT NOTE : Please note that since these changes are being made directly to the
running configuration, the services that are displayed in the System Overview will no longer
match the running configuration when ipvsadm / socat commands are used.
Using the lbcli command does not have this disadvantage and the System Overview will show
the correct VIP and RIP status.
140
Chapter 7 – Real Server Health Monitoring & Control
141
Configuring Health Checks
The appliance supports a range of health-check options to check and verify the health of Real Servers.
These range from simple ping checks to more complex negotiate options to determine that the underlying
daemon / service is running. The specific options available depend on whether services are deployed at
Layer 4 or Layer 7, details of both are covered in the following sections.
To configure health checks use the WUI option: Cluster Configuration > Layer 4 - Virtual Services > Modify
The exact options available depend on the check type selected. For the default (Connect to port), one field is
required:
As the drop-down is changed, the field list changes as shown in the Negotiate option shown below:
By default, a TCP connect health check is used for newly created layer 4 Virtual Services.
Check Types
Negotiate – Sends a request and looks for a specific response (see Negotiate Check Service below)
Connect to port – Just do a simple connect to the specified port/service & verify that it's able to accept a
connection
Ping server – Sends an ICMP echo request packet to the Real Server
External check – Use a custom file for the health check. Specify the file path in the 'Check Command' field.
No checks, always Off – All Real Servers are off
142
No checks, always On – All Real Servers are on (no checking)
5 Connects, 1 Negotiate – Do 5 connect checks and then 1 negotiate check
10 Connects, 1 Negotiate – Do 10 connect checks and then 1 negotiate check
Check Port
This can be used if the port to check is non standard, e.g., the service to check is HTTPS, but the port used
is 4443 instead of the standard 443. Leaving the field blank will cause the health-check to occur on the port
specified for the Real Server (note that in DR mode there is no Real Server port field since port re-mapping is
not possible, the port specified for the Virtual Service is used).
The custom check script, used with the external check type. The script should be placed in
/var/lib/loadbalancer.org/check, and given world read and execute permissions.
The following example illustrates how scripts can be constructed. This script uses the Linux command 'wget'
to connect to the Real Server, then uses the Linux command 'grep' to look for the text 'OK' in the file
'check.txt'. The variable 'EXIT_CODE' which indicates a pass or fail is then returned to Ldirectord to control
whether the server should be left online or removed.
#!/bin/bash
# Variables
REALIP="$3"
PORT="$2"
REQUEST="check.txt"
RESPONSE="OK"
exit $EXIT_CODE
Notes:
$2 and $3 are Ldirectord variables that are passed to the script. The following Ldirectord variables are
available and can be used as required:
$1 – the VIP address
$2 – the VIP port
$3 – the RIP address
$4 – the RIP port
If negotiate is selected as the check type, the following methods are valid:
HTTP – use HTTP as the negotiate protocol (also requires filename, path + text expected)
HTTPS – use HTTPS as the negotiate protocol (also requires filename, path + text expected)
143
HTTP Proxy – Use an HTTP proxy check
FTP – use FTP as the negotiate protocol (also requires login/password, filename in the default folder)
IMAP (IPv4 only) – use IMAP as the negotiate protocol (requires login/password)
IMAPS (IPv4 only) - use IMAPS as the negotiate protocol (requires login/password)
POP – use POP as the negotiate protocol (also requires login/password)
POPS – use POPS as the negotiate protocol (also requires login/password)
LDAP (IPv4 only) – use LDAP as the negotiate protocol (also requires username/password)
SMTP – use SMTP as the negotiate protocol
NNTP (IPv4 only) – use NNTP as the negotiate protocol
DNS – use DNS as the negotiate protocol
MySQL (IPv4 only) – use MySQL as the negotiate protocol (also requires username/password)
SIP – use SIP as the negotiate protocol (also requires username/password)
Simple TCP – Sends a request string to the server and checks the response
RADIUS (IPv4 only) – use RADIUS as the negotiate protocol (also requires username/password)
none -
Virtual Host
If the Real Server will only respond to a URL or 'virtualhost' rather than an ip address, you can specify the
virtual host to request here.
Database Name
The database to use for the MySQL Negotiate check. This is a required option if MySQL is selected under
Negotiate Check Service above.
Radius Secret
Login
The login name to use with negotiate checks where authentication is required.
Password
Request to Send
This is used with negotiate checks and specifies the request to send to the server. The use of this parameter
varies with the protocol selected in Negotiate Check Service. With protocols such as HTTP and FTP, this
should be the object to request from the server. Bare filenames will be requested from the web or FTP root.
With DNS, this should be either a name to look up in an A record, or an IP address to look up in a PTR
record. With databases, this should be an SQL SELECT query (N.B. the response expected field in not used
by the SQL health check since the data returned in not read, the answer must simply be 1 or more rows).
With LDAP, this should be the search base for the query. The load balancer will perform an (ObjectClass=*)
search relative to this base. With Simple TCP, this should be a string to send verbatim to the server.
144
Response Expected
This is the response that must be received for the negotiate check to be a success. The negotiate check
succeeds if the specified text (response) is found anywhere in the response from the web server when the file
specified in the Request to Send field is requested.
For example, a file called 'check.txt' could be placed in the default folder of the web server, this text file could
just have the text OK in the file, then when the negotiate check runs, it would look for a file called 'check.txt'
containing OK. If found, the test would succeed, if not found it would fail and no new sessions will be sent to
that server.
Additional Layer 4 health check options such as Check Interval, Failure Count etc. are available using the
WUI option: Cluster Configuration > Layer 4 – Advanced Configuration
NOTE : For more details of these options, please refer to page 98.
To configure health checks use the WUI option: Cluster Configuration > Layer 7 - Virtual Services > Modify
As with Layer 4 Services, as the drop-down is changed, the field list changes.
By default, a TCP connect health check is used for newly created layer 7 Virtual Services.
Check Types
Negotiate HTTP – Sends an HTTP request and looks for a specific response. Also set the Request to Send
& Response Expected fields.
Negotiate HTTPS – Sends an HTTPS request and looks for a specific response. Also set the Request to
Send & Response Expected fields.
145
N.B. If a negotiate HTTP or HTTPS check is used and Request to Send is configured but Response
Expected is left blank, the appliance looks for a 200 OK response from the real server.
Connect to port – Just do a simple TCP connect to the specified port/service & verify that it's able to accept
a connection
External Script – use a custom file for the health check. Specify the script path in the Check Script field.
MySQL - The check consists of sending two MySQL packets, one Client Authentication packet, and one
QUIT packet, to correctly close the MySQL session. It then parses the MySQL Handshake Initialization
packet and/or Error packet. It is a basic but useful test and does not produce error nor aborted connect on
the server. However, it does require adding an authorization in the MySQL table as follows:
use mysql; INSERT INTO user (Host,User) values ('<appliance-IP>','<username>'); flush privileges;
e.g.
use mysql; INSERT INTO user (Host,User) values ('192.168.1.1','probe'); flush privileges;
No checks, always On – All Real Servers are on (i.e. no checking)
Check Port
Specify a different port for health checks. If this field is left blank, health checks occur or the port specified for
each Real Server. If the VIP includes multiple ports (e.g. 80 & 443) by default the check occurs on the first
port listed. If a different port must be checked, it can be specified here.
Request to Send
Specify a specific file for the health check. Open the specified file and check for the response expected.
useful for checking a server sided script to check the health of the back-end application.
Response Expected
The content expected for a valid health check on the specified file. The response expected can be any valid
regular expression statement.
These settings would configure the following check directives in the HAProxy configuration file:
In this example, provided that the load balancer can access the page and see the text 'welcome', the health-
check would pass.
146
Additional Health Check Settings
Additional Layer 7 health check options such as the check interval and failure count are available using the
WUI option: Cluster Configuration > Layer 7 – Advanced Configuration
NOTE : For more details of these options, please refer to page 111.
N.B. Make sure these rule are cleared after testing & verification is complete!
Disabling Health-Checks
In some cases it may be desirable to completely disable health checking and simply assume that the real
servers are up and working correctly. The can be configured simply by setting the health-check option to No
Checks, Always On – this applies to both layer 4 and layer 7 services.
Layer 4
From v7.6 the fallback page is displayed when all Real Servers are unavailable AND when all servers are
taken offline via the WUI. The page can be hosted on the load balancer or on an external server. From
v7.6.3 it can also be configured to be a Layer 7 VIP. Set the Fallback Server option of the VIP accordingly.
Layer 7
For layer 7 VIPs the fallback page is displayed when all Real Servers are unavailable and when all servers
are taken offline via the WUI. The page can be hosted on the load balancer or on an external server. Set the
Fallback Server option of the VIP accordingly.
147
The local fallback page can be modified using the WUI option: Maintenance > Fallback Page
Notes:
• The local fallback server is an NGINX instance that by default listens on port 9081
• If a layer 4 VIP is added that listens on port 80, NGINX is automatically configured to listen on ports
9081 & 80
• You can use any valid HTML for the default page, simply copy and paste the required HTML into the
Fallback Page using the Maintenance menu
• If you are using the load balancer for your holding page and your web servers are offline then the
local NGINX server is exposed to hacking attempts, if you are concerned about this you can change
the fallback server to be one of your internal servers.
• For DR mode the fallback server must be listening on the same port as the VIP (port re-mapping is
not possible with DR mode). Also, don't forget to solve the ARP problem for the dedicated fallback
server (see page 70)
• For NAT mode don't forget to set the default gateway of the fallback server to the internal IP of the
load balancer or when you have 2 appliances in a cluster, to a floating IP.
• From v7.6.3 it's possible to set the fallback server for a layer 4 VIP to be a layer 7 VIP. This is
especially useful in WAN/DR site environments.
It also enables an external fallback server to be easily configured for Layer 4 VIPs – simply create a
fallback VIP and configure the fallback server as an associated RIP, then enable the MASQ option for
the Layer 4 VIP and set the fallback VIP as its fallback server. If all servers are down, requests will
then be routed via the Layer 7 VIP to the external server.
148
Real Server Monitoring & Control using System Overview
Clicking on each Virtual Service expands the view so that the associated Real Servers can also be seen:
Yellow – One or more Real Servers in the cluster has failed or has been taken offline using Halt or Drain
Blue – All Real Servers have been taken offline using Drain or Halt (see below)
Purple / Green – Used to indicate that a particular VIP is used for HTTP to HTTPS redirection
This information is also displayed when clicking the system overview help button:
149
Real Server Control
The System Overview also enables the state of each Real Server to be controlled. Real Servers can be put in
the following modes:
Drain – This option allows existing connections to close gracefully and prevents new connections
Halt – This options prevents new connections and drops all existing connections immediately without
waiting
The screen shot below shows that RDS2 has been put into drain mode:
To bring RDS2 back online, click the Online (drain) link. If the server had been halted rather than drained, the
the link would be displayed as Online (Halt).
NOTE : If a particular Real Server is used in multiple VIPs you can choose to apply the offline
/ online action to all relevant VIPs or only a single VIP. This simplifies taking Real Servers
offline for maintenance purposes.
NOTE : From v7.6, halting or draining all Real Servers in a cluster at layer 7 and layer 4
activates the fallback server.
150
Ordering of VIPs
The display order of configured VIPs can be changed either by clicking on the column heading, or by drag
and drop.
Sort by Column
If VIPs are ordered by a particular column, this is indicated using arrows next to the column heading as
shown below:
In this example, the VIPs are ordered alpha-numerically by Virtual Service name. To change the order, click
on the required column heading then click save. If you want to reverse the order for a particular column, click
that column heading again.
151
Drag & Drop
To re-order VIPs by drag and drop, simply click the mouse on any part of the VIP:
152
Real Server Control using the HAProxy Statistics Page
It's also possible to control layer 7 Real Servers using the HAProxy statistics page. By default this is not
enabled.
To enable this:
Click Update
With this setting, the HAProxy stats page has the ability to control the state of real servers as shown below:
Use the check-boxes to select the relevant Real Server(s), then select the required action in the drop-down,
then click Apply
153
Chapter 8 – Appliance Clustering for HA
154
Introduction
Appliances can be deployed as single units or as a clustered pair. We always recommend a clustered pair to
avoid introducing a single point of failure.
NOTE : For hardware appliances we recommend that heartbeat is configured to use both
ucast and serial when possible for added resilience. Once the serial cable is connected
between the appliances, the serial option must be enabled under: Cluster Configuration >
Heartbeat Configuration
Ping checks to a common node such as the default gateway can also be configured. If the active node loses
access to the ping node, the system will fail-over to the peer. However, if both nodes lose access, no fail-over
will occur.
Appliance specific settings that are not replicated (and therefore must be manually configured on the slave
unit) are listed below:
155
Configuring Heartbeat
To configure Heartbeat:
In the WUI of the Master, open Cluster Configuration > Heartbeat Configuration
N.B. The screen shot above shows the configuration screen for the hardware appliance, for the VA the
serial option is not available.
Slave Load Balancer Address – Specify the slave load balancer's IP address.
Serial – Enable or disable heartbeat master/slave communication over the serial port. Ucast is the default
heartbeat communication method. However, if the load balancer pair is located in close proximity, enabling
serial communication in addition to ucast is recommended. This method requires a null modem cable (one
156
cable is supplied with each appliance) to be connected between the two load balancers in the cluster. This
enables heartbeat checks to utilize the serial port. When serial communication is disabled, console access
via the serial port is activated.
UDP Unicast – Enable or disable unicast heartbeat master/slave communication. This is the default method
of heartbeat communication and uses unicast UDP between master and slave, with a destination port
specified by the UDP Port for broadcast & unicast parameter. When unicast is enabled, the load balancer
determines the correct interface and IP addresses to use based upon the configured slave IP address.
UDP Broadcast (Deprecated) – Enable or disable broadcast heartbeat master/slave communication, and
choose the interface. This option is deprecated - please migrate to Unicast. This method of heartbeat
communication uses broadcast UDP between master and slave, with a destination port specified by the UDP
Port for broadcast & unicast parameter. Care must be taken when using broadcast on multiple pairs of
load balancers in the same network. Each high-availability pair must operate on a different UDP port if they
are not to interfere with each other. If heartbeat communication over the network is required, it is
recommended that unicast be used in preference to broadcast.
UDP Port for unicast & broadcast – The UDP port number used by heartbeat for network communication
over unicast or broadcast. By default, heartbeat uses UDP port 6694 for unicast or broadcast communication.
If you have multiple load balancer pairs on the same subnet, and wish to use broadcast, you will need to set
each pair to a different UDP port.
Keepalive – Specify the number of seconds between keepalive pings. The Keepalive setting must be less
than the warntime and deadtime.
Deadtime – The number of seconds communication can fail before a fail over is performed. A very low
setting of deadtime could cause unexpected failovers.
Warntime – If communication fails for this length of time write a warning to the logs. This is useful for tuning
your deadtime without causing failovers in production.
Test IP address – Specify one or more mutually accessible IP address to test network availability. A good
ping node to specify is the IP address of a router that both the master and slave node can access. If the
active node loses access to the ping node, the system will fail-over to the peer. However, if both nodes lose
access, no fail-over will occur. Multiple IP addresses may be given, separated by spaces or commas. In this
case, if any one address is reachable the routing test will pass.
Test time-out - Specify the time-out, in seconds, for the routing test. If a response is not received from the
test address within the time-out period, the route to that host will be considered dead.
Email Alert Destination Address – Specify the Email address to send heartbeat alerts. In the event of
failover the email address specified will receive an alert.
Automatic Fail-back – Enable/disable auto-failback. When the master returns to service after a failure,
should it become active again? This option controls the cluster behavior when the master returns to service
after a failure. With Automatic Fail-back enabled, the master will automatically return to active status, taking
back the floating IP addresses from the slave. With Automatic Fail-back disabled, the slave will remain active
and will retain the floating IP addresses. Fail-over back to the master must then be controlled manually.
NOTE : Automatic Fail-back is disabled by default. Manual intervention is required to force the
repaired master to become active and the slave unit to return to passive mode. For more
details refer to page 162. Auto fail-back can be enabled if required using the WUI option:
Cluster Configuration > Heartbeat Configuration and enabling Automatic Fail-Back
157
Adding a Slave Unit after the Master has been Configured – Method 1
NOTE : This method uses this Wizard to simplify adding the slave. Load balanced services
may be disrupted momentarily.
To add a slave unit to an existing master unit to create a highly available clustered pair, follow the steps
below:
• Set the appliance's network settings using one of the methods described on page 29
• Enter the IP address of the slave appliance in the Slave IP Address field
• Once configuration is complete & stable, verify that the master displays: Master | Active | Link
• Once configuration is complete & stable, verify that the slave displays: Slave | Passive | Link
NOTE : It's highly recommended that the clustered pair is fully tested to ensure that failover to
the slave works as expected. For more details on this, please refer to page 163.
158
Adding a Slave Unit after the Master has been Configured – Method 2
NOTE : This procedure enables a slave to be added without disrupting running services.
To add a slave unit to an existing master unit to create a highly available clustered pair, follow the steps
below:
• Set the appliance's network settings using one of the methods described on page 29
• Once the network is configured, connect to the WUI using a browser: http://<IP address>:9080
• Using the WUI option: Local Configuration > Hostname & DNS change the Role to slave
• Using the WUI option: Local Configuration > System date & time set the same as the existing master
• Using the WUI option: Cluster Configuration > Heartbeat Configuration enter the slave units IP
address in the field Slave Load Balancer Address
• By default, both the VA and the hardware appliance use ucast over the network for heartbeat
communication. For a hardware clustered pair, heartbeat can also be configured to use the serial link
(in addition to ucast). If this is done, ensure a null modem cable is connected between master &
slave
• Once the required heartbeat options are set, click Modify Heartbeat Configuration to apply the
settings and replicate these settings to the slave unit
• Open the WUI option: Maintenance > Backup & Restore, select the Synchronization tab and click
Synchronize Configuration with peer – this will copy all configured load balanced services from
the master to the slave unit
• Now reload heartbeat on the slave using the WUI option: Maintenance > Restart Services and
clicking Reload Heartbeat
IMPORTANT! - Using reload rather than restart ensures services are not disrupted
• Once configuration is complete & stable, verify that the slave displays: Slave | Passive | Link
• Once configuration is complete & stable, verify that the master displays: Master | Active | Link
159
NOTE : It's highly recommended that the clustered pair is fully tested to ensure that failover to
the slave works as expected. For more details on this, please refer to page 163.
This shows that the master unit is active and that the heartbeat link is up between master & slave.
N.B. If no VIPs are defined, the status on master & slave appears as follows:
Other states:
Master | Slave Active | Passive Link this is a master unit, it's active, no slave unit has been
defined
Master | Slave Active | Passive Link this is a master unit, it's active, a slave has been defined
but the link to the slave is down. Action: check & verify
the heartbeat configuration
Master | Slave Active | Passive Link this is a slave unit, it's active (a failover from the master
has occurred) and the heartbeat link to the master has
been established
Master | Slave Active | Passive Link this is a master unit, a slave unit has been defined, but
the link is down (e.g. serial cable unplugged) so the state
cannot be determined. In this case the floating IP's may
be active on both units. Action: check & verify the
heartbeat configuration, check the serial cable (if
applicable), check heartbeat logs & if required restart
heartbeat on both units
160
Split Brain Scenarios
Split brain can occur if heartbeat on the master/slave clustered pair can no longer communicate with one
another. In this case both units will bring up the Virtual Services and the system status will look similar to the
following on both units:
When heartbeat communication is re-established, heartbeat will automatically attempt to resolve the split
brain and ensure that only one of the units is active. If heartbeat fails to do this automatically, the system
status will show as follows on both units:
The Take Over button can then be used on either master or slave to attempt to force that unit to become
active.
161
Forcing Master/Slave Failover & Failback
To force the slave to become active & the master to become passive:
Either use the Take over button in the slave's system overview:
/usr/local/sbin/hb_takeover.php all
To force the master to become active & the slave to become passive:
Either use the Take over button on the master as explained above, or run the following command on the
master:
/usr/local/sbin/hb_takeover.php all
N.B. these commands can either be run on the console, via an SSH session or via the WUI using: Local
Configuration > Execute Shell Command
162
Testing & Verifying Master/Slave Replication & Failover
NOTE : It's very important to verify that master/slave failover occurs correctly before going live. This
proves the resilience of the cluster and makes you aware of the failover/failback process.
NOTE : When testing appliance fail-over, if heartbeat is configured to use only the serial link don't
just pull the serial cable out. This will not cause a fail-over but will cause a split brain (i.e. both units
active) to occur. Testing must be done by pulling both the network and serial cable (if used) as
detailed below.
1) On the master unit verify that the system status appears as follows:
2) On the slave unit verify that the system status appears as follows:
1) Verify that the load balanced services have been replicated to the slave unit, this can be done by using
either the View Configuration or Edit Configuration menus to validate that the same Virtual & Real Servers
exist on the slave as on the master.
STEP 3 - Verify Failover to the Slave (using the Take over button)
1) On the slave unit, click the [Advanced] option in the green information box, then click the Take Over
button
163
4) Using the WUI option: View Configuration > Network Configuration verify that the floating IPs associated
with the VIPs have been brought up on the slave unit and brought down on the master
e.g. the partial screen shot below from the View Network Configuration screen on the slave unit shows the
status of eth0:
This shows the secondary IP address 192.168.111.72 (the VIP address) is up and therefore the slave has
become active as intended.
STEP 4 - Verify Fallback to the Master (using the Take over button)
1) On the master unit, click the [Advanced] option in the green information box, then click the Take Over
button
4) Also, using the WUI option: View Configuration > Network Configuration verify that the floating IPs
associated with the VIPs have been brought up on the master unit and brought down on the slave (see STEP
3 above for more details)
STEP 5 - Verify Failover to the Slave (when removing the network and serial cable from master)
1) Remove the network cable and serial cable (if applicable) from the master
164
2) verify that the slave's status has changed as follows:
This indicates that the slave is unable to communicate with the master. This means that either the master is
down, or is still up but is unreachable. In both cases the slave will go active.
3) On the slave using the WUI option: View Configuration > Network Configuration verify that the floating IPs
associated with the VIPs have been brought up (see STEP 3 above for more details)
STEP 6 - Verify normal operation resumes (when reconnecting the network & serial cable to master)
4) Also, using the WUI option: View Configuration > Network Configuration verify that the floating IPs
associated with the VIPs have been brought up on the master unit and brought down on the slave
NOTE : If the power cable on the master had been removed rather than disconnecting the
network cable and serial cable (if applicable), once the master is brought back up the slave
would remain active and the master would come back up in a passive state. The Take Over
button on the master would then need to be used to force the master to become active.
165
Chapter 9 – Application Specific Settings
166
FTP
FTP is a multi-port service in both active and passive modes:
active 20,21
passive 21,high_port
N.B. Since the VIP is auto-configured for multi-port operation, ensure the checkport is set manually as shown
in the image below (typically port 21)
Key Points:
167
FTP Recommended Persistence Settings
When using multiple FTP servers in a cluster you should be aware of the effects of a client switching to a
different server. For sites that are download only, you generally don't need any special settings on the load
balancer as the connection will usually stay on the same server for the length of the connection. You may
however wish to force persistence to something sensible like 15mins.
If you are using the FTP servers for upload it is recommended to use a single FTP server for uploads and
then replicate the data to the read only cluster for downloads (or use a clustered file system). For upload it is
especially important to use persistence.
Automatically resuming a broken download is no problem even if you switch servers in a cluster on re-
connect. This is because the FTP resume functionality is client based and does not need any server session
information.
e.g.
(one rule must be added for each FTP server in the cluster)
N.B. These rules can be added to the firewall script using the WUI option: Maintenance > Firewall Script
168
Windows 2008 Example
Create a L7 VIP with the following settings changing the name and IP address as required:
Define the FTP servers as RIPs for the VIP just created as illustrated below (these must be on a different
subnet to the VIP to enable TProxy to work correctly):
Enable TProxy using the WUI option: Cluster Configuration > Layer 7 – Advanced Configuration
Set Client Timeout and Real Server timeout to 5m (i.e. 5 minutes) using the WUI option: Cluster
Configuration > Layer 7 – Advanced Configuration
Now restart HAProxy using the WUI option: Maintenance > Restart Services
Define a SNAT rule for each FTP server using the WUI option: Maintenance > Firewall Script
e.g.
iptables -t nat -A POSTROUTING -p tcp -s 10.10.1.1 -j SNAT --to-source 192.168.2.180
iptables -t nat -A POSTROUTING -p tcp -s 10.10.1.2 -j SNAT --to-source 192.168.2.180
Configure the default gateway on each FTP server to be the load balancer. Ideally this should be a floating
IP address to allow it to move between the master & slave appliance. This can be added using the WUI
option: Cluster Configuration > Floating IPs
Active FTP clients should now be able to connect to the VIP address (192.168.2.180) and view the
directory listing successfully
169
Passive Mode
In passive mode all connections are initiated by the client. The server passes the client a port to use for the
inbound data connection. By default, FTP serves can use a wide range of ports for the inbound connection
and it's often useful to limit this range. The following section “Limiting Passive FTP ports” on page 172 covers
this for a range of OS's & FTP servers.
N.B. This method configures HAProxy to listen on port 21 (control channel) and all passive ports (data
channel)
It's sensible to use a controlled passive port range, this can be configured on the FTP server
Configure the VIP to listen on port 21 and also the passive range selected, e.g. 50000-50100
If transparency is required (for passive mode this is optional), enable TProxy using the WUI option:
Cluster Configuration > Layer 7 – Advanced Configuration
N.B. If TProxy is enabled, make sure that the RIPs (i.e. the FTP servers) are located in a different subnet
to the Virtual Server (VIP). The default gateway on each FTP server must also be set to be an IP on the
load balancer – preferably a floating IP which then allows failover to the slave unit (see page 129 for more
details on using TProxy)
Using the WUI option: Cluster Configuration > Layer 7 – Advanced Configuration increase the default
Client timeout & Real Server Timeout to 5m (i.e. 5 minutes)
To ensure the correct address is passed back to the client, on each FTP server specify the external
address to be the VIP address.
e.g.
170
Windows 2008 Example
Create a L7 VIP with the following settings changing the name, IP address & passive port range as
required:
Configure the VIP to listen on both the control port (21) and passive range (e.g. 50000-50100) as shown
Define the FTP servers as RIPs for the VIP just created leaving the port field blanks as illustrated below:
Set Client Timeout and Real Server timeout to 5m (i.e. 5 minutes) using the WUI option: Cluster
Configuration > Layer 7 – Advanced Configuration
Now restart HAProxy using the WUI option: Maintenance > Restart Services
On each FTP server using IIS Manager define the same passive port range and set the external IP
address to be the Virtual Server (VIP) address as shown in the example below:
171
N.B. The external IP address must be set to be the VIP address, this ensure that this IP address is passed
back to the client to use for the subsequent inbound connection
If TProxy is enabled, make sure the gateway of each FTP sever is set to be an IP on the load balancer
(preferably a floating IP to allow failover to the slave unit)
Now restart both IIS and the Microsoft FTP Service on each FTP server
Passive FTP clients should now be able to connect to the VIP address (192.168.2.180) and view the
directory listing successfully
172
Specify a suitable range, in the example above this is 50000-50100
IMPORTANT! - Make sure you restart IIS and the Microsoft FTP Service to apply these settings.
N.B. The range that FTP will validate is from 5001 to 65535
For Linux
For vsftpd, the following line can be added to the vsftpd.conf file to limit the port range:
For proftpd, the following line can be added to the proftpd.conf file to limit the port range:
173
Terminal Services / Remote Desktop Services
Layer 4 – IP Persistence
RDP is a TCP based service usually on port 3389. Clients will need to be sent to the same server to allow
reconnection to existing sessions. The persistence setting should be changed to suit your requirements. A
typical setting to use is persistence = 7200 (i.e. 7200s = 2 hours). This means that when a client reconnects
within this time, they will be sent to the same Terminal Server / Remote Desktop Server. If a client is idle for
more than 2 hours, then the load balancer will treat the next connection as a new connection and possibly
take them to a different server.
174
Layer 7 – RDP Cookies
The appliance also supports persistence based on RDP cookies. This method utilizes the cookie sent from
the client in the initial Connection Request PDU (mstshash). This cookie is created when the username is
entered at the first client login prompt (mstsc.exe). Note that if the username is not entered here, the cookie
is not created. An associated persistence entry is also created in a stick table on the load balancer for each
connection. If the cookie is not found, it will fallback to source IP persistence.
Again, persistence can be set as required, but as per the previous example 2 hours (120m) has been
configured in the example above.
Initial connections are distributed to the Real Servers based on the balance mode selected (defaults to
weighted least connection). Re-connecting clients utilize the stick table to return the client to the same server
first connected to. This enables clients to reconnect to their disconnected sessions.
NOTE : In certain scenarios depending on client version as well as the specific client & server
settings, the RDP cookie (mstshash) is not consistently sent. For this reason RDP cookie
persistence is not generally recommended.
NOTE : For additional information, please refer to our Deployment Guides available here:
http://www.loadbalancer.org/pdffiles/Microsoft_Terminal_Services_Deployment_Guide.pdf
http://pdfs.loadbalancer.org/Microsoft_Remote_Desktop_Services_Deployment_Guide.pdf
Other Applications
The appliance is able to support virtually any TCP or UDP based protocol which enables most applications to
be load balanced. For a list of deployment guides currently available for popular applications such as
Microsoft Exchange, IIS, Lync etc., please refer to page 11 earlier in this manual.
NOTE : Don't hesitate to contact [email protected] for advice on load balancing your
application if it's not listed.
175
Chapter 10 – Configuration Examples
176
Introduction
This section presents three example configurations that illustrate how the appliance is configured.
Configuration Overview
Configure Network Settings – a single Interface is needed, eth0 is normally used
Define the Virtual Service (VIP) – all Real (back-end) Servers are accessed via this IP address
Define the Real Servers (RIPs) – define the Real Servers that make up the cluster
Implement the required changes to the Real Servers – for DR mode, the ARP issue must be
solved
Network Settings
N.B. this step can be skipped if all network settings have already been configured
Using the WUI open Local Configuration > Network Interface Configuration
Specify the IP address & subnet mask for eth0 (normally eth0 is used for single-arm configurations
although this is not mandatory), e.g. 192.168.2.120/24
177
Using the WUI open Local Configuration > Hostname & DNS
Click Update
Using the WUI open Cluster Configuration > Layer 4 – Virtual Services and click Add a new Virtual
Service
Ensure that Forwarding Method is set to Direct Routing (N.B. this is the default)
178
Real Servers (RIPs)
Each Virtual Service requires a cluster of Real Servers (back-end servers) to forward the traffic to.
Using the WUI open Cluster Configuration > Layer 4 – Real Servers and click Add a new Real
Server next to the relevant Virtual Service
The weight defaults to 100 making the Real Server active immediately
Leave Minimum Connections & Maximum Connections set to 0 which means unrestricted
Click Update
Each Real Server must be configured to respond to its own IP address and the VIP address
Each Real Server must be configured so that it only responds to ARP requests for its own IP
address, it should not respond to ARP requests for the VIP address – only the load balancer must
respond to these requests
NOTE : Failure to correctly configure the Real Servers to handle the ARP problem is the most
common problem in DR configurations. Please refer to page 70 for more details.
179
Basic Testing & Verification
Once configured, a few quick checks can be performed to verify the setup:
Using System Overview check that the VIP & RIPs are shown as active (green)
Using a browser, navigate to the VIP address, i.e. http://192.168.2.150 to verify that you can reach
the Real Servers via the Virtual Service
Check Reports > Layer 4 Current Connections to ensure that client connections are reported in state
'ESTABLISHED'. If connections are in state 'SYN_RECV', this normally indicates that the ARP
problem on the Real Servers has not been correctly solved
180
Example 2 – Two-Arm NAT Mode (Clustered Pair)
This example covers the process of configuring two load balancers (as a clustered pair) in NAT mode.
NOTE : When using two-arm NAT mode all Real Servers should be in the same subnet as the
internal interface of the load balancer and the default gateway on each Real Server must be
set to be the load balancer.
Configuration Overview
Configure the Master's Network Settings – two Interfaces are needed, this can be either two
physical interfaces such as eth0 and eth1, or one physical interface and a secondary interface/alias
Configure the Slave's Network Settings – two Interfaces are needed, this can be either two
physical interfaces such as eth0 and eth1, or one physical interface and a secondary interface/alias
Configure the Master & Slave Heartbeat Settings – set the heartbeat comms method
Define the Virtual Service (VIP) – all Real Servers are accessed via this IP address
Define the Real Servers (RIPs) – define the Real Servers that make up the cluster
Implement the required changes to the Real Servers – in NAT mode, the Real Servers default
gateway must be set to be the load balancer
Using the WUI on the master unit, open Local Configuration > Network Interface Configuration
181
Specify the IP address & mask for eth0 – normally eth0 is configured as the internal interface
although this is not mandatory, e.g. 192.168.2.120/24
Specify the IP address & mask for eth1 – normally eth1 is configured as the external interface
although this is not mandatory, e.g. 192.168.20.120/24
N.B. For a VA make sure that the virtual NIC associated with eth1 is connected to the virtual switch.
By default only the first NIC is connected.
Using the WUI open Local Configuration > Hostname & DNS
Click Update
Using the WUI on the slave unit open Local Configuration > Network Interface Configuration
182
Specify the IP address & mask for eth0 – normally eth0 is configured as the internal interface
although this is not mandatory, e.g. 192.168.2.121/24
Specify the IP address & mask for eth1 – normally eth1 is configured as the external interface
although this is not mandatory, e.g. 192.168.20.121/24
Using the WUI open Local Configuration > Hostname & DNS
Click Update
N.B. Once update is clicked the Hostname field will automatically change to lbslave
183
Specify the default gateway, e.g. 192.168.2.254
Define the slave load balancers IP address in the Slave Load Balancer Address field, e.g.
192.168.2.121
Set the heartbeat communications method as required. The default is UDP unicast.
184
Click Modify Heartbeat Configuration, this will apply the heartbeat configuration on the local master
and copy and apply the heartbeat configuration to the slave
Now click Restart Heartbeat as prompted in the blue commit changes box – this will restart
heartbeat both locally and on the slave unit to ensure that heartbeat synchronization occurs
successfully
NOTE : If Virtual Services have already been defined, you'll need to use the WUI option:
Maintenance > Backup & Restore > Synchronization > Synchronize Configuration with
Peer to copy all configured services from master to slave. If Virtual Services are setup after
the units have been paired, they are automatically copied over to the slave.
Using the WUI open Cluster Configuration > Layer 4 – Virtual Services and click Add a new Virtual
Service
185
Ensure that Forwarding Method is set to NAT
Click Update, this will save the VIP locally and also replicate it to the slave
Open Cluster Configuration > Layer 4 – Real Servers and click Add a new Real Server
Leave Minimum Connections & Maximum Connections set to 0 which means unrestricted
Click Update, this will save the RIP locally and also replicate IT to the slave
To add a floating IP to use as the default gateway, use Cluster Configuration > Floating IP's.
Define the IP address that you'd like to use for the default gateway, then click Add Floating IP. Now configure
the default gateway on each Real Server to use this address.
186
Verify the Slave Configuration
To verify that the new VIP & RIP have been replicated correctly, open the WUI on the slave and open Cluster
Configuration > Layer 4 – Virtual Services and Cluster Configuration > Layer 4 – Real Servers and check that
your configuration appears there also. For a correctly configured pair, the VIPs and RIPs are automatically
replicated to the slave as they are defined on the master.
If not, double check that both units are configured correctly and that the IP address for the slave defined on
the master is correct. Then on the master open Maintenance > Backup & Restore and click Synchronize
Configuration with peer. This will force the VIPs & RIPs to be copied from the master to the slave, then
check again.
On the master, use System Overview to check that the VIP & RIPs are shown as active (green)
Using a browser, navigate to the VIP address, i.e. http://192.168.2.150 to verify that you can reach
the Real Servers via the Virtual Service
On the master, check Reports > Layer 4 Current Connections to ensure that client connections are
reported in state 'ESTABLISHED'. If not, double-check that you have set the default gateway on all
Real Servers to be an IP address on the load balancer.
187
Example 3 – One-Arm SNAT Mode & SSL Termination (Single Appliance)
This example uses HAProxy and STunnel at layer 7. STunnel is used to terminate SSL on the load balancer.
STunnel then passes un-encrypted HTTP traffic to the HAProxy VIP / RIP cluster.
HAProxy does not offer the raw throughput of layer 4, but is still a high performance solution that is
appropriate in many situations.
N.B. Pound can also be used for SSL termination, although STunnel is the preferred and default method
In this example it's assumed that the Real Server application has not been designed to track & share session
details between Real Servers. Therefore, cookie based persistence will be enabled on the load balancer to
ensure that clients connect to the same Real Server on each subsequent connection (within the persistence
timeout window). If persistence is not configured then new connections may get distributed to a different Real
Server which may result in failure of the application.
NOTE : Because HAProxy is a full proxy, any server in the cluster can be on any accessible
subnet including across the Internet or WAN.
NOTE : We generally recommend that SSL is terminated on the real serves rather than on the
load balancer. This ensures that the SSL load is distributed and also ensures scalability.
Configuration Overview
Define the Virtual Service (VIP) – All Real Servers are accessed via this IP address
Define the Real Servers (RIPs) – Define the Real Servers that make up the cluster
Network Settings
Using the WUI open Local Configuration > Network Interface Configuration
188
Specify the IP address & mask for eth0 – normally eth0 is used for one-arm configurations although
this is not mandatory, e.g. 192.168.2.120/24
Using the WUI open Local Configuration > DNS & Hostname
Click Update
189
Virtual Service (VIP)
Next, configure the Virtual Service. This is the IP address that is presented to clients. Any packet arriving at
the load balancer with that IP address and port number will be handled by the Real Servers associated with
the Virtual Service.
Using the WUI open Cluster Configuration > Layer 7 – Virtual Services and click Add a new Virtual
Service
Click Update
Using the WUI open Cluster Configuration > Layer 7 – Real Servers and click Add a new Real
Server
The Weight defaults to 100 making Real Servers active as soon as HAProxy is restarted
190
Click Update
Restart HAProxy to apply the new settings using the link provided in the blue box
SSL Termination
An STunnel (default) or Pound VIP can be configured on port 443 using the same IP address as the Layer 7
VIP created previously. This allows a single IP address to be used.
Open Cluster Configuration > SSL Termination and click Add a new Virtual Service
Set Virtual Service IP address to be the same as the layer 7 VIP created earlier, i.e. 192.168.2.150
Set Backend Virtual Service IP address to be the same as the layer 7 VIP created earlier, i.e.
192.168.2.150
191
Leave the other settings at their default values
Click Update
Restart STunnel to apply the new settings using the link provided in the blue box
When creating the SSL Virtual Service, by default a self-signed certificate is used. This is ideal for testing but
needs to be replaced for live deployments.
NOTE : For more detailed information on SSL termination please refer to page 114.
Using System Overview, verify that the VIP & RIP are shown as active (green)
Using a browser, navigate to the VIP address, i.e. http://192.168.2.150 to verify that you can reach
the Real Servers via the Virtual Service using HTTP
Using a browser, navigate to the STunnel SSL VIP address, i.e. https://192.168.2.150 to verify that
you can reach the Real Servers via the Virtual Service using HTTPS
192
Chapter 11 – Testing Load Balanced Services
193
Testing Load Balanced Services
For example, to test a web server based configuration, add a page to each web servers root directory e.g.
test.html and put the server name on this page for easy identification during the tests.
Use two or more clients to do the testing. Open up a web browser on each test clients and enter the URL for
the VIP e.g. http://192.168.110.150
Each client should see a different server name because of the load balancing algorithm in use i.e. they are
being load balanced across the cluster.
Why test using two clients? If you use a single client it will most likely keep on hitting the same server for
multiple requests. This is to do with the way that the load balancing algorithms are optimized.
1. Make sure that the device is active - this can be checked in the WUI. For a single appliance, the
status bar should report Master & Active as shown below:
2. Check that the VIP/floating IP is up - Using View Configuration > Network Configuration verify that the
VIP is active on the load balancer, if not check Logs > Heartbeat for errors.
The above example shows that the interface address (192.168.110.85) and the VIP address
(192.168.110.90) are both up.
3. Check that the Real Servers are up - Using System Overview make sure that none of your VIPs are
colored red. If they are, the entire cluster is down (i.e. all Real Servers). Green indicates a healthy
cluster, yellow indicates that your cluster may need attention (one or more of the Real Servers may be
down), and blue indicates all Real Server have been deliberately taken offline (by using either Halt or
Drain).
194
4. Check the connection state -
For Layer 4 DR mode VIPs check Reports > Layer 4 Current Connections to view the current traffic in
detail. Any packets with state SYN_RECV imply that the 'ARP Problem' has not been correctly solved on
the Real Servers. See page 70 for more details on solving the ARP problem.
For layer 4 NAT mode VIPs check Reports > Layer 4 Current Connections to view the current traffic in
detail. Any packets with state SYN_RECV often imply that the default gateway on the Real Servers has
not been set to be an IP address on the load balancer.
For Layer 7 VIPs check Reports > Layer 7 Status. The default credentials required are:
username: loadbalancer
password: loadbalancer
This will open a second tab in the browser and display a statistics/status report as shown in the
example below:
Remove the network cable from one of the web servers or stop the web service/process, wait a few seconds
(for the load balancer to detect the change) and then refresh the browsers on both clients. They should now
both switch to the same server (since one has been removed from the load balancing list).
Replace the network cable, wait a few seconds and then refresh the browsers again. After a few refreshes
they should again show different web servers.
The System Overview will also show the updated status as these tests are performed:
195
In this example:
'rip2' is blue, this indicates that it has been either Halted or Drained. in this example Halt has been used as
indicated by Online (Halt) being displayed. If it had been drained it would show as Online (Drain).
NOTE : From v7.6.4 the System Overview supports sorting of VIPs. This can be done by
clicking on the column headings or by drag & drop. For more details please refer to page 151.
Using Reports
The appliance includes several reports that are very useful when diagnosing issues. Please refer to the next
chapter (chapter 12) for more details on the reports available.
NOTE : When testing a clustered pair, also make sure that failover to the slave appliance and
failback to the master appliance is working correctly. For more details please refer to page
163.
196
Chapter 12 – Appliance Monitoring
197
Appliance Log Files
All logs can be accessed using the Logs option in the WUI.
Load Balancer
File: /var/log/lbadmin.log
The lbadmin log shows all changes made to the appliances configuration. This is very useful for tracking
changes made to the configuration.
Layer 4
File: /var/log/ldirectord.log
The Ldirectord log shows the output from the health checking daemon. This is useful for checking the health
your Real Servers or pinning down any configuration errors. The logging here can be quite verbose but it
clearly shows exactly what the health checking process is doing.
Layer 7
File: /var/log/haproxy.log
If activated via Cluster Configuration > Layer 7 – Advanced Configuration, this will show the contents of the
HAProxy log. This is a very detailed log of all HAProxy transactions. It's also possible to configure HAProxy to
log errors only.
Heartbeat
File: /var/log/ha.log
The heartbeat log shows the status of the heartbeat daemons. Heartbeat is used whether configured as a
single device or as a clustered pair. The log provides a detailed real-time status of heartbeat.
198
Appliance Reports
All reports can be accessed using the Reports option in the WUI.
Layer 4 Status
This report shows the current weight and number of active & inactive connections for each Real Server. If a
Real Server has failed a health check, it will not be listed. Use the Logs > Layer 4 option to view the
Ldirectord log file if expected servers are not listed.
In the example above, the details for RIP3 are not displayed because it's failing its health checks.
199
Layer 4 Traffic Rate
This report shows the current connections per second and bytes per second to each Real Server. If a Real
Server has failed a health check, it will not be listed.
In the example above, the details for RIP3 are not displayed because it's failing its health checks.
200
Layer 4 traffic Counters
This report shows the volume of traffic to each Real Server since the counters were last re-set. If a Real
Server has failed a health check, it will not be listed.
N.B. These reports are generated in real time. Direct Routing is the default load balancing method and you
will not see any stats for return packets as shown above (as they do not pass through the load balancer).
They will be seen for NAT mode since return traffic does pass back via the load balancer.
In the example above, the details for RIP3 are not displayed because it's failing its health checks.
201
Layer 4 Current Connections
The current connections report is very useful for diagnosing issues with routing or ARP related problems. In
the example below, the state is shown as SYN_RECV, this is normally a good indication that the ARP
problem has not been solved. In NAT mode, this is a good indication that the Real Servers default gateway
has not been configured to be the load balancer and therefore return traffic is not routed correctly.
N.B. The IPVS connection entries in state NONE represent the persistence related entries for client
connections, and are not actual client connections. These only appear when persistence is enabled.
Layer 7 Status
This report is provided by the stats instance of HAProxy. This web page contains the current live status of all
of the configured layer 7 HAProxy virtual and Real Servers.
N.B. This password can be changed using the 'statistics password' field available under Cluster Configuration
> Layer 7 – Advanced Configuration
202
Layer 7 Stick Table
Displays the layer 7 stick tables. For example, if a layer 7 VIP is created using RDP cookie persistence, a
stick table will be used. The related VIP is then available in the drop-down as shown below:
Notes:
Stick tables are used when either source IP persistence or RDP cookie persistence is used with layer
7 Virtual Services
Stick table entries can be removed by clicking the red 'X' in the remove column
Graphing
Graphs are automatically configured when new Virtual and Real Servers are defined.
203
When this method is used, the daily Service Connections Graph (i.e. the last 24 hrs) is displayed for the
particular VIP or RIP:
Clicking anywhere within this graph opens the complete list of graphs for the VIP / RIP in question. This is the
same as selecting the VIP/RIP in the Reports > Graphing menu options as explained below.
When selected in this way, a complete list of graphs is displayed for the VIP / RIP selected as shown below:
N.B. As VIPs & RIPs are added or removed, these are automatically added / removed from the drop-down list
204
The following graphs are displayed for each VIP or RIP selected:
205
Graphs – Appliance Specific
Appliance specific graphs are available for the following statistics:
• Network Throughout
• Load Average
• Memory Usage
• Disk Usage
The first three graphs listed above are displayed in the System Overview by default although these can be
disabled/hidden if preferred using the WUI option: Local Configuration > Graphing.
All four graphs can also be accessed using the WUI option: Reports > Graphing, then selecting the required
graph from the bottom of the list.
206
As shown above, daily graphs for Network Bandwidth, System Load Average and Memory Usage are
displayed by default in the System Overview. Clicking anywhere within these graph opens the full list of
related graphs (hourly, daily, weekly etc.). This is the same as selecting the graph in the Reports menu as
explained below.
Graph Options
A number of graph options are available.
Data collection for the various graphing categories can be enabled (default) by selecting On
Data collection for the various graphing categories can be disabled by selecting Off
Data for the various graphing categories can be removed by selecting Delete
207
Advanced Configuration Settings
Interval - Set the data collector Interval time specified in seconds. Change the interval for which data is
recorded by the collector. This is a global value and will effect all collectors. Do not change unless advised to
do so by support.
WARNING – Changing this value will reset the RRD database files and you will loose all your previous data!!
Timeout - Set the data collector timeout specified in seconds. Change the timeout for the data collector when
querying the various services. Do not change unless advised to do so by support.
Threads - Set the number of data collector process threads. Change the number of collector process threads
to use for reading stats. Do not change unless advised to do so by support.
Logging - Enable collector logging for collectd. Warning this is incredibly verbose and should only be used
for debugging purposes.
208
SNMP Reporting
By default, SNMP is disabled on the appliance. Once the SNMP settings are configured using the WUI
option: Local Configuration > SNMP Configuration , the SNMP service is set to auto start at boot.
You can test if everything works by running the command shown below:
[root@lbmaster ~]# snmpwalk -c public -v 2c -m LVS-MIB localhost 1.3.6.1.4.1.8225.4711
N.B. LVS-MIB.txt and other MIB files are available on the appliance in /usr/share/snmp/mibs/
You can also use all the usual MIB II counters and gauges such as network and CPU etc.
This indicates that all servers are passing their health-check. If the check fails, that server will be omitted
from the list as shown below:
In this case, 10.0.0.101 is now failing its health-check so has been omitted from the list.
209
SNMP for Layer 7 Based Services
The root OID for Layer 7 front-end services is: 1.3.6.1.4.1.29385.106.1.0
The root OID for Layer 7 back-end services is: 1.3.6.1.4.1.29385.106.1.1
To get the health status of each of these Real Servers use the command shown below:
In this example, IIS1 is passing its health-check and IIS2, RDP1 & RDP2 are failing their health-checks.
NOTE : Please refer to page 47 for details on configuring SNMP settings such as community
string etc.
210
Configuring Email Alerts
Email alerts can be configured for Layer 4 Virtual Services. This enables emails to be sent when Real
Servers fail there health-checks and are removed from the table, and also when they subsequently start to
pass checks and are re-added to the table. Settings can be configured globally that apply to all VIPs or
individually to each VIP.
Email alerts for Layer 7 services is not currently directly supported, but it is possible to provide this this
functionality in a number of different ways as discussed in the following blogs:
http://blog.loadbalancer.org/haproxy-email-alerts-guide/
http://blog.loadbalancer.org/3-ways-to-send-haproxy-health-check-email-alerts/
Global Alerts
Enter an appropriate email address in the Email Alert Source Address field
e.g. [email protected]
Enter an appropriate email address in the Email Alert Destination Address field
e.g. [email protected]
Click Update
N.B. Make sure that you also configure an SMTP smart host using the WUI option: Local Configuration >
Physical Advanced configuration > Smart Host. This will be auto-configured (if a DNS server has already
been defined) to the MX record of the destination address domain name.
211
VIP Level Alerts
Enter an appropriate email address in the Email Alert Source Address field
e.g. [email protected]
In the WUI, open Cluster Configuration > Layer 4 Virtual Service and click [Modify] next to the VIP to be
configured
Enter an appropriate email address in the Email Alert Destination Address field
e.g. [email protected]
Click Update
N.B. Make sure that you also configure an SMTP smart host using the WUI option: Local Configuration >
Physical Advanced configuration > Smart Host. This will be auto-configured (if a DNS server has already
been defined) to the MX record of the destination address domain name.
212
Chapter 13 – Useful Tools & Utilities
213
Useful Diagnostics Tools
Full root access to the appliance is supported which enables many useful commands to be run directly at the
console or via an SSH session. Many commands can also be run using the WUI option: Local Configuration
> Execute Shell Command. Several commonly used examples are listed below.
Netstat
Print network connections, routing tables, interface statistics, masquerade connections, and multicast
memberships. Useful to check that services are listening on the correct IP / port.
Output:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN 17784/haproxy
tcp 0 0 127.0.0.1:7778 0.0.0.0:* LISTEN 17784/haproxy
tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN 24881/snmpd
tcp 0 0 192.168.111.129:82 0.0.0.0:* LISTEN 17784/haproxy
tcp 0 0 192.168.111.128:82 0.0.0.0:* LISTEN 17784/haproxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1789/sshd
tcp 0 0 0.0.0.0:9081 0.0.0.0:* LISTEN 12863/nginx
tcp 0 0 192.168.110.232:443 0.0.0.0:* LISTEN 10199/Pound
tcp 0 0 192.168.110.230:443 0.0.0.0:* LISTEN 10113/STunnel
tcp 0 0 192.168.67.22:22 192.168.64.7:3424 ESTABLISHED 24798/sshd
tcp 0 1 192.168.67.22:49118 192.168.110.238:3389 SYN_SENT 17784/haproxy
tcp 0 1 192.168.67.22:50915 192.168.110.237:3389 SYN_SENT 17784/haproxy
tcp 0 0 :::9443 :::* LISTEN 1946/httpd
tcp 0 0 :::22 :::* LISTEN 1789/sshd
tcp 0 0 :::9080 :::* LISTEN 1946/httpd
tcp 0 0 ::ffff:192.168.67.22:9080 ::ffff:192.168.64.7:11322 ESTABLISHED 19953/httpd
etc.
Telnet
The telnet command is used to communicate with another host using the TELNET protocol. Useful for testing
that a connection to a specific port can be made. Note that this command should be run from the console or
a terminal session rather than via the WUI.
In this example, 192.168.100.10 is a Real Server, the command is useful to ensure that the load balancer is
able to successfully connect to this server on port 80.
214
Tcpdump
Tcpdump enables network traffic to be dumped to a file for analysis. Filters can also be applied if required to
select which traffic is captured. Very useful tool when diagnosing network issues. Note that this command
should be run from the console or a terminal session rather than via the WUI.
This command captures all network traffic on all interfaces using the maximum packet size of 65535 bytes
and dumps it to a file called tcpdump-file.pcap. To end the capture use CTRL+C.
Our support department may ask you to run this command and send the resulting output file to help them
diagnose certain network issues.
Ethtool
Ethtool is used for querying settings of an Ethernet device and changing them.
Output:
215
Wireshark
Wireshark is an open source application that can be used to analyze tcpdump output files. It can be
downloaded from the following location:
http://www.wireshark.org/download.html
WinSCP
WinSCP is an open source application that allows files to be uploaded/downloaded to/from the load balancer
using Windows. It can be downloaded from the following location:
http://winscp.net/eng/download.php
PuTTy
PuTTy is an open source SSH client for Windows. It can be downloaded from the following location:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Once downloaded, the client should be installed on a local machine that has access to the load balancer's
WUI and also to the load balancer via SSH (Putty, WinSCP for Windows). Our Support Engineers will
provide guidance as required.
NOTE : The download links mentioned above can be accessed using the WUI option: Support
> Useful Links
216
Chapter 14 – Backup & Restore and Disaster Recovery
217
Introduction
The appliance uses various configuration files to store all settings. Files that must be backed up to enable a
full restore are as follows:
XML configuration file – The is the main file for the appliance. All configuration details including local
settings and load balanced services settings are stored here. This file can be backed up using the WUI.
Firewall Script – If manual changes such as manual firewall marks have been made, this file is also
important. This file can be backed up using the WUI.
SSL Certificate PEM files – If SSL is terminated on the appliance, these files are also important. These files
can be backed up using the WUI.
Backup Options
Download XML configuration file – download and save the load balancer's XML configuration file
Download Firewall script – download and save load balancer's firewall script
Download SSL Certificates – download and save the load balancer's SSL certificates
Download HAProxy manual configuration – download and save the load balancer's layer 7 manual
configuration file
Make local XML backup – creates a local backup of the current XML file in /etc/loadbalancer.org/userbkup
Make local Firewall Script backup – creates a local backup of the current rc.firewall in
/etc/loadbalancer.org/userbkup
Restore Options
Upload XML file and Restore – upload an XML file and restore load balancer settings
218
Restore from the last local XML backup – Restore the last local backup created with the 'Make local XML
Backup' option
Restore Manufacturer's defaults – Restore system settings to default values
N.B. The xml restore feature is not backward compatible with previous major versions of the software, e.g.
it's not possible to restore a V7.6.4 xml file to a v7.5 appliance.
Synchronization Options
Synchronize Configuration with peer – replicate the load balanced services configuration to the slave
device.
NOTE : For details of which settings are NOT replicated from master to slave when using this
option, please refer to page 155.
Once complete, you'll need to either restart or reload heartbeat to complete the restore process as explained
in the yellow message box:
219
Disaster Recovery
Being Prepared
To be able to quickly recover your appliance when a disaster occurs it's important that you create a backup of
the XML file as well as other relevant configuration files and keep them stored in a secure location off the
load balancer. Ideally you should keep a backup of both the master and slave configurations. This can easily
be done by following the steps below:
Username: loadbalancer
Password: loadbalancer
• Select Maintenance > Backup & Restore and click Download XML configuration file
• Select an appropriate location to store the file
• Update the filename if required then save the file
If manual firewall marks have been configured or any other manual firewall script changes have been made,
backup the firewall configuration:
• Select Maintenance > Backup & Restore and click Download Firewall Script
• Select an appropriate location to store the file
• Update the filename if required then save the file
If you're terminating SSL on the load balancer, backup your certificates as well:
• Select Maintenance > Backup & Restore and click Download SSL Certificates
• Select an appropriate location to store the file
• Update the filename if required then save the file
N.B. Replace the password 'loadbalancer' with your password if it's been changed.
220
Backing up locally on the Load Balancer
To create local backups of the various configuration files, follow these steps:
Username: loadbalancer
Password: loadbalancer
• Select Maintenance > Backup & Restore and click Make local XML backup
• Select Maintenance > Backup & Restore > and click Make local Firewall Script backup
NOTE : This will only work on 64Bit hardware. From v6.x onwards, all appliances are 64Bit. If
you're running an older version, this may or may not be possible depending on the hardware.
If you are running v5.x and wish to determine whether your appliance is 64Bit and can be upgraded to the
latest version, use the following command:
This can be run from the WUI using Local Configuration > Execute Shell command, at the console or via a
terminal session.
If lm (long mode) is present in the output then the CPU is 64Bit and you can proceed. If not then your
appliance is 32Bit and you are limited to the latest v5 software.
The latest images require a standard disk (Dell hardware) or a high speed IDE DOM / SATA SSD
(Supermicro hardware) of at least 4GB in size. If you're already running v6.x or later then you will already
have this and should be able to simply re-image your current drive, disk module or SSD.
If you're upgrading from v5 you may need to upgrade the storage device and possibly the hardware.
The latest disk image can be downloaded from our website – please contact [email protected] for
more details.
Extract the image using tar under Linux or something like WinRar or 7-Zip under Windows (not the built-in
Windows extractor).
221
Preparing the USB stick
Under Linux:
dd if=/imagefilename.img of=/dev/nameofusbdisk
e.g.
dd if=/tmp/v7.5.0_r3368.img of=/dev/sda
Do not use /dev/sdax where 'x' is a number, for example – /dev/sda1 as this will install to a partition on your
usb stick. Use the whole disk /dev/sda Instead.
NOTE: Be careful using this command – make sure you specify the correct disk !
Under Windows:
For Windows, a third party image writer must be used. Several free ones are available, the example below
uses Win32 Disk Imager which can be downloaded here: http://sourceforge.net/projects/win32diskimager/
Select the image file and set the appropriate output Device as shown above
Click Write
NOTE: Be careful using this utility – make sure you specify the correct disk !
• Change the appliance's BIOS settings to boot from USB first (on some models the stick must be
plugged in to allow it to be selected as a boot device)
• Boot the appliance, after the initial boot messages the following prompt will appear:
DO YOU WISH TO CONTINUE?
222
Please enter yes or no
• The installation will take around 2-3 minutes, once complete the following message will be displayed:
Installation Finished
lbrestore <Enter>
223
Disaster Recovery After Master Failure
For a correctly configured clustered pair, if the master fails, the slave will take over automatically. To restore
the master load balancer's configuration, a backup copy of the lb_config.xml file is used. This backup should
be created using the steps on page 220.
NOTE : If a backup copy from the master is not available, It's also possible to use the XML file
from the slave instead. If there is no current backup of this, then use the WUI option:
Maintenance > Backup & Restore > Download XML Configuration file to create the file. A
couple of changes need to be made so the file represents the master unit rather than the slave
as detailed below.
Steps (with example IP addresses) to modify a copy of the slaves XML file for use on the master:
<physical>
<network>
<role>slave</role>
<hostname>lbslave</hostname>
<master>192.168.67.23</master>
<slave></slave>
To:
<physical>
<network>
<role>master</role> (i.e. change the role to master)
<hostname>lbmaster</hostname> (i.e. change the hostname to lbmaster)
<master>192.168.67.22</master> (i.e. change to the masters IP address)
<slave>192.168.67.23</slave> (i.e. add the slaves IP address)
<rip>
<eth0>10.0.0.23/16</eth0>
<eth1>192.168.67.23/18</eth1>
</rip>
To:
<rip>
<eth0>10.0.0.22/16</eth0> (i.e. change to the masters IP address)
<eth1>192.168.67.22/18</eth1> (i.e. change to the masters IP address)
</rip>
N.B. for the MAX & 10G you may also need to change eth2 & eth3 in the same way if these interfaces are
also used.
224
To Perform the Recovery
Locate your copy of lb_config.xml (either the backup from the master, or the modified slave copy)
If the SSD / HD failed and has been replaced, follow the steps on page 221 to restore the image from
USB stick
now run through the network setup wizard to configure the initial network setting
Open the WUI of the appliance (replace with your IP address) using: http://192.168.2.21:9080
At the Upload XML file & Restore: option, browse to and select your backup XML file
Click Upload and confirm this is what you want to do at the check prompt, the file will now be restored
Once complete, reload heartbeat on the master unit. This can be done using the WUI option:
Maintenance > Restart Services and clicking Reload Heartbeat
N.B. Using reload rather than restart ensures services are not disrupted
Once heartbeat has reloaded, the master and slave will be automatically re-
synchronized, the master will be passive and the slave will remain active
Verify that the master displays: Master | Passive | Link and the slave displays: Slave | Active | Link
To force the master to go active and the slave passive, during a maintenance window click the
[Advanced] option in the green Information box and click the Take over button
Verify that the master now displays: Master | Active | Link and the slave displays: Slave | Passive | Link
225
Disaster Recovery After Slave Failure
If the slave unit has failed, the master will continue to provide load balancing services as normal. However it's
important to recover the slave unit as soon as possible to restore the clustered pair to normal. To restore the
slave there are two options:
OPTION 1 – Repair the unit, then restore the slave's XML backup file
or
OPTION 2 – Repair the unit, then use the 'Synchronize Configuration with peer' option on the master to
re-synchronize the slave
If the SSD / HD failed and has been replaced, follow the steps on page 221 to restore the image from
USB stick
now run through the network setup wizard to configure the initial network setting
Open the WUI of the appliance (replace with your IP address) using: http://192.168.2.21:9080
At the Upload XML file & Restore: option, browse to and select your backup XML file
Click Upload and confirm this is what you want to do at the check prompt, the file will now be restored
Once complete, reload heartbeat on the slave unit. This can be done using the WUI option: Maintenance
> Restart Services and clicking Reload Heartbeat
N.B. Using reload rather than restart ensures services are not disrupted
226
Once heartbeat has reloaded, the master and slave will be automatically re-
synchronized, the master will remain active and the slave will be passive
Verify that the master displays: Master | Active | Link and the slave displays: Slave | Passive | Link
If the SSD / HD failed and has been replaced, follow the steps on page 221 to restore the image from
USB stick
Username: setup
Password: setup
now run through the network setup wizard to configure the initial network setting
Now follow the steps in the section 'Adding a Slave Unit after the master has been configured' on page 158.
227
Chapter 15 – Technical Support
228
Introduction
Loadbalancer.org have a team of very experienced support Engineers who are available to assist with your
load balancer deployment.
During the complimentary 90 day installation support period included with the product when no other
support package is purchased
Contact Us
This option provides details on how to contact Loadbalancer.org, how to report any issues and what
information we'll need to resolve issues as quickly as we can. As mentioned here, the Loadbalancer.org
support team can be contacted using the email address: [email protected]
Sending an email to this address creates a ticket in our help desk system and enables all technical support
staff to view the case. This is the most efficient way to contact support and guarantees that any reported
issues will be acted upon and addressed as quickly and efficiently as possible.
229
Technical Support Download
This option enables the Support Download to be created. The download is a compressed archive containing
all log files and configuration files from the appliance and should be attached to your email.
Once downloaded, attach the file to your email when contacting support, or if the file is large, it can be posted
to our upload server – please ask our support staff about this option.
230
Appendix
231
Front & Rear Panel Layouts
Eth0 Eth1
Enterprise – Dell
Eth0 Eth1
Eth2 Eth3
Eth0 Eth1
232
IPMI (Remote Management for Supermicro) Configuration
Supermicro based appliances include an IPMI module to allow remote control & management. This can
either be accessed via the dedicated IPMI Ethernet interface or via one of the standard Ethernet interfaces in
bridged mode.
To use the dedicated IPMI interface, ensure that a network cable is plugged into the interface before
powering up the appliance.
N.B. Some versions of the Enterprise & Enterprise R16 do not have a dedicated IPMI interface.
233
To set the address
234
To set the address
username: ADMIN
default password: ADMIN
235
IPMI Interface
As mentioned above IPMI can be accessed via the dedicated interface or via one of the standard on-board
NICs. This can be configured in the IPMI interface using: Configuration > Network > LAN Interface
Remote Control
To access the systems console, simple click on the Remote Console Preview image. A new window will open
with access to the console of the appliance.
N.B. You cannot SSH into the module directly. You need to connect via the IPMI's web interface, then use the
remote control option as mentioned above. This can also be accessed using the 'Remote Control' option in
the top menu. From here you can use the Launch Console option to launch a virtual Java console which will
allow you to use the device as if you stood in front of the device. Next the 'Power Control' options menu will
give you several options such as Restart Server, Power off and Power Cycle server. these options will
perform the same function as pressing the physical reset button on the unit (Reset Server) as well as being
able to perform the same functions as the physical power switch as well.
Please do remember that the IPMI power control options are completely independent of the Loadbalancer
software and that the reset option is the same as pressing reset on your PC.
236
iDRAC (Remote Management for DELL) Configuration
iDRAC enables remote management of DELL based appliances. The following models include iDRAC by
default:
• Enterprise MAX
• Enterprise 10G
• Enterprise R320
N.B. IDRAC is also available on the Enterprise as an optional extra – please contact sales for pricing.
Default IP Address
By default the following static IP address & mask is assigned to the iDRAC interface:
IP address: 192.168.0.120
Mask: 255.255.255.0
This can be changed using the iDRAC management interface accessible at boot-up.
username: root
password: calvin
237
Appliance IPv4 Address Format
When specifying IP addresses on the appliance, CIDR format is used. The following table shows the various
masks and the corresponding IPv4 IP/CIDR equivalents:
Mask IP/CIDR
255.255.255.255 a.b.c.d/32
255.255.255.254 a.b.c.d/31
255.255.255.252 a.b.c.d/30
255.255.255.248 a.b.c.d/29
255.255.255.240 a.b.c.d/28
255.255.255.224 a.b.c.d/27
255.255.255.192 a.b.c.d/26
255.255.255.128 a.b.c.d/25
255.255.255.000 a.b.c.d/24
255.255.254.000 a.b.c.d/23
255.255.252.000 a.b.c.d/22
255.255.248.000 a.b.c.d/21
255.255.240.000 a.b.c.d/20
255.255.224.000 a.b.c.d/19
255.255.192.000 a.b.c.d/18
255.255.128.000 a.b.c.d/17
255.255.000.000 a.b.c.d/16
255.254.000.000 a.b.c.d/15
255.252.000.000 a.b.c.d/14
255.248.000.000 a.b.c.d/13
255.240.000.000 a.b.c.d/12
255.224.000.000 a.b.c.d/11
255.192.000.000 a.b.c.d/10
255.128.000.000 a.b.c.d/9
255.000.000.000 a.b.c.d/8
254.000.000.000 a.b.c.d/7
252.000.000.000 a.b.c.d/6
248.000.000.000 a.b.c.d/5
240.000.000.000 a.b.c.d/4
224.000.000.000 a.b.c.d/3
192.000.000.000 a.b.c.d/2
128.000.000.000 a.b.c.d/1
238
Company Contact Information
239