Load Balancing with relayd

Load Balancing

OpenBSD’s base install delivers two mechanisms for load-balancing traffic:

carp(4) allows multiple hosts to share ip addresses. Load Balancing amongst a group of carp hosts is achieved through ARP balancing and IP balancing.

relayd(8) allows OpenBSD to load-balance traffic to other host servers.

Balancing network traffic between hosts should be transparent to the source and destination. The the interdepence of those servers determine the complexity required of the load balancer solution.

For example, services with no interdepence between multiple servers (such as static/image web sites, download servers, MX Proxies) can be readily scaled through adding more boxes to the service pool.

In practise we use relayd(8) load-balancing such that we can use commodity desktop machines to provide high availability for:

On host

With multiple hosts sharing IP Addresses through carp(4) these hosts can service ip traffic through:

OpenBSD Firewalls (OpenBSD 4.6 onwards) uses pfsync(4) to share state information to support stateful Load Balancing.

If all your hosts run OpenBSD, then you can get the above Load Balancing functionality through carp.

Off-host address’s

Most, picture Load Balancing using a device in front of multiple services/hosts. This ‘device’ is usually pictured as independent (separate) from the services/hosts effected by the “load balancing”. This is the Man in the Middle scenario:

High Availability - Load Balancing

relayd(8) supports ISO Layer 3 and/or Layer 7 forwarding.

Similar Open Source tools for load balancing include:

relayd(8) supports:

PFE: PF Engine

At ISO Layer 3, the Packet Filter Engine allows integration with the OpenBSD’s Packet Filter.

Layer 7, Application Level, Load Balancing

This provides:

Parent Process

Using a parent process, with ‘root’ privileges, is configured in OpenBSD with a userlevel application for making safe changes to the relay schedule.

HCE: Host Check Engine

The Host Check Engine is a methodology to verify that the target host service is functional, before routing traffic to the host.

Relay Engine