Overview
Without synchronization, each proxy instance maintains its own maintenance state and whitelist. This means:- Enabling maintenance on Proxy A doesn’t affect Proxy B
- Whitelisting a player on Proxy A doesn’t whitelist them on Proxy B
- Players could bypass maintenance by connecting through a different proxy
What Gets Synchronized
When Redis is enabled, the following data is synchronized across all proxy instances:- Global maintenance status (enabled/disabled)
- Per-server maintenance status (which backend servers are under maintenance)
- Whitelisted players (UUID and username mappings)
Redis synchronization is only available on BungeeCord and Velocity proxy platforms. It does not apply to Spigot, Paper, or Sponge servers.
Configuration
Enable and configure Redis in yourconfig.yml:
URI Format
The Redis URI follows this structure:Connection Examples
Local Redis without authentication:Setup Instructions
Install Redis
Install Redis on a server accessible by all your proxy instances. This can be:
- The same machine as one of your proxies
- A dedicated Redis server
- A managed Redis service (Redis Cloud, AWS ElastiCache, etc.)
Configure firewall rules
Ensure your Redis port (default 6379) is only accessible from your proxy servers:
How It Works
Redis Keys
The plugin uses these Redis keys to store synchronized data:maintenance:status- Global maintenance enabled/disabled statemaintenance:servers- Set of server names currently under maintenancemaintenance:whitelist- Hash map of whitelisted player UUIDs and usernamesmaintenance:stream- Stream for real-time update notifications
Real-Time Synchronization
When you make a change on one proxy:- Command executed on Proxy A:
/maintenance on - Update saved to Redis:
maintenance:statusset totrue - Stream message published: Notifies all proxies of the change
- Other proxies receive update: Proxy B, C, D all update their local state
- Synchronization complete: All proxies now reflect the new state
Architecture Example
Synchronized Operations
Global Maintenance
Per-Server Maintenance
Whitelist Management
Timers
Troubleshooting
Connection Failed
Error:Error while trying to open Redis connection!
Solutions:
- Verify Redis is running:
redis-cli ping(should returnPONG) - Check the URI format is correct
- Ensure the password is correct
- Verify network connectivity between proxy and Redis
- Check firewall rules allow the connection
Authentication Failed
Error:NOAUTH Authentication required
Solutions:
- Add password to URI:
redis://:password@host:6379 - Verify the password matches your Redis configuration
- Check Redis
requirepasssetting in redis.conf
Synchronization Delays
Symptom: Changes take several seconds to propagate Solutions:- Check network latency between proxies and Redis
- Monitor Redis server load and memory
- Ensure Redis server has adequate resources
- Consider using a faster network or dedicated Redis instance
Inconsistent State
Symptom: Different proxies show different maintenance status Solutions:- Reload all proxies:
/maintenance reload - Verify all proxies have the same Redis URI configured
- Check Redis logs for errors
- Restart all proxy instances if issues persist
Best Practices
Security
- Always use authentication: Never run Redis without a password in production
- Use SSL/TLS: For connections over the internet, use
rediss://(Redis over SSL) - Restrict access: Configure firewall rules to only allow proxy servers
- Regular updates: Keep Redis updated to the latest stable version
Performance
- Dedicated Redis instance: For large networks, use a dedicated Redis server
- Monitor Redis: Track memory usage, connection count, and latency
- Use persistence: Enable Redis persistence (RDB or AOF) to prevent data loss
- Connection pooling: The plugin automatically manages connection pools
High Availability
- Redis Sentinel: For automatic failover, consider Redis Sentinel
- Redis Cluster: For horizontal scaling, use Redis Cluster
- Backup strategy: Regularly backup your Redis data
- Health monitoring: Monitor Redis availability and alert on failures