-
Notifications
You must be signed in to change notification settings - Fork 0
Setting Up HAProxy for Oracle REST Data Services (ORDS) with the Oracle Database API for MongoDB
Matt DeMarco edited this page Nov 21, 2025
·
9 revisions
This document provides an example of configuring HAProxy as a load balancer in front of Oracle REST Data Services (ORDS) to support the Oracle Database API for MongoDB.
This configuration is designed to:
- Load-balance mongosh, MongoDB Compass, and other MongoDB drivers
- Load-balance ORDS HTTP (8080) and HTTPS (8443) endpoints
- Provide sticky sessions for MongoDB clients
- Automatically fail over to a healthy backend if one ORDS server becomes unavailable
- Provide a real-time monitoring dashboard via the HAProxy stats interface
The result is a resilient, production-ready high-availability configuration for API-driven MongoDB workloads backed by the Oracle Database API for MongoDB.
Before you begin, ensure that:
- Each ORDS server is fully running and configured with the Oracle Database API for MongoDB
- You have at least one CentOS/Oracle Linux VM for HAProxy
- SELinux is configured appropriately for HAProxy (or disabled)
- All backend servers are reachable on ports 27017, 8080, and 8443
sudo yum install -y haproxy
sudo systemctl enable haproxyValidate installation:
haproxy -vCopy the configuration below into:
/etc/haproxy/haproxy.cfg
global
log /dev/log local0
maxconn 5000
daemon
# Runtime administrative socket (for monitoring)
stats socket /var/run/haproxy.sock mode 660 level admin
stats timeout 30s
defaults
log global
mode tcp
option tcplog
timeout connect 5s
timeout client 1h
timeout server 1h
###############################################
# FRONTENDS
###############################################
# MongoDB (wiredTiger / mongosh / Compass)
frontend fe_mongo_27017
bind *:27017
mode tcp
default_backend be_mongo_27017
# HTTP (port 8080)
frontend fe_http_8080
bind *:8080
mode tcp
default_backend be_http_8080
# HTTPS TLS passthrough (port 8443)
frontend fe_https_8443
bind *:8443
mode tcp
default_backend be_https_8443
###############################################
# BACKENDS
###############################################
# MongoDB backend (with failover + stickiness)
backend be_mongo_27017
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
default-server fall 3 rise 2 on-marked-down shutdown-sessions
server s1 10.0.0.149:27017 check inter 1s
server s2 10.0.0.140:27017 check inter 1s
server s3 10.0.0.214:27017 check inter 1s
# HTTP backend (port 8080)
backend be_http_8080
mode tcp
balance roundrobin
server s1 10.0.0.149:8080 check inter 2s fall 3 rise 2
server s2 10.0.0.140:8080 check inter 2s fall 3 rise 2
server s3 10.0.0.214:8080 check inter 2s fall 3 rise 2
# HTTPS backend (port 8443)
backend be_https_8443
mode tcp
balance roundrobin
server s1 10.0.0.149:8443 check inter 2s fall 3 rise 2
server s2 10.0.0.140:8443 check inter 2s fall 3 rise 2
server s3 10.0.0.214:8443 check inter 2s fall 3 rise 2
###############################################
# HAProxy STATS + MONITORING DASHBOARD
###############################################
listen stats
bind *:8404
mode http
stats enable
stats uri /
stats refresh 5s
stats show-legends
stats auth admin:password123mongosh "mongodb://matt:xxxx@<HAProxyHost>:27017/matt?authMechanism=PLAIN&authSource=%24external&retryWrites=false&loadBalanced=true&tls=true&tlsAllowInvalidCertificates=true"This configuration provides:
- HAProxy load balancing
- Sticky sessions
- Automatic failover
- TLS passthrough
- ORDS HTTP/HTTPS balancing
- Full stats dashboard
Production-ready and compatible with:
- ORDS
- Oracle Database API for MongoDB
- mongosh
- MongoDB Compass
- MongoDB drivers
flowchart LR
subgraph Clients[Clients]
A1[mongosh]
A2[MongoDB Compass]
A3[REST API Clients<br>(curl, Postman, apps)]
end
subgraph LB[HAProxy Load Balancer<br>Ports: 27017 / 8080 / 8443]
LB1[HAProxy<br><br>
• Sticky Sessions (src)<br>
• Automatic Failover<br>
• Health Checks<br>
• Stats Dashboard :8404<br>
• TLS Passthrough]
end
subgraph Backend[ORDS / Oracle Database API for MongoDB Servers]
B1(10.0.0.149<br>mongod + ORDS)
B2(10.0.0.140<br>mongod + ORDS)
B3(10.0.0.214<br>mongod + ORDS)
end
A1 -->|mongodb://...27017| LB1
A2 -->|mongodb://...27017| LB1
A3 -->|http(s)://...8080/8443| LB1
LB1 -->|27017 MongoDB| B1
LB1 -->|27017 MongoDB| B2
LB1 -->|27017 MongoDB| B3
LB1 -->|8080 HTTP| B1
LB1 -->|8080 HTTP| B2
LB1 -->|8080 HTTP| B3
LB1 -->|8443 HTTPS| B1
LB1 -->|8443 HTTPS| B2
LB1 -->|8443 HTTPS| B3
classDef darker fill:#1a1a1a,stroke:#444,color:#fff;
class LB darker;
class Backend darker;
- MongoDB to Oracle Database API Migration Flow
- Setting Up Oracle REST Data Services (ORDS) with the Oracle Database API for MongoDB
- Enabling TLS with a Self‐Signed Certificate in ORDS for MongoDB API
- ORDS Account Management
- Setting Up HAProxy for Oracle REST Data Services (ORDS) with the Oracle Database API for MongoDB