Skip to content

Managed Web Cluster

Why We Use This Architecture

Our 3-node cluster design provides high availability, horizontal scaling, and automatic failover. The Percona multi-master setup ensures a replicated database without the application needing to be aware, while GlusterFS delivers synchronized storage across all nodes. Redis provides centralized caching across all nodes, preventing cache inconsistencies that would occur with local caching per node. This centralized cache dramatically improves performance and ensures data consistency.

Critical Configuration Requirements

Every App/CMS must be configured to use the cluster resources properly. Without these configurations, your application will not benefit from the high availability and load distribution of the cluster and may have performance and/or session problems.

Redis configuration is essential for cluster functionality. Without centralized Redis caching, each node would have different cached data, leading to inconsistent user experiences, potential data corruption issues, and/or session issues.

Cluster Architecture

HAProxy Load Balancer + Redis Cache/Session Store

Service Port Purpose
HAProxy :80, :443 Load balancing and SSL termination
Redis :6379 App/CMS Cache (Customer)
Redis :6380 PHP Sessions

3-Node Cluster Configuration

Node 1 Node 2 Node 3
• Web Server (Nginx or Apache2)
• Percona MySQL
• GlusterFS
• Application Code
• Web Server (Nginx or Apache2)
• Percona MySQL
• GlusterFS
• Application Code
• Web Server (Nginx or Apache2)
• Percona MySQL
• GlusterFS
• Application Code

Note

💾 Percona Cluster: Multi-master MySQL replication - Applications connect to localhost:3306 on each node
📁 GlusterFS Storage: Synchronized uploads & media files across all nodes - Available at /data
📦 Application Code: Deploy identical code to each node (not via Gluster)

Deployment Requirements

Production Deployment Guidelines

✓ Code Deployment
Deploy application code directly to each node manually or as part of deployment process (not through GlusterFS)

✓ Shared Storage
Only use GlusterFS for uploads/media files

✓ Caching
Use Redis for shared cache rather than caching to disk

✓ Database Changes
Only need made on one of the nodes and is replicated to others automatically

App/CMS Requirements

WordPress Cluster Configuration

✓ Redis Object Cache
Configure wp-config.php with Redis host and port 6379 (Customer sets this)

✓ Session Handler
Point PHP sessions to Redis port 6380 in php.ini (Tibus set this)

✓ Database Connection
Use localhost - Percona cluster syncs across all nodes

✓ Upload Path
Ensure wp-content/uploads symlinks to the folder on /data

Resources:

Craft CMS Cluster Configuration

✓ Redis Cache
Configure cache component in config/app.php for Redis 6379 (Customer sets this)

✓ Session Handler
Point PHP sessions to Redis port 6380 in php.ini (Tibus set this)

✓ Database Config
Use localhost in config/db.php - Percona handles replication

✓ Asset Volumes
Configure volumes to use shared GlusterFS path or symlink to asset folders on /data

Resources:

ExpressionEngine Cluster Configuration

✓ Redis Driver
Set cache_driver to 'redis' in config.php with port 6379 (Customer sets this)

✓ Session Handler
Point PHP sessions to Redis port 6380 in php.ini (Tibus set this)

✓ Database Settings
Use localhost in database.php - each node has local Percona

✓ Upload Directory
Set upload_path to GlusterFS mount point or symlink to asset folders on /data

Resources:

Generic PHP/Framework Cluster Configuration

✓ Redis Cache
Configure your application/framework to use Redis on port 6379 for caching

✓ Session Handler
Point PHP sessions to Redis port 6380 in php.ini (Tibus set this)

✓ Database Connection
Use localhost:3306 for MySQL connections - Percona handles replication

✓ File Uploads
Store uploaded files on /data mount point or create symlinks to it

✓ Framework Examples

  • Laravel: Set CACHE_DRIVER=redis and REDIS_HOST in .env
  • Symfony: Configure cache pools to use Redis adapter
  • Custom PHP: Use phpredis or predis libraries for cache integration