McDis-RCON excels at managing multiple Minecraft servers and proxy networks simultaneously. This guide covers configuration, organization, and best practices for multi-server setups.
Configuration Overview
Multiple servers are defined in md_config.yml under the Processes section:
Bot Token : "your_discord_bot_token"
Panel ID : 1234567890
Language : "en"
Backups : 3
Flask :
Allow : true
IP : "203.0.113.42"
Port : 5000
Processes :
Servers :
SMP :
start_cmd : "java -Xmx4G -jar server.jar nogui"
stop_cmd : "stop"
blacklist :
- "[debug]"
CMP :
start_cmd : "java -Xmx2G -jar server.jar nogui"
stop_cmd : "stop"
blacklist : []
MMP :
start_cmd : "java -Xmx6G -jar server.jar nogui"
stop_cmd : "stop"
blacklist : []
Networks :
Velocity :
start_cmd : "java -Xmx512M -jar velocity.jar"
stop_cmd : "end"
blacklist : []
You can define up to any number of servers and networks. Each process gets its own folder, console thread, and management interface.
Process Types
McDis-RCON supports two process types:
Servers
Typical Minecraft server instances:
Paper, Spigot, Fabric, Forge servers
Independent worlds and configurations
Each gets a separate folder: McDis/SMP/, McDis/CMP/, etc.
Networks
Proxy servers that connect multiple Minecraft servers:
Velocity, BungeeCord, Waterfall
Route players between backend servers
Gets folder: McDis/Velocity/, McDis/BungeeCord/, etc.
The distinction between βServersβ and βNetworksβ is organizational. Both are treated as processes with the same capabilities.
File Structure for Multiple Servers
When managing multiple servers, your McDis folder structure looks like:
McDis/
βββ .mdbackups/ β Backups for all processes
β βββ SMP/
β β βββ SMP 1.zip
β β βββ SMP 2.zip
β β βββ SMP 3.zip
β βββ CMP/
β βββ Velocity/
βββ .mdaddons/ β Global addons
β βββ status_tracker.py
βββ SMP/ β First server
β βββ .mdplugins/
β βββ .mdcommands/
β βββ server.jar
β βββ world/
β βββ plugins/
βββ CMP/ β Second server
β βββ .mdplugins/
β βββ .mdcommands/
β βββ server.jar
β βββ world/
β βββ plugins/
βββ MMP/ β Third server
β βββ .mdplugins/
β βββ .mdcommands/
β βββ server.jar
β βββ world/
βββ Velocity/ β Network proxy
βββ .mdplugins/
βββ .mdcommands/
βββ velocity.jar
βββ plugins/
Panel Layout
When McDis-RCON loads, it creates console threads for each process:
Panel threads:
Main panel message (controls)
Console SMP
Console CMP
Console MMP
Console Velocity
Error Reports
Console Flask
Use Discordβs thread sidebar to quickly navigate between server consoles.
Managing Individual Servers
Starting Specific Servers
# Start one server
!! start SMP
# Start multiple servers
!! start SMP
!! start CMP
!! start Velocity
# Start all servers
!! start-all
Stopping Specific Servers
# Stop one server
!! stop CMP
# Stop all servers
!! stop-all
Restarting Servers
# Restart individual server
!! restart SMP
# Restart all
!! restart-all
Common Multi-Server Patterns
Pattern 1: SMP + Creative + Minigames
Processes :
Servers :
SMP : # Survival server
start_cmd : "java -Xmx6G -jar paper.jar nogui"
stop_cmd : "stop"
blacklist : []
Creative : # Creative build server
start_cmd : "java -Xmx2G -jar paper.jar nogui"
stop_cmd : "stop"
blacklist : []
Minigames : # Minigame server
start_cmd : "java -Xmx4G -jar paper.jar nogui"
stop_cmd : "stop"
blacklist : []
Networks :
Proxy : # Velocity proxy
start_cmd : "java -Xmx512M -jar velocity.jar"
stop_cmd : "end"
blacklist : []
Startup sequence:
!! start SMP
!! start Creative
!! start Minigames
!! start Proxy # Start proxy last
Pattern 2: Modded + Vanilla
Processes :
Servers :
Vanilla :
start_cmd : "java -Xmx4G -jar server.jar nogui"
stop_cmd : "stop"
blacklist : []
Modded :
start_cmd : "java -Xmx8G @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.20.1-47.2.0/unix_args.txt nogui"
stop_cmd : "stop"
blacklist :
- "[FML]"
- "[Forge]"
Networks : {}
Pattern 3: Testing + Production
Processes :
Servers :
Production :
start_cmd : "java -Xmx6G -jar paper.jar nogui"
stop_cmd : "stop"
blacklist : []
Testing :
start_cmd : "java -Xmx2G -jar paper.jar nogui"
stop_cmd : "stop"
blacklist : []
Networks : {}
Workflow:
Test plugins on Testing server
If stable, copy to Production
Restart Production
Managing Server Dependencies
Network + Backend Servers
When using a proxy network, start backend servers first:
Start backend servers
!! start SMP
!! start CMP
!! start MMP
Wait for servers to finish loading
Monitor console threads until βDone!β message appears
Players can connect
Players connect to the proxy, which routes them to backend servers
Shutdown sequence (reverse order):
!! stop Velocity # Stop proxy first
!! stop-all # Then stop all backend servers
Resource Allocation
Memory Distribution Example
For a server with 16GB RAM:
Processes :
Servers :
SMP : # Main server - most resources
start_cmd : "java -Xmx8G -jar server.jar nogui"
Creative : # Light usage
start_cmd : "java -Xmx2G -jar server.jar nogui"
Events : # Moderate usage
start_cmd : "java -Xmx4G -jar server.jar nogui"
Networks :
Velocity : # Proxy - minimal resources
start_cmd : "java -Xmx512M -jar velocity.jar"
Total allocation:
SMP: 8GB
Creative: 2GB
Events: 4GB
Velocity: 512MB
Total: 14.5GB (leaving ~1.5GB for OS)
Donβt allocate more memory than available RAM. Leave headroom for the operating system.
Port Configuration
Each server needs unique ports:
server-port =25565
query.port =25565
rcon.port =25575
server-port =25566
query.port =25566
rcon.port =25576
server-port =25567
query.port =25567
rcon.port =25577
bind = "0.0.0.0:25565" # Players connect here
[ servers ]
smp = "127.0.0.1:25565"
cmp = "127.0.0.1:25566"
mmp = "127.0.0.1:25567"
With a proxy, only the proxy port (25565) needs to be open externally. Backend servers can use localhost.
Cross-Server Plugins
Use plugins to coordinate between servers:
Example: Global Server Status Addon
from mcdis_rcon.classes import McDisClient
import discord
import asyncio
class mdaddon :
def __init__ ( self , client : McDisClient):
self .client = client
async def on_message ( self , message : discord.Message):
if message.content == "!servers" :
status = "**Server Status:** \n "
for process in self .client.processes:
emoji = "π’" if process.is_running() else "π΄"
status += f " { emoji } { process.name } \n "
await message.channel.send(status)
Place in McDis/.mdaddons/server_status.py and reload with !!adreload.
Backup Strategies
For multiple servers:
Individual Backups
Create backups per server:
Navigate to .mdbackups/SMP/
Create backup
Repeat for other servers
Backup Rotation
With Backups: 3, each server maintains 3 backups:
.mdbackups/
βββ SMP/
β βββ SMP 1.zip (newest)
β βββ SMP 2.zip
β βββ SMP 3.zip (oldest)
βββ CMP/
β βββ CMP 1.zip
β βββ CMP 2.zip
β βββ CMP 3.zip
βββ MMP/
βββ MMP 1.zip
βββ MMP 2.zip
βββ MMP 3.zip
Scheduled Backup Workflow
# Weekly backup routine
!! stop SMP
# Create backup via File Manager
!! start SMP
!! stop CMP
# Create backup via File Manager
!! start CMP
# Repeat for other servers
Stagger backups throughout the week to minimize downtime.
Troubleshooting Multi-Server Setups
Servers won't start simultaneously
Problem: Multiple servers fail to start togetherPossible causes:
Insufficient RAM
Port conflicts
Disk I/O limitations
Solutions:
Reduce memory allocation per server
Verify unique ports in server.properties
Start servers sequentially, not all at once
Use SSD for better I/O performance
Proxy can't connect to backend servers
Problem: Velocity/BungeeCord canβt reach backend serversChecklist:
Backend servers started before proxy?
Correct ports in proxy config?
online-mode=false in backend server.properties?
Firewall blocking localhost connections?
Solution: # Stop all
!! stop-all
# Start backends first
!! start SMP
!! start CMP
# Wait for "Done!"
# Start proxy last
!! start Velocity
Process Manager shows duplicate processes
Problem: Process Manager lists servers multiple timesExplanation: This can happen if:
Servers were forcefully killed
Zombie processes remain
Solution:
Use Process Manager to terminate duplicates
Restart affected servers
Use !!kill instead of force-killing from host
Best Practices
1. Naming Conventions
Use clear, descriptive names:
# Good
SMP_Main :
Creative_Build :
Minigames_Lobby :
# Avoid
Server1 :
Server2 :
S3 :
2. Resource Monitoring
Use the Process Manager to track memory usage:
Open Tools β Processes
Check RAM usage for each server
Adjust -Xmx values if needed
3. Staggered Restarts
Avoid restarting all servers at once:
!! restart SMP
# Wait for SMP to fully restart
!! restart CMP
# Wait
!! restart MMP
4. Dedicated Plugins
Use different plugins per server type:
SMP : Economy, land claiming, jobs
Creative : WorldEdit, VoxelSniper, plots
Minigames : Custom game plugins
Proxy : Cross-server chat, lobbies
5. Blacklist Optimization
Filter unnecessary logs per server:
Modded :
blacklist :
- "[FML]"
- "[Forge]"
- "[debug]"
Vanilla :
blacklist : [] # Keep all logs
Advanced: Dynamic Server Scaling
For advanced users, use addons to dynamically start/stop servers:
class mdaddon :
async def on_message ( self , message : discord.Message):
if message.content == "!start-all-smp" :
smp_servers = [p for p in self .client.servers if "SMP" in p.name]
for server in smp_servers:
if not server.is_running():
server.start()
await asyncio.sleep( 30 ) # Wait between starts
Next Steps
Process Manager Monitor all running processes across servers
Creating Addons Build cross-server automation with addons