Multi-Machine Setup with Parallels
Running a multi-VM database lab with Parallels on Mac gives excellent performance — especially on Apple Silicon. This page shows complete multi-machine Vagrantfile configurations for common database lab scenarios using the Parallels provider.
Complete Lab Vagrantfile — Parallels
Ruby — Multi-Machine Parallels Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Lab: ProxySQL + MySQL Master + 2 Replicas on Parallels
PARALLELS_OPTS = {
update_guest_tools: false,
check_guest_tools: false,
optimize_power_consumption: false
}
NODES = [
{ name: "proxysql", ip: "192.168.56.10", mem: 1024, cpu: 1, fwd: [[6033, 16033], [6032, 16032]] },
{ name: "master", ip: "192.168.56.11", mem: 4096, cpu: 2, fwd: [[3306, 13306]] },
{ name: "replica1", ip: "192.168.56.12", mem: 4096, cpu: 2, fwd: [[3306, 13307]] },
{ name: "replica2", ip: "192.168.56.13", mem: 4096, cpu: 2, fwd: [[3306, 13308]] },
]
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.box_check_update = false
NODES.each do |node|
config.vm.define node[:name] do |vm|
vm.vm.hostname = node[:name]
vm.vm.network "private_network", ip: node[:ip]
node[:fwd].each do |guest_port, host_port|
vm.vm.network "forwarded_port", guest: guest_port, host: host_port
end
vm.vm.provider "parallels" do |prl|
prl.name = "DB-Lab-#{node[:name]}"
prl.memory = node[:mem]
prl.cpus = node[:cpu]
PARALLELS_OPTS.each { |k, v| prl.send("#{k}=", v) }
end
vm.vm.provision "shell",
path: "scripts/provision_#{node[:name]}.sh",
args: [node[:ip]]
end
end
end
Commands for Multi-Machine Parallels Lab
BASH — Multi-Machine Commands
# Set default provider (add to ~/.zshrc permanently)
export VAGRANT_DEFAULT_PROVIDER=parallels
# Start all VMs
vagrant up
# Start specific VM
vagrant up master
# Start in sequence (master first, then replicas)
vagrant up --no-parallel master
vagrant up --no-parallel replica1
vagrant up --no-parallel replica2
# SSH into machines
vagrant ssh master
vagrant ssh replica1
vagrant ssh proxysql
# Status of all
vagrant status
# Stop all
vagrant halt
# Destroy all
vagrant destroy --force
Snapshot Entire Lab
BASH — Lab Snapshots
# Snapshot all machines at once (save lab state)
for vm in proxysql master replica1 replica2; do
vagrant snapshot save $vm "lab-baseline"
done
# Restore all machines
for vm in proxysql master replica1 replica2; do
vagrant snapshot restore $vm "lab-baseline"
done
# List snapshots for all machines
for vm in proxysql master replica1 replica2; do
echo "=== $vm ==="
vagrant snapshot list $vm
done
Parallels Performance Tips for Multi-VM
- Start VMs in --no-parallel mode when order matters (master before replicas)
- Use linked_clone: true in Parallels provider to save disk space
- Set optimize_power_consumption: false for consistent CPU performance
- On Apple Silicon, allocate performance cores — set cpus to even numbers
- Use private_network for inter-VM communication — much faster than port forwarding
Ruby — Linked Clone
# Linked clone saves disk — each VM shares base disk
config.vm.provider "parallels" do |prl|
prl.linked_clone = true # saves ~10GB per VM
end
💡 Note: On Apple Silicon Macs running 4 VMs simultaneously, total RAM usage is roughly: VM RAM + 10% overhead per VM. For 4 VMs at 4GB each, plan for ~18GB available RAM on your Mac.