top of page
Writer's pictureNOURA ALSHAREEF

Implementing Simple and Consistent Hashing in NGINX and HAProxy


cover image: girl developer thinking of how to implement consistent hashing in NGINX and HA

In a previous article, we explored the theoretical concepts of simple and consistent hashing and their roles and use cases in distributed systems. In this article, we will dive into the implementation of both hashing algorithms in two popular load balancing solutions: NGINX and HAProxy.


NGINX and HAProxy are popular open-source load balancing solutions that provide a range of features and flexibility. One of the key benefits of using these solutions is their support for both simple hashing and consistent hashing.



Simple Hashing Implementation

Implementing simple hashing in Nginx and HAProxy is straightforward.


In NGINX, you can use the ip_hash directive in the upstream block of your configuration file to enable simple hashing based on the client's IP address. Here's an example:

upstream app_servers {
    ip_hash;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

In this example, NGINX will use simple hashing to distribute requests to the app_servers upstream block based on the client's IP address. Requests from the same IP address will always be routed to the same server.


In HAProxy, you can use the source keyword in your backend configuration to enable simple hashing based on the client's IP address. Here's an example:

backend app_servers
    balance source
    server server1 192.168.1.10
    server server2 192.168.1.11
    server server3 192.168.1.12

Consistent Hashing Implementation

To implement consistent hashing based on client IP in Nginx, you need to use the hash and consistent directives in the upstream block of your configuration file. Here's an example:

upstream app_servers {
    hash $remote_addr consistent;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}


In HAProxy, you can use the source hash-type consistent keywords in backend configuration to enable consistent hashing based on the client's IP address. Here's an example:

backend app_servers
    balance source hash-type consistent
    server server1 192.168.1.10
    server server2 192.168.1.11
    server server3 192.168.1.12

by implementing consistent hashing based on client IP, you can ensure that requests from the same client are always routed to the same server. This can help improve cache efficiency, reduce session resets, and provide a more consistent experience for your users.


I hope you enjoyed this article


154 views0 comments

Recent Posts

See All

Comments


bottom of page