How to Set Up a Load Balancer on an s0.d1.small BMC Server

Introduction

The phoenixNAP Bare Metal Cloud preconfigured single CPU instance is an ideal solution for load balancing. A software load balancer does not require demanding hardware and the cheapest BMC instance is more than enough to get you started.

This tutorial explains an example setup for a load balancer on phoenixNAP's s0.d1.small BMC server instance.

Setting Up a Load Balancer on an s0.d1.small BMC Instance

Prerequisites

  • Access to the command line/terminal with sudo privileges.
  • Access to the browser with a stable internet connection.
  • A Bare Metal Cloud (BMC) account.

What is Load Balancing?

Load balancing distributes high traffic volumes across multiple servers, ensuring no single instance is overworked. The end goal of load balancing is overall processing efficiency and a better user experience.

The load balancer monitors the backend server health and ensures optimal requests and server resource handling. For example, load balancers help reroute traffic when a server can't receive a request.

S.0 BMC Instance as a Load Balancer

Software-based load balancers are easy to set up on a BMC server as a Linux process. For example, the HAproxy server utility is simple to install and configure as a load balancer on a BMC instance.

Load balancer architecture using S0 small BMC instance

The setup has the following structure:

  • The small BMC instance acts as a load balancer.
  • The three testing servers act as a server farm.

Follow the instructions to set up an example local web application with a load balancer.

Step 1: Generate SSH Keys

Generate a key pair on the machine you will use to connect to BMC via SSH. Skip this step if there is a saved key on the BMC portal you'd like to use.

1. Open the terminal (CTRL+ALT+T).

2. Generate a new SSH key:

ssh-keygen

The command starts the keygen process.

3. Follow the steps to create the key pair. If there are existing keys you want to keep saved under id_rsa, change the key name. Otherwise, press Enter to choose the default location and overwrite the existing keys.

Terminal output of ssh-keygen

Add a passphrase for additional security.

Terminal output of generated key pair

When the process completes, the output prints the key pair location and the randomart image.

4. Open the id_rsa.pub file using Vi:

sudo vi ~/.ssh/id_rsa.pub

5. Copy the file contents and exit the editor:

:q

The following step uses the id_rsa.pub contents.

Step 2: Deploy s0.d1.small BMC Instance and Connect via SSH

1. Log in to the BMC portal using your phoenixNAP Client Portal credentials.

2. Click Deploy New Server on the Servers page.

Deploy new server button location on BMC portal

3. Select the Location for the server in the first section. Choose a billing model right after.

4. Select the s0.d1.small BMC instance from the Server section.

Selecting an s0.d1.small BMC server instance.

5. Chose an operating system in the following section. We're using Ubuntu Bionic. Press Next to proceed to the Instance Details page.

Note: Typically, an Ubuntu server is available in under two minutes.

6. Enter the hostname and an optional description for the server.

7. If you generated a new key in the previous section, click Add a new Public SSH Key and paste the id_rsa.pub contents. If you have a key saved in the BMC portal, type in the saved key name and select it from the list.

8. Buy an IP allocation or assign an existing allocation. To test this guide, at least one public IP is necessary. /31 IP allocation is the minimum requirement for Linux.

9. Skip the Public Networks and Default Gateway options for now.

10. Review the details once more and click the Deploy New Server button to complete the process when you're ready.

11. Locate your BMC instance on the server list and click the name to see instance details. The server is ready when the status displays as Powered On.

Server details powered on indicator

View the assigned IPs column in the Network & IP Settings tab on the Server Details page.

Assigned IPs in the server details section.

Use a public IP address for the next step.

12. SSH into the machine by running the following command in the terminal:

ssh ubuntu@<your public IP>
ssh server connection terminal output

If the output asks to confirm the authenticity, type in yes to add the location to known hosts and connect to the BMC server.

Step 3: Install HAProxy

1. Add the HAProxy repository:

sudo add-apt-repository ppa:vbernat/haproxy-1.8
Terminal output of adding HAProxy repository

2. Press Enter when asked to add the repository.

3. After the process completes, update the packages:

sudo apt-get update

4. Lastly, install HAProxy with:

sudo apt-get install haproxy

Step 4: Create Test Web Servers

1. Create three directories that will act as servers:

mkdir server{1..3}
Server folder structure

2. Create a landing page for each server:

touch server{1..3}/index.html

