Bobcares

HAproxy option Redispatch | Guide

by | Sep 11, 2023

Learn more about HAProxy option redispatch from our experts. Our HAProxy Support team is here to help you with your questions and concerns.

HAProxy option Redispatch | Guide

In today’s digital age, high availability and fault tolerance for APIs is very important.

Many of our customers have had frustrating moments when an API goes down, leaving them with error messages and disruptions.

HAproxy option Redispatch | GuideTo avoid these issues, we can use Postgres BDR. It is a multi-master database system that can reduce single points of failure.

Today, we are going to take a look at how to achieve fault tolerance while optimizing the efficiency of database caching with HAProxy.

When designing an API the goal is to minimize the risk of single points of failure. With Postgres BDR, we can establish two backend servers, each residing on a separate physical host and with its own database. This setup offers redundancy and resilience to our API infrastructure.

However, there’s a catch. It is better to keep most API requests on one server as long as it’s available. After all, it helps make database caching more efficient.

The standard way to achieve this in HAProxy is by designating one backend server as a “backup.” Here’s how it is usually configured:


Backup server

However, during software releases or updates, when we take down one server and then the other, clients may run into 503 errors. This occurs even if there is always at least one backend server available.

Identifying the Problem

Our experts investigated this issue further by creating a client-side Bash script to simulate continuous API requests:

while true; do curl http://host/api/v1/system/health; sleep 0.5; done

In fact, during rolling updates across the servers, 1 or 2 requests consistently failed with HTTP 503 errors. This was unexpected since the “option redispatch” in HAProxy should have rerouted failed requests to the other server.

It turns out that this feature doesn’t work as expected when one backend is designated as a backup.

The Solution: Removing the Backup Option

Our experts then resolved the issue by removing the backup designation:

The Solution: Removing the Backup Option

Now, the rolling updates will work smoothly without any HTTP 503 errors.

However, we do not want requests distributed evenly between both backends.

We can achieve this with a stick-table and a server1 with a higher weight:

HAproxy option redispatch

This offers successful rolling updates of the backend servers without any HTTP 503 errors.

In brief, achieving fault tolerance for our API infrastructure is key to providing a seamless user experience.

By carefully configuring HAProxy and Postgres BDR, we can minimize the risk of downtime and maintain efficient database caching.

With the stick-table and weighted load balancing technique, we have the tools to create a robust and resilient API environment that can withstand rolling updates and maintain uninterrupted service.

[Need assistance with a different issue? Our team is available 24/7.]

Conclusion

In brief, our Support Techs demonstrated how to use the HAproxy option redispatch to deal with rolling updates and maintain uninterrupted service.

PREVENT YOUR SERVER FROM CRASHING!

Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.

GET STARTED

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

Never again lose customers to poor
server speed! Let us help you.

Privacy Preference Center

Necessary

Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

PHPSESSID - Preserves user session state across page requests.

gdpr[consent_types] - Used to store user consents.

gdpr[allowed_cookies] - Used to store user allowed cookies.

PHPSESSID, gdpr[consent_types], gdpr[allowed_cookies]
PHPSESSID
WHMCSpKDlPzh2chML

Statistics

Statistic cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.

_ga - Preserves user session state across page requests.

_gat - Used by Google Analytics to throttle request rate

_gid - Registers a unique ID that is used to generate statistical data on how you use the website.

smartlookCookie - Used to collect user device and location information of the site visitors to improve the websites User Experience.

_ga, _gat, _gid
_ga, _gat, _gid
smartlookCookie
_clck, _clsk, CLID, ANONCHK, MR, MUID, SM

Marketing

Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.

IDE - Used by Google DoubleClick to register and report the website user's actions after viewing or clicking one of the advertiser's ads with the purpose of measuring the efficacy of an ad and to present targeted ads to the user.

test_cookie - Used to check if the user's browser supports cookies.

1P_JAR - Google cookie. These cookies are used to collect website statistics and track conversion rates.

NID - Registers a unique ID that identifies a returning user's device. The ID is used for serving ads that are most relevant to the user.

DV - Google ad personalisation

_reb2bgeo - The visitor's geographical location

_reb2bloaded - Whether or not the script loaded for the visitor

_reb2bref - The referring URL for the visit

_reb2bsessionID - The visitor's RB2B session ID

_reb2buid - The visitor's RB2B user ID

IDE, test_cookie, 1P_JAR, NID, DV, NID
IDE, test_cookie
1P_JAR, NID, DV
NID
hblid
_reb2bgeo, _reb2bloaded, _reb2bref, _reb2bsessionID, _reb2buid

Security

These are essential site cookies, used by the google reCAPTCHA. These cookies use an unique identifier to verify if a visitor is human or a bot.

SID, APISID, HSID, NID, PREF
SID, APISID, HSID, NID, PREF