3. Edit each index.html file:

sudo vi server1/index.html

4. Add the following contents:

<!DOCTYPE html>
<html>
        <title>Server 1</title>
        <body>Connected!</body>
</html>
Contents of index.html

5. Add the same contents to server2/index.html and server3/index.html. Change the title tags contents to Server 2 and Server 3 respectively.

Step 5: Configure HAProxy Load Balancer

1. Edit the default configuration for HAProxy:

sudo vi /etc/haproxy/haproxy.cfg

2. Delete everything from the file and add the following contents:

defaults
  mode http
  timeout client 10s
  timeout connect 5s
  timeout server 10s
  timeout http-request 10s

frontend myfrontend
  bind 127.0.0.1:80
  default_backend myservers

backend myservers
  balance roundrobin
  server server1 127.0.0.1:8000
  server server2 127.0.0.1:8001
  server server3 127.0.0.1:8002
HAProxy config file contents

The configuration file has three sections:

  • defaults are the shared settings defined in all the following sections. The section sets the wait times to help avoid common connection problems.
  • frontend defines the address and port where HAProxy receives requests. The default_backend line points to where the load balancer should relay the connections.
  • backend stores the server addresses and ports for multiple servers, defined in the following step. The load balancing algorithm is set to round robin.

3. Save the file and close:

:wq

4. Restart HAProxy to apply the configuration:

sudo systemctl restart haproxy

The output does not print anything to the console.

Note: Learn more about how to configure HAProxy for Load Balancing

Step 6: Run Servers and Test Load Balancer

1. Open three more terminal tabs and log into the server:

ssh ubuntu@<your public IP>

There are now four terminal tabs open.

2. In each tab, navigate to the server folders:

cd server1
cd server2
cd server3

3. Run the test server in each terminal tab on a different port:

python3 -m http.server 8000 --bind 127.0.0.1
python3 -m http.server 8001 --bind 127.0.0.1
python3 -m http.server 8002 --bind 127.0.0.1
Starting test web server using Python

4. In the fourth tab, test the connection using curl:

curl 127.0.0.1:80

Run the command two more times to confirm the load balancer works correctly.

Testing load balancer using curl command

The round robin load-balancing algorithm ensures the requests route to each server once to balance the load.

Why Use S.0 as a Load Balancer?

Configuring an S.0 BMC server as a load balancer is an inexpensive way of maximizing the speed and resource capacity of a cluster of servers.

Some benefits of using the s0.d1.small BMC server as a load balancer include:

  • Low cost. The instance is the smallest and cheapest offer, and the configuration easily handles the load balancer workload. Pay on an hourly basis, per month, or make an extended reservation depending on your use case.
  • Effective network overload handling. The general-purpose instance is commonly used for high-traffic websites and utilizes all the resources in a balanced way.
  • Increased security and high availability. The network is robust, fast, low-latency, and reliable. Additionally, each server comes with 20 Gbps DDoS protection to ensure maximum availability and security when under attack.

Conclusion

After reading this article, you know how to set up the s0.d1.small BMC instance as a load balancer on the frontline of your server farm.

This inexpensive general-purpose instance has many other use cases and can be configured to serve as a powerful firewall or sandbox environment for Dev teams.

Was this article helpful?
YesNo
Milica Dancuk
Milica Dancuk is a technical writer at phoenixNAP who is passionate about programming. Her background in Electrical Engineering and Computing combined with her teaching experience give her the ability to easily explain complex technical concepts through her content.
Next you should read
What Is Load Balancing? Definition and How It Works
June 30, 2021

Load balancing is a method for distributing network traffic across multiple servers in a pool, that way improving performance and preventing bottlenecks. This article is about...
Read more
How to Set Up Bare Metal Cloud Remote Access VPN
December 17, 2020

Set up remote access via VPN from your desktom/mobile device to a bare metal cloud server. Additionally, learn how to connect two BMC servers through VPN, as well as a BMC server and on-premise equipment.
Read more
Bare Metal Cloud Portal Quick Start Guide
March 23, 2021

Follow the sections in this Bare Metal Cloud Portal guide to learn how to navigate through the portal. This guide contains everything you need to get started using BMC servers.
Read more
Rancher BMC Integration for Kubernetes Cluster Management
July 22, 2021

Using Rancher is an easy way to streamline cluster deployment on bare metal and private/public clouds. Rancher provides...
Read more