Blog

  • Episode 11: Unlocking Proxmox’s Hidden Speed

    Episode 11: Unlocking Proxmox’s Hidden Speed

    Hello and welcome back to Architecting Zero Downtime Infrastructure! It’s fantastic to have you here for episode eleven. Today, we’re diving into a topic that I find is so often overlooked but holds the key to incredible gains: performance tuning Proxmox.

    Let’s be honest, you’ve invested in some solid hardware. But are you truly getting every ounce of performance out of it? A standard Proxmox installation is a marvel of stability right out of the box. It’s designed to be a reliable workhorse for the widest possible range of hardware. Think of it like a new car straight from the factory—it runs beautifully, but it’s tuned for universal appeal, not for the specific track you’re racing on. The real power, the raw speed, and unshakeable stability that you paid for are often waiting just beneath that surface of default settings.

    Our mission today is to move beyond those defaults and unlock that hidden potential. And this isn’t just for folks running massive enterprise clusters! These principles will enhance the speed and stability of any system, from a single-node homelab to a multi-rack deployment. After all, performance isn’t just about flashy benchmark numbers; it’s a cornerstone of reliability and a critical component of any serious zero-downtime philosophy.

    So, let’s roll up our sleeves and get started!

    The Heart of the System: CPU Tuning

    We’ll begin with the very heart of your system: the CPU. When you configure a virtual machine, one of the most impactful settings you can touch is the CPU Type. By default, it’s set to something very generic for compatibility.

    My unbreakable rule for any performance-sensitive workload is to change this setting from the default to host. It’s a simple, powerful change with a direct, tangible payoff. Setting the type to host essentially passes through your physical CPU’s exact feature set to the virtual machine. This allows your applications to leverage all the modern instruction sets they were designed for, like AVX. It’s like telling your VM, “Stop pretending to be a generic processor and use the real, high-performance engine we have right here!”

    For mission-critical systems, we can go even further with CPU pinning and NUMA awareness:

    • Pinning: This is where you assign a VM’s virtual cores to specific physical cores on your host. It prevents the hypervisor’s scheduler from bouncing the workload between different cores. Why does this matter? Every time a process moves, it can lose its cached data, forcing it to fetch from much slower main memory. Pinning ensures consistency and dramatically reduces latency. It’s a must for applications like databases or real-time processing.
    • NUMA (Non-Uniform Memory Access): If you’re running a server with multiple physical CPU sockets, respecting NUMA is not just a tweak; it’s fundamental. It ensures that a VM running on Processor A uses the memory directly attached to Processor A, avoiding the much slower interconnect path to Processor B’s memory. For demanding databases, getting this right can be the difference between a system that flies and one that mysteriously crawls under load.

    Don’t Let Your Memory Float Away

    Next up, let’s talk about memory. One feature you’ll see enabled by default is memory ballooning. The idea is clever: the host can “reclaim” unused memory from a guest VM to give to another that needs it, allowing you to run more VMs on the same hardware. This is perfectly fine for development machines or less critical services.

    However, for a production database, a critical application server, or anything where memory access latency matters, my strong recommendation is to turn ballooning off. Give the VM a fixed, guaranteed slice of RAM. This prevents the host from trying to negotiate memory back from the guest right when it’s under heavy load, which can introduce unpredictable latency spikes. You trade a little bit of density for a whole lot of predictable performance.

    For a more advanced boost, I often look at enabling HugePages. Let me paint a vivid picture. Normally, the operating system manages memory in tiny 4-kilobyte chunks, like a warehouse manager tracking millions of individual small boxes. It’s a lot of overhead! HugePages allows the system to manage memory in much larger blocks—often 2 megabytes or even 1 gigabyte. It’s like switching from small boxes to massive shipping containers. The CPU has far less administrative work to do tracking memory locations, freeing it up to focus on your application’s actual work. For any workload with a large memory footprint, this is a change you will absolutely feel.

    Taming the I/O Beast: Storage Optimization

    If there’s one place where performance bottlenecks love to hide, it’s in storage I/O. For the underlying storage on a single host, I find ZFS is a fantastic choice for its incredible data integrity features and solid performance, while LVM-Thin is great for its speed and simplicity. (Ceph, of course, is the go-to for clustered environments, but that’s a whole other episode!)

    But the real tuning often happens on the virtual disk itself. A critical choice you’ll make is the cache setting. You’ll see two main options: writethrough and writeback.

    • writethrough is the safe default. It confirms a write only after the data is physically on the disk.
    • writeback is where the speed is. It confirms a write as soon as it hits the host’s super-fast RAM cache. The risk? If your host loses power before that cache is flushed to disk, you lose that data.

    My personal rule of thumb is to use writeback, but only if you have your host on a reliable battery backup (UPS). It’s a calculated risk for a massive reward in write performance. And while you’re in those settings, enable the modern io_uring option for I/O threading. It’s a genuine leap forward for asynchronous I/O and can really let your modern SSDs stretch their legs.

    Building a Multi-Lane Highway for Your Network

    Networking is an area where one simple choice can have an absolutely massive impact. When you create a VM, Proxmox has to give it a virtual network card. The default is often a fully emulated card, like an Intel e1000. It’s a marvel of compatibility—it will work with almost any guest OS, old or new. But it is slow because the host has to pretend to be a physical piece of hardware.

    For any modern guest operating system (which is likely everything you’re running), you should be using VirtIO. This is a paravirtualized driver, meaning it was designed from the ground up for virtualization. The guest OS knows it’s in a VM and uses a highly efficient, direct communication path to the host. The performance difference isn’t just a few percentage points; it’s orders of magnitude faster. This should be your non-negotiable standard.

    But here’s the pro-level trick: for any VM with multiple vCPUs, you must enable the Multi-Queue option. Without it, all network processing for that entire VM is crammed through a single virtual CPU core. A busy web server or firewall can easily overwhelm that one core, creating a completely artificial bottleneck. Enabling multi-queue allows the network workload to be distributed across several vCPUs in parallel. You’re effectively turning a single-lane country road into a multi-lane superhighway for your network traffic, preventing jams and dramatically increasing your total throughput. This change is transformative.

    The Other Half of the Equation: Guest OS Tuning

    Tuning the host is only half the battle. The performance you actually experience depends just as much on what’s happening inside the guest operating system.

    1. Install the Guest Agent and Drivers: The very first thing I do on any new VM is to ensure the QEMU guest agent and the correct VirtIO drivers are installed and running. Without these, the host and guest can’t communicate efficiently. You simply won’t get the storage or network speeds we’ve worked so hard to enable.
    2. Use noatime: This is a subtle but powerful tweak. In your guest’s filesystem settings (/etc/fstab on Linux), add the noatime mount option. By default, the OS performs a write operation every single time a file is read just to update its last-accessed timestamp. On a busy server, this can eliminate thousands of completely unnecessary I/O operations per second.
    3. Check Partition Alignment: This is a small detail that can yield a very real improvement in disk throughput. Making sure your partitions are correctly aligned with the underlying storage blocks prevents the drive from having to do extra work on every read and write. Most modern installers handle this correctly, but it’s worth verifying.

    Going Deeper: Tuning the Proxmox Host Kernel

    For those who want to wring every last drop of performance from their hardware, we can go a layer deeper and tune the Proxmox host kernel itself.

    • CPU Governor: The default governor, ondemand, saves power by scaling the CPU’s frequency up and down. This is great for a desktop, but it can introduce tiny bits of latency as the CPU ramps up. For systems where consistent, predictable speed is critical, I set the governor to performance. This pins the CPUs at their maximum frequency, ready to go at a moment’s notice.
    • I/O Scheduler: With today’s lightning-fast NVMe SSDs, the traditional I/O schedulers can sometimes become a bottleneck themselves. What you’ll often find works best is to set the I/O scheduler to none or mq-deadline. This essentially gets out of the way and lets the high-performance drive’s own internal logic manage its I/O queue much more efficiently.

    KVM vs. LXC: The Performance Trade-Off

    No performance discussion is complete without touching on the choice between a full KVM virtual machine and a lightweight LXC container. The answer from a pure performance perspective is clear: containers are significantly faster.

    Let me break it down. A KVM machine is like building a complete, separate house. It has its own foundation, its own walls, its own roof (the OS kernel). This creates a strong security boundary, but all that structure comes with overhead. An LXC container, on the other hand, is like a well-insulated apartment in a larger building. It shares the building’s foundation and structure (the host’s kernel) but has its own secure living space.

    Because it shares the host kernel, a container’s performance is incredibly close to running on bare metal. For applications like web servers, databases, or microservices where I need maximum efficiency, containers are my go-to choice. But when iron-clad isolation is the top priority—for multi-tenant services or running untrusted code—the security boundary of a full VM is the only correct answer. It’s a classic trade-off: near-bare-metal speed versus hardened isolation.

    You Can’t Improve What You Don’t Measure

    All of these changes are powerful, but they mean very little if you can’t prove their impact. This is where my most important rule comes into play: adopt a scientific approach.

    Before you change a single setting, establish a baseline. For storage, my go-to tool is fio, which can simulate real-world I/O patterns. For networking, iperf3 is perfect for measuring raw throughput.

    My process is rigid, but it works:

    1. Run the benchmark and document the baseline numbers.
    2. Make one single change. Just one.
    3. Run the exact same benchmark again.
    4. Document the new result.

    This discipline is what separates professional tuning from just guessing. It turns your assumptions into validated, quantifiable gains and ensures you’re actually making things better, not worse.

    Bringing It All Together

    Wow, we’ve covered a lot of ground today! We’ve walked through the full stack, from the host’s CPU and memory, down into the nitty-gritty of storage and networking, and finally into the guest OS itself.

    What I truly hope you take away from this is that exceptional performance is never an accident. It’s the direct result of active, methodical tuning. It’s this deliberate process that transforms a standard setup into a truly high-performance, resilient system—one that you can count on when it matters most.

    I hope you can join me next time for Episode 12, where we’ll be tackling a fascinating topic: “The Hidden Costs of ‘Free’: Calculating TCO for Open-Source Hypervisors”. We’ll dig into whether “free” software is truly free once you account for support, expertise, and operational effort. It’s a critical calculation for any business.

    As always, thank you for your time and attention today. If you have any questions or your own favorite tuning tips, please share them in the comments below! I’d love to hear from you.

  • Episode 10: The Other Half of High Availability

    Episode 10: The Other Half of High Availability

    Hello and welcome back! It’s great to have you here for another episode of Architecting Zero Downtime.

    Today, we’re diving deep into a topic that is absolutely critical but, I find, is often misunderstood:

    Proxmox Storage Architecture

    Specifically, we’re going to talk about why setting up compute high availability (HA) is only winning half the battle.

    This is a big one, because getting it wrong doesn’t just reduce your resilience—it can create a false sense of security that’s arguably more dangerous than having no HA at all.

    Let me paint a vivid picture, one I’ve seen play out more times than I can count.

    A talented team builds a beautiful multi-node Proxmox cluster. They meticulously configure High Availability, run all the failover tests, and watch with satisfaction as a simulated node failure causes virtual machines to restart on another host in mere seconds.

    It’s magic.

    They feel secure.

    They feel resilient.

    They feel… done.

    The problem is that they’ve often just shifted their single point of failure—not eliminated it.

    By connecting this brilliant, redundant compute cluster to a single, non-redundant NAS or SAN, they’ve created an Achilles’ heel for their entire operation.

    If that one storage box fails, the whole cluster goes dark.

    This episode is about closing that gap.

    We’re going to explore why storage is the other, equally critical, half of the high availability equation.


    What Proxmox HA Actually Does (And What It Doesn’t)

    First, let’s get crystal clear on what standard Proxmox HA actually does.

    In a properly configured cluster, the system is like a vigilant flight controller, constantly monitoring the health of your virtual machines.

    If one of the physical host servers suddenly fails—perhaps a power supply dies or a motherboard fails—the HA Manager detects this immediately.

    It then automatically restarts those affected virtual machines on another healthy node in the cluster.

    I like the analogy of having a hot standby pilot for an airplane.

    If the primary pilot is incapacitated, the co-pilot seamlessly takes control.

    The plane doesn’t fall out of the sky.

    The journey continues.

    But here’s the crucial distinction.

    This process only protects the compute aspect of the VM.

    It moves the running brain—the CPU and RAM state—to new hardware.

    This is only possible if the new host can still access the VM’s virtual disk.

    The storage—the VM’s long-term memory—must already be available from the new location.

    This entire mechanism relies on mature, battle-tested technologies such as:

    • Corosync for cluster communication
    • Fencing to safely isolate failed nodes

    It’s a fantastic system.

    But it has one fundamental dependency:

    Accessible shared storage.


    The Classic Trap: The Single Box of Failure

    This brings us to the design pattern responsible for many completely avoidable outages.

    The classic mistake.

    A team builds a beautiful Proxmox cluster…

    …and then connects every node via NFS or iSCSI to a single standalone NAS or SAN.

    At first glance this seems perfectly logical.

    Centralised storage is easy to manage.

    Unfortunately, this is where everything breaks.

    If that single storage appliance fails:

    • Controller failure
    • Power supply failure
    • Firmware issue
    • Hardware fault

    Every virtual disk immediately becomes unavailable to every node.

    Proxmox HA becomes completely powerless.

    It knows the VMs need restarting.

    But their disks no longer exist.

    It has the brain.

    The body has disappeared.

    What was supposed to be a high availability event becomes a complete cluster-wide outage—all because of one overlooked storage dependency.


    The Local Storage Dead End

    You might now be thinking:

    “I’ll just use local storage on each Proxmox node.”

    And you’re right.

    For pure I/O performance, local storage such as:

    • LVM
    • ZFS

    can be fantastic.

    Unfortunately, it creates another fatal problem for High Availability.

    I often describe this as putting your data in jail.

    If a motherboard dies…

    If a CPU fails…

    The VM disk is physically trapped inside that failed server.

    The remaining cluster cannot access it.

    Proxmox HA is willing to restart the workload.

    But the disk itself cannot move.

    At this point you’ve transitioned from:

    High Availability

    to

    Disaster Recovery.

    Your only option becomes restoring from backups.

    Which completely defeats the purpose of designing a zero-downtime platform.


    The Two Paths to True Storage Resilience

    So where do we go from here?

    The answer is to stop thinking of High Availability as a feature…

    …and instead design resilience into the architecture itself.

    There are two primary approaches.

    1. Resilient Shared Storage

    Storage remains centralised…

    …but the storage platform itself becomes highly available.

    The storage is no longer a single point of failure.

    2. Distributed Storage

    This is the Hyper-Converged Infrastructure (HCI) approach.

    Using software such as Ceph, the local disks inside every Proxmox node become one large distributed storage system.

    Storage is no longer centralised.

    Instead, it becomes self-healing and distributed across the cluster.

    These are the two architectural roads available.

    Either:

    • Build an incredibly resilient storage platform.

    or

    • Remove the central storage platform entirely.

    Path One: Fortifying the Citadel with Resilient Shared Storage

    Instead of thinking about a storage appliance…

    Think about a storage system.

    Enterprise storage platforms eliminate every single point of failure.

    Key design features include:

    Dual Controllers

    If one controller fails or is upgraded…

    The second immediately takes over.

    Redundant Power Supplies

    Each controller has independent power.

    Ideally supplied by separate PDUs and electrical circuits.

    Redundant Connectivity

    For iSCSI:

    Always implement Multipath I/O (MPIO).

    For NFS:

    Use LACP link aggregation across multiple switches.

    This ensures that one failed cable or switch never disconnects storage.

    The good news is that this level of resilience is no longer limited to expensive enterprise hardware.

    Solutions such as TrueNAS High Availability can provide enterprise-grade resilience on commodity servers.

    The principle remains the same.

    Your storage appliance is no longer one box.

    It’s effectively its own highly available cluster.


    Path Two: The Elegance of Distributed Storage with Ceph

    Personally, this is the architecture I find most elegant within a Proxmox environment.

    Rather than building a separate storage cluster…

    Ceph integrates storage directly into the compute cluster.

    It pools the local disks from every node into one distributed storage fabric.

    One that is:

    • Intelligent
    • Distributed
    • Self-healing

    When data is written to Ceph…

    It doesn’t create one copy.

    It typically creates three replicas.

    Each replica is stored on different disks in different physical hosts.

    If an entire server fails…

    Ceph doesn’t panic.

    It simply recognises that replicas have disappeared…

    …and automatically rebuilds them elsewhere.

    The storage heals itself.

    This is what enables:

    • Live Migration
    • True High Availability
    • Continuous storage availability

    for every node.


    Choosing the Right Architecture

    So which approach should you choose?

    It depends on your:

    • Budget
    • Operational model
    • Team expertise

    My general rule of thumb is:

    Dedicated HA SAN

    Advantages

    • Clear separation between compute and storage
    • Familiar enterprise operational model
    • Storage specialists manage storage

    Disadvantages

    • Higher capital cost
    • Potential vendor lock-in

    Ceph Hyper-Converged Infrastructure

    Advantages

    • Excellent scalability
    • Lower hardware costs
    • Compute and storage scale together
    • No dedicated storage hardware

    Disadvantages

    • More operational complexity
    • Requires an excellent network
    • Overall cluster health directly affects storage performance

    There isn’t one universally correct answer.

    Only the architecture that best fits your organisation.


    My Non-Negotiable Rule: The Network

    Regardless of which storage architecture you choose…

    Everything depends on the network.

    This is my one non-negotiable rule.

    A serious Proxmox deployment should always include:

    • Dedicated storage network
    • Redundant switching
    • Minimum 10 Gigabit Ethernet
    • Complete separation from management and VM traffic

    Building high availability on an underpowered storage network is like constructing a skyscraper on sand.

    Eventually…

    It will fail.


    Trust, But Verify

    Building the solution is only half the job.

    The other half is proving that it works.

    The only way to truly trust a High Availability platform is through deliberate failure testing.

    Pull power cables.

    Disconnect storage links.

    Simulate failed switches.

    Watch what happens.

    Verify that the environment behaves exactly as designed.

    Because an untested HA platform isn’t really High Availability.

    It’s simply a theory.


    Final Thoughts

    The key lesson from today’s discussion is simple.

    Proxmox High Availability provides compute resilience.

    It does not provide complete infrastructure resilience.

    True zero downtime only exists when storage is designed with the same level of resilience as the compute layer itself.

    Whether that means:

    • A dedicated HA SAN
    • Hyper-Converged Ceph

    the principle never changes.

    Your storage must be every bit as resilient as the workloads it supports.


    Next Episode

    In Episode 11 we’ll move from resilience to speed.

    Join me for:

    Performance Tuning Proxmox: Getting the Most from Your Hardware

    We’ll explore how to unlock the full performance potential of your cluster—not just keep it online.

    Until then…

    Happy architecting!

    And, as always, I’d love to hear your questions and experiences in the comments below.

  • Episode 9: Proxmox VE & PBS – The Resilience Dream Team

    Episode 9: Proxmox VE & PBS – The Resilience Dream Team

    Hello and welcome back to Architecting Zero Downtime Infrastructure!

    Today we’re tackling one of those topics that generates endless forum debates and slightly heated Reddit threads: Proxmox VE versus Proxmox Backup Server.

    Let me be upfront with you — that “versus” is completely wrong. It’s like asking whether your heart is better than your lungs. They don’t compete. They complete each other.

    After years of designing resilient infrastructure, I’ve come to see the VE + PBS combination as one of the most elegant symbiotic relationships in modern IT. So instead of choosing sides, let’s explore how these two tools were designed to work together — and why understanding that partnership is the key to sleeping better at night.

    The Fundamental Misunderstanding

    The biggest mistake I see (and I see it constantly) is treating Proxmox Backup Server as just another feature of Proxmox VE. It’s not. It’s a specialized, purpose-built platform with its own mission.

    Proxmox VE is your runtime environment. Its job is to keep your workloads running efficiently, day in and day out.
    Proxmox Backup Server (PBS) is your dedicated data protection and disaster recovery system. Its entire existence is about making sure you can recover — cleanly, quickly, and confidently.

    One keeps the lights on. The other makes sure the lights can be turned back on if everything goes dark.

    This isn’t philosophical nitpicking. It’s architectural truth.

    Proxmox VE: The High-Performance Engine

    Let’s start with what most of us already love.

    Proxmox VE is a complete open-source virtualization platform built on Debian. It gives you rock-solid KVM virtual machines and lightning-fast LXC containers. But it’s so much more than a hypervisor.

    It includes built-in clustering for high availability, software-defined storage, networking, and an incredibly polished web interface that somehow never feels overwhelming. When I stand up a new Proxmox VE cluster, I know I’m getting an entire management fabric — not just a hypervisor.

    Its mission is clear: run production workloads with maximum uptime.

    That’s where its high availability features shine. If a node dies, the cluster can restart VMs on healthy nodes. Compute resilience? Handled.

    But here’s what HA can’t protect you from — and this is where the story gets interesting.

    Proxmox Backup Server: The Master Mechanic & Insurance Policy

    I love using this analogy because it makes the relationship instantly clear.

    Imagine your Proxmox VE cluster is the high-performance engine in a sports car. It’s all about speed, efficiency, and keeping you moving forward. It’s fantastic at what it does.

    Now picture Proxmox Backup Server as the comprehensive insurance policy and the master mechanic’s repair shop rolled into one. It doesn’t make the car go faster. But when you crash — especially when the crash involves corrupted data, ransomware, or that “one bad update” that silently destroys your database — PBS is the only thing that can reliably put you back on the road with minimal scarring.

    Proxmox VE’s HA handles compute failure.
    PBS handles data integrity and recoverability.

    They solve two completely different problems. And both problems are mission-critical.

    The Magic Under PBS’s Hood

    What makes PBS genuinely special is how intelligently it handles data.

    The first backup is a full copy (as you’d expect). After that, everything becomes incremental — but with a brilliant twist. PBS uses block-level deduplication across your entire backup repository.

    Every block of data gets a unique fingerprint. If PBS has seen that exact block before — from any VM, any container, any day — it doesn’t store it again. It just adds a pointer. The storage savings are massive, and the network efficiency is even better.

    This is dramatically different from simple snapshots inside Proxmox VE. Snapshots are useful, don’t get me wrong. But they aren’t a backup strategy. They’re a safety net with limitations.

    PBS is the real deal.

    The Beautiful Operational Symbiosis

    Here’s what makes me genuinely excited about this combination: it’s simple.

    You add your PBS instance as a storage target directly in the Proxmox VE web interface you already know and love. That’s it. From that moment on, everything — scheduling, retention policies, browsing restore points — happens in the familiar GUI.

    No complex scripts. No new dashboards to learn. Just clean, elegant integration.

    And then there are the features that make you look like a wizard in front of stakeholders:

    • Live Restore: Start the VM while the data is still streaming back from the backup server in the background. Your Recovery Time Objective shrinks from hours to minutes.
    • Automatic Verification: PBS periodically reads back your backup data and verifies integrity. It’s quietly protecting you from bit rot while you sleep.
    • Granular Recovery: Need to restore one deleted file from a 4TB file server? Just mount the backup and grab it. No full VM restore required.

    I’ve used that last feature more times than I care to admit. The “oops, the intern deleted the entire customer database” panic turns into a five-minute task. It’s borderline therapeutic.

    When the Real World Tests Your Architecture

    Let me paint you a painfully common scenario.

    You have a critical database VM. A routine update gets applied at 2 AM. Unknown to everyone, it contains a bug that begins silently corrupting data. The VM stays up. The cluster looks perfectly healthy. Proxmox VE’s High Availability features are working exactly as designed.

    But the data is broken.

    This is the moment where PBS proves its worth. From the Proxmox VE interface, you navigate to the VM’s backup tab, pick the restore point from before the bad update, and restore. Minutes later, you’re back to known-good data.

    No drama. No heroic all-nighter. Just a documented incident instead of a potential business catastrophe.

    That’s the difference between hoping for the best and knowing you’re protected.

    The Cost Conversation (Yes, It’s Refreshing)

    Both platforms are completely open source. The entire feature set is available for free.

    However, in every production environment I build, I always include the optional subscription. Not because I need extra features — but because I want the stable enterprise repositories and, most importantly, professional support from the team that actually builds the software.

    It’s one of the best value propositions in infrastructure today. You get enterprise-class resilience without the enterprise-class price tag.

    The Big Takeaway

    Here’s my unbreakable rule:

    Proxmox VE runs your infrastructure. Proxmox Backup Server protects it.

    True resilience is a two-part equation. High availability at the compute layer is necessary but incomplete. You also need an independent, purpose-built data protection strategy.

    When you combine both, something magical happens. You stop being reactive and start being confident.

    And in our world, confidence is the ultimate luxury.


    In our next episode (Episode 10), we’re going to dive into the foundation that makes all of this possible: Proxmox Storage Architecture – Why Compute HA Isn’t Enough. We’ll explore ZFS, Ceph, and why your storage design is actually the most critical decision in your entire resilience strategy.

    You won’t want to miss it.

    In the meantime, I’d love to hear from you. Have you already paired Proxmox VE with PBS? Are you still on the fence about adding a dedicated backup server? Drop your thoughts in the comments — I read every single one.

    Until next time, stay resilient.

    — Your friendly infrastructure mentor

  • Episode 8: Turn Your Proxmox Host Into a Fortress

    Episode 8: Turn Your Proxmox Host Into a Fortress

    Hello and welcome back, friend!

    Today in our Architecting Zero Downtime Infrastructure series, we’re tackling something that makes a lot of smart people suddenly get quiet: security.

    I see it all the time. Someone spins up a shiny new Proxmox host, starts deploying VMs, and treats security like an optional side quest. But here’s the truth I want you to tattoo on your brain: a compromised system is a downed system. There’s no such thing as “high availability” when someone else is wearing your root account like a winter coat.

    So consider today’s episode the non-negotiable foundation work. We’re going to take that fresh Proxmox installation and transform it, step by step, from “wide open Linux server” into a hardened platform you can actually build a business on.

    Let’s get to work.

    Step 1: Kill the Root Login (Your First Smart Move)

    Every attacker on the planet knows the username “root” exists. That’s like putting a giant welcome mat at your front door that says “Key is under the mat.”

    My very first action on any new Proxmox node is to create a dedicated administrative user and add it to the sudo group. Once I’ve tested that account, I immediately disable direct root SSH access.

    You do this by editing /etc/ssh/sshd_config, finding the line PermitRootLogin, and changing it to:

    PermitRootLogin no
    

    One tiny change. Massive impact. Now any attacker needs to guess both a username and a password. We’ve just removed their head start.

    Step 2: Isolate Your Management Network (The Front Door)

    I like to say the management interface is the front door to your entire virtualization kingdom. In a perfect world, that door sits on its own physical network card, connected to a completely separate switch that nothing else touches.

    Not always possible? Fine. But at minimum, that management traffic needs to live on its own dedicated VLAN. No exceptions.

    This separation is pure gold. It stops lateral movement cold. If someone compromises a VM, they shouldn’t automatically get a clear path to your hypervisor. Think of it as building a moat.

    Step 3: Wake Up the Proxmox Firewall (Most People Sleep on This)

    One of my favorite things about Proxmox is that it ships with a perfectly good firewall that most people… completely ignore.

    The firewall works at three levels: Datacenter, Host, and VM. For now, we’re focusing on the Host level because we want to protect the hypervisor itself.

    Here’s my process:

    1. Enable the firewall for the host
    2. Set the default input policy to DROP (this is our “deny everything unless I specifically allow it” stance)
    3. Create two allow rules: one for the web interface (port 8006) and one for SSH (port 22)
    4. Critically, restrict the source to your management workstation’s IP (or a defined IP set)

    Suddenly your management ports become invisible to the rest of the world. I love this. It’s simple, fast, and ridiculously effective.

    Step 4: Enable Two-Factor Authentication (The Game Changer)

    If I could force every Proxmox user to do just one thing from this entire episode, it would be enabling 2FA.

    A stolen password becomes useless if the attacker also needs the device in your pocket. Proxmox supports both TOTP (Google Authenticator, Authy, etc.) and hardware keys. I personally run YubiKeys on all production systems and haven’t looked back.

    Go to Datacenter ? Permissions ? Two Factor Authentication and set it up for your admin accounts. Takes five minutes. Worth its weight in gold.

    Step 5: Make SSH Boring to Attackers

    We can take SSH security much further than just disabling root login.

    First, I change the SSH port to something non-standard (pick a high port you’ll remember). The automated bots scanning the internet are lazy—they mostly hit port 22. Make them work for it.

    But the real move? Kill password authentication entirely.

    My process:
    – Generate an SSH key pair on my workstation
    – Copy the public key to the server
    – Test key-based login
    – Only then do I set PasswordAuthentication no in sshd_config

    The difference is night and day. Your logs become dramatically cleaner, and password-based attacks become impossible.

    Step 6: Embrace Your Patching Discipline

    Security isn’t a “set it and forget it” sport. It’s a lifestyle.

    This is where Proxmox’s repositories matter. In production, I strongly prefer the Enterprise repository. The updates are more thoroughly tested and stable. For labs, the No-Subscription repo works fine, but understand what you’re getting.

    Either way, make apt update && apt dist-upgrade part of your regular rhythm. You’re patching both Debian and Proxmox VE in one shot. Do it consistently.

    Step 7: Give Your Server an Automated Bouncer (Meet Fail2Ban)

    Some attacks are sophisticated. Most aren’t. Most are dumb, noisy, brute-force attempts from script-kiddie bots.

    This is why I consider Fail2Ban essential on every Proxmox host.

    It watches your log files in real time. When it sees someone failing to log in repeatedly, it automatically updates the firewall to block their IP for a period of time. It’s like having a bouncer who kicks out drunk people trying to force their way into the club.

    I configure it to protect both SSH and the Proxmox web interface. Set it and sleep better.

    Step 8: Practice Least Privilege Like Your Job Depends On It (It Does)

    Finally, let’s talk about other people.

    My unbreakable rule: Never give multiple people full administrator accounts. It’s sloppy and dangerous.

    Proxmox’s Role-Based Access Control system is excellent here. I create custom roles like “VM Operator” that allow starting, stopping, and viewing consoles—but nothing that touches networking, storage, or cluster configuration.

    Then I assign these roles to groups, add users to the groups, and give them access only to their specific pools of VMs. Containment and accountability in one elegant package.

    The Foundation Is Now Solid

    Let’s recap what we’ve built today:

    • No more root SSH access
    • Hardened and isolated management network
    • Proxmox firewall with default-deny posture
    • Two-factor authentication everywhere
    • Key-only SSH on a non-standard port
    • Regular patching discipline
    • Fail2Ban standing guard
    • Proper RBAC with least privilege

    This isn’t theoretical security. This is practical, production-grade hardening that takes a relatively small amount of time but delivers enormous peace of mind.

    Security isn’t a feature you add later. It’s the bedrock your entire high-availability strategy stands on.

    Now that our host is secure, the next question becomes: how do we protect the data sitting on that host?

    That’s exactly what we’re diving into next time in Episode 9: Proxmox VE vs. Proxmox Backup Server – A Symbiotic Relationship. I can’t wait to show you how these two tools work together to create something truly special.

    Until then, go harden those hosts, my friend.

    Drop a comment below and tell me: What’s the one security change that gave you the biggest “why didn’t I do this sooner” feeling? I read every single one.

    See you in the next episode.

    Stay secure out there,
    — Your infrastructure mentor

  • Episode 7: Open-Source Virtualization Gotchas They Don’t Warn Yo

    Episode 7: Open-Source Virtualization Gotchas They Don’t Warn Yo

    Hello and welcome back!

    If you’ve been riding along with me on this Architecting Zero Downtime Infrastructure journey, you know I’m not here to sell you dreams. I’m here to give you the map with all the cliffs, sinkholes, and surprise dragons clearly marked.

    Today we’re talking about something close to my heart: open-source virtualization platforms like Proxmox and XCP-ng. I genuinely love these tools. They’re powerful, flexible, and can carry serious enterprise workloads without breaking a sweat. But the official documentation? It’s like that friend who only tells you the highlight reel of their road trip and conveniently forgets to mention the flat tires in the rain at 2 a.m.

    This episode is about the stuff they don’t put in the manual—the real-world gotchas that separate “it works” from “it works reliably at 3 a.m. when the CFO is breathing down your neck.”

    Let’s walk through the hidden realities together.

    Hardware Compatibility: It’s a Spectrum, Not a Checkbox

    Every project begins with the sacred Hardware Compatibility List (HCL). Sensible, right?

    Here’s the first gotcha: compatibility isn’t binary. It’s more like a sliding scale with many shades of “technically works but might ruin your weekend.”

    Your RAID controller might be on the list, but only stable with a firmware version released six months after the documentation was written. That shiny new 10GbE card? Works great—except its open-source driver doesn’t support SR-IOV, which you were counting on for performance.

    My unbreakable rule: Before I buy anything, I search the community forums for that exact model number plus the words “production” and “pain.”

    User-reported experience beats official documentation every single time. The forums are where you find out that certain Intel NICs start dropping packets under heavy load with ZFS, or that one particular Dell server model has a BIOS bug that breaks live migration every third Tuesday.

    Think of the HCL as the trailer for a movie. The forums tell you whether the film is actually any good.

    The “Free” Software Myth (and the Expertise Tax)

    Here’s the misconception I see constantly: people think “free” means “zero cost.”

    My friend, the license might be free, but your time is not.

    The real currency in open-source virtualization is engineering hours. When something breaks at 3 a.m., there’s no support portal with a guaranteed SLA. There’s just you, a pot of coffee, and the cold realization that you’re the highest-paid person currently troubleshooting this issue.

    This is what I call the Expertise Tax.

    You have two honest choices:

    1. Keep senior talent in-house and actually budget their time for maintenance and deep troubleshooting.
    2. Buy an enterprise support subscription (which many vendors offer for Proxmox and XCP-ng).

    I view these subscriptions as mandatory insurance for anything running production workloads. They’re not optional—they’re your safety net when the ARC cache decides to eat all your RAM at the worst possible moment.

    Patching: High-Stakes Foundation Surgery

    On a regular server, updating is boring. On a hypervisor, it’s like performing heart surgery while the patient is running a marathon.

    A seemingly innocent kernel or QEMU update can quietly break ZFS kernel modules, GPU passthrough, or your carefully tuned Ceph configuration. I’ve seen it happen more times than I care to count.

    My process is non-negotiable: Every serious deployment gets a non-production environment that’s architecturally identical to production (even if it’s smaller). Every single patch goes there first.

    We test live migration, storage performance, backup/restore, and application behavior before anything touches the live cluster. This discipline turns a terrifying activity into a predictable, almost boring process. Boring is exactly what we want at 2 a.m.

    Storage: Where Theory and Reality Diverge

    The documentation makes creating a ZFS pool or Ceph cluster look almost too easy. Production has other ideas.

    For ZFS, the classic gotcha is the ARC (Adaptive Replacement Cache). By default, it’s an aggressive beast that will happily consume most of your host’s RAM. Great for storage performance, terrible for VM performance when your virtual machines start swapping.

    I always manually tune the ARC with hard limits. My rule of thumb: leave at least 2-4GB per VM core plus overhead. Your VMs deserve the memory you promised them.

    Ceph is even more dramatic. The initial setup is well-documented. The moment you have a performance problem or need to recover from a string of degraded placement groups at 4 a.m.? That’s when you discover that the documentation only got you to base camp. The summit requires experience, deep knowledge, and occasionally some colorful language.

    Networking: The Land of Subtle, Expensive Mistakes

    Linux bridges are simple. Production-grade networking is where the pain lives.

    The most common (and frustrating) culprit? MTU mismatches. Your physical switches are set for jumbo frames, but somewhere in the chain—virtual switch, VM, or container—someone is still running the default 1500. The result is mysterious, intermittent packet loss that makes you question your career choices.

    Link aggregation follows the same pattern. I love LACP for both performance and redundancy, but the bonding configuration on your hypervisor must match the port-channel configuration on your physical switch with religious precision. Any mismatch creates the networking equivalent of a bar fight.

    And VLANs? Every tag must be perfect as traffic flows from physical NIC through the virtual bridge and into the VM. These aren’t minor details—they’re the difference between a stable network fabric and a flaky, mysterious mess.

    Backups: Don’t Forget the House

    Your VM backup solution might be excellent. But what about the host running those VMs?

    The painful gotcha here is the lack of a simple bare-metal recovery process for the hypervisor itself. Restoring your VMs is pointless if their home is gone.

    My standard practice is regular backup of critical host configuration (on Proxmox, that’s the entire /etc/pve/ directory). But backups alone aren’t enough.

    The most important thing is having a documented and tested procedure for rebuilding a failed node from scratch. You need to have practiced this when nothing is on fire so you can perform it calmly when everything is.

    Clustering and HA: Quorum, Fencing, and Nightmares

    The documentation makes High Availability sound like three simple clicks. Reality demands you understand quorum and, more importantly, fencing.

    A split-brain scenario—where two nodes both think they’re in charge—can corrupt data faster than you can say “production incident.” Proper fencing (the ability to definitively power off a misbehaving node) is non-negotiable.

    I also insist on a dedicated, low-latency network just for cluster communication. Corosync is extremely sensitive to latency, and shared networks have a nasty habit of getting congested exactly when you need them most.

    The Most Important Gotcha: The Human Element

    Here’s the biggest truth nobody puts in the docs:

    The most sophisticated open-source tool is only as good as the person using it.

    With commercial solutions, you’re a customer with a support contract. With open-source, you’re a community participant. That requires a fundamental mindset shift.

    You need to learn how to debug effectively, gather clean logs, and ask intelligent questions. The difference between “someone please help” and “here’s what I’ve already tried, with logs and reproduction steps” is massive.

    This soft skill might be the most valuable thing you’ll develop in your open-source virtualization journey.

    The Takeaway

    Success with open-source virtualization isn’t about avoiding all problems. It’s about knowing which problems are coming and having systems, processes, and mindsets in place before they arrive.

    It means treating the documentation as a starting point rather than gospel. It means building test environments, tuning memory, obsessing over networking details, and—most importantly—becoming an active participant in the community that makes these incredible tools possible.

    Now that we understand how to build the platform properly, the next logical step is making sure nobody unauthorized can touch it.

    Episode 8 is coming soon: Securing Your New Proxmox Environment. We’ll dive into firewalls, proper user permissions, two-factor authentication, and the security model that turns your powerful platform into a fortress.

    Until then, I’d love to hear from you.

    What’s the biggest open-source virtualization gotcha that caught you by surprise? Drop it in the comments—I read every single one.

    Keep building wisely, my friends.

    Talk soon,
    Your fellow infrastructure architect

  • Case Study: A Small Business’s Cost-Saving Migration

    Case Study: A Small Business’s Cost-Saving Migration

    Hello and welcome back, friend!

    For the past five episodes we’ve been laying down the principles of zero-downtime architecture like a careful mason laying foundation stones. Today we finally get to watch the house go up. And not just any house — we’re looking at a genuine small business that turned a terrifying single point of failure into a resilient, highly available cluster while cutting their costs.

    I call this case study “The Vintage Vinyl Vault Migration,” and I think you’re going to love it. It’s the perfect proof that enterprise-grade resilience isn’t reserved for companies with enterprise-grade budgets.

    Let me paint the picture.


    The Ticking Time Bomb in the Back Office

    Vintage Vinyl Vault is exactly the kind of business I’ve seen dozens of times. They sell rare records online. Their entire operation — website, inventory database, order processing, customer accounts — ran on one aging server humming away in the back office.

    You know the type. The machine was loud, hot, and had more miles on it than my first car. If the power supply died, the hard drive hiccuped, or Windows decided it was time for an unscheduled update, the entire business disappeared from the internet. No sales. No customer service. Just a sad “this site can’t be reached” message and a growing sense of panic.

    Beyond the obvious risk, their electricity bill was eye-watering, any maintenance required taking the whole store offline, and they had zero ability to handle traffic spikes during Record Store Day or Black Friday.

    They weren’t running a business. They were hostages to hardware.


    Crystal-Clear Goals (And One Brutal Constraint)

    When we sat down with them, their objectives were refreshingly honest:

    1. High availability was non-negotiable. The business could not die if a server died.
    2. Operational costs had to drop, especially power and cooling.
    3. Maintenance without downtime — they were tired of the 2 a.m. maintenance windows that felt like playing Russian roulette with their revenue.

    There was one constraint that shaped everything: a very tight budget.

    Expensive proprietary solutions were immediately off the table. Major cloud providers with their variable costs didn’t fit their model either. We had to be ruthlessly smart with every dollar.

    This is the kind of constraint I secretly love. Nothing focuses the mind like a limited budget.


    The Architecture We Built

    We designed a three-node Proxmox cluster with hyper-converged Ceph storage.

    Now, before your eyes glaze over, let me give you the simple version:

    Imagine three friends who each own a decent car. Instead of buying one ultra-expensive supercar, they decide to work together. Through clever software, those three normal cars can now share the workload, automatically cover for each other if one breaks down, and even move passengers between moving vehicles without anyone noticing.

    That’s what we built.

    Proxmox gave us enterprise features — live migration, high availability, clustering — at zero licensing cost. For storage, we used Ceph to turn the local disks in each server into one giant, self-healing, redundant pool. No expensive SAN required.

    For hardware, we didn’t buy one shiny new server. We bought three identical refurbished enterprise servers that were power-efficient and surprisingly punchy. The total hardware spend for all three machines was less than half of what a single new equivalent server would have cost.

    My personal rule of thumb: Refurbished enterprise hardware + open-source virtualization is one of the highest-ROI combinations available to small and medium businesses right now.


    The Migration: Zero Downtime or Bust

    Here’s where things get fun.

    My unbreakable rule in these projects is simple: never touch the live system until its replacement is fully built, tested, and bored.

    We built the entire three-node cluster in parallel, completely separate from the old server. Once it was running beautifully, we performed a Physical-to-Virtual (P2V) conversion during a quiet period. Essentially we took a perfect digital snapshot of their old server and turned it into a virtual machine.

    We brought the VM online on an isolated network and went full detective — testing the website, database queries, checkout flow, admin backend, everything. We were looking for even the tiniest paper cut.

    Of course, because the universe has a sense of humor, we found one.


    The “Everything’s Perfect… Wait, Why Is It So Slow?” Crisis

    After the P2V, the site worked perfectly. But database queries were timing out. The new hardware was objectively more powerful, yet performance was worse. This is the kind of maddening problem that makes grown engineers question their life choices.

    The culprit? The VM was using generic emulated network drivers.

    Think of it like trying to run a world-class orchestra through a children’s toy walkie-talkie. It technically works. It just works terribly.

    The fix was installing VirtIO paravirtualized drivers — basically teaching the operating system to speak the native language of the Proxmox host instead of using a clumsy universal translator. The performance difference was night and day. One reboot later and the system was flying.

    This is such a painfully common gotcha that I now include it in every migration checklist. Consider this your friendly warning.


    The Moment of Truth

    Once performance was perfect, we scheduled a very short, clearly communicated maintenance window (more of a “brief pause” than traditional downtime).

    We shut down the old physical server, did one final data sync, updated the public DNS records to point to the new cluster, and held our breath.

    Then we saw it — the first live order processed on the new infrastructure. Beautiful.

    But we weren’t done proving our point.

    I walked over to one of the three servers, looked the team dead in the eye, and pulled the power cord.

    The cluster detected the failure, automatically migrated the live virtual machine to another node, and kept serving customers. Not a single request was dropped. The website never even hiccuped.

    That moment — watching the system do exactly what we designed it to do — never gets old. It’s why I do this work.


    The Results That Make Accountants Smile

    Here’s where the story gets really satisfying:

    • The three new servers together used 35% less power than the single old beast
    • Hardware cost for all three machines was less than half of a single new equivalent server
    • The cost of downtime went from “thousands of dollars per hour” to effectively zero

    They didn’t just improve their infrastructure. They bought genuine business insurance at a discount.


    Four Lessons You Can Steal

    1. Open-source virtualization has grown up. Proxmox + Ceph delivers features that used to require six-figure budgets.
    2. Smart capital allocation beats shiny new hardware. Three good refurbished servers beat one expensive new one almost every time.
    3. Always budget time for the “surprise issue.” The network driver problem was completely predictable in hindsight. These moments are where experience pays for itself.
    4. Parallel build + rigorous testing is non-negotiable for true zero-downtime migrations. There is no clever shortcut here.

    The Balanced Truth

    I don’t want to paint an unrealistic picture. This approach was powerful, but it wasn’t effortless. There were late nights, moments of doubt, and plenty of documentation diving. That’s exactly why our next episode is so important.

    In Episode 7, we’re going to get real about “The ‘Gotchas’ of Open-Source Virtualization: What the Documentation Doesn’t Tell You.” I’ll share the scars so you don’t have to collect your own.


    The story of Vintage Vinyl Vault proves something I deeply believe: you don’t need a massive budget to build infrastructure that’s more resilient than most Fortune 500 companies had ten years ago. You just need clear priorities, methodical execution, and the right tools.

    You can absolutely do this.

    Now I’d love to hear from you — have you ever migrated a business off a single server? What was your scariest moment? Drop your stories in the comments. The best lessons usually come from the trenches.

    Until next time, keep building things that don’t break.

    — Your mentor in the server room
    Episode 7 drops soon. You won’t want to miss it.

  • Networking in Proxmox vs. VMware: Bridging the Gap

    Networking in Proxmox vs. VMware: Bridging the Gap

    Welcome back, friend!

    This is Episode 5 of Architecting Zero Downtime Infrastructure, and today we’re diving into one of my favorite topics: networking.

    I often call networking the central nervous system of your entire virtualized environment. When it’s healthy, you don’t even notice it. When something goes wrong? The whole body feels it — usually at the worst possible time.

    Today we’re comparing how Proxmox and VMware approach virtual networking, from the humble virtual switch all the way up to software-defined magic. My goal is to give you enough clarity to make confident decisions that support truly resilient infrastructure.

    Let’s plug in and get started.

    The Virtual Switch: Your Software Traffic Cop

    Picture a physical switch sitting in a server rack — all those blinking lights, moving packets around intelligently. Now imagine that entire device existing purely as software inside your hypervisor. That’s a virtual switch.

    Both platforms have them. They just have very different personalities.

    VMware gives you the vSphere Standard Switch (vSS) as the foundation. It’s polished, predictable, and feels like it was designed by people who really love consistency. The star of the show is the Port Group — my favorite VMware networking concept.

    Think of a Port Group as a reusable policy template. You define the VLAN, security settings, and traffic shaping once, give it a sensible name, and then attach as many VMs as you want. It’s like having a rubber stamp that guarantees every machine in the “Production” group behaves exactly the same way. I’m a huge fan of this approach.

    For larger environments, VMware brings out the big guns: the vSphere Distributed Switch (vDS). This creates one logical switch that spans your entire cluster. Change a setting once in vCenter and it applies everywhere. It’s incredibly elegant — and, as we’ll discuss later, comes with a licensing cost.

    Proxmox takes a refreshingly different route. Instead of building its own proprietary networking layer, it says, “Why reinvent the wheel when Linux has been perfecting this for decades?” The default is the trusty Linux Bridge (usually called vmbr0).

    It’s simple, rock-solid, and surprisingly capable. But when you need more horsepower, Proxmox lets you enable Open vSwitch (OVS). This opens up a whole new world of granular flow control, tunneling protocols, and advanced features.

    The trade-off? You’re now swimming in the deeper waters of Linux networking. If your team lives in GUIs, this can feel like being handed the keys to a race car after years of driving an automatic. (Painfully common story, by the way.)

    VLANs: Building Secure Neighborhoods

    Segmentation isn’t optional in zero-downtime architecture — it’s table stakes for both security and performance.

    VMware makes this delightfully straightforward. You create a Port Group, slap a VLAN ID on it, and you’re done. Every VM attached to that group automatically gets the correct tagging. Clean, simple, scales beautifully.

    Proxmox gives you two main paths, and I have strong opinions here:

    1. The Explicit Approach: Create a separate bridge for each VLAN (vmbr0.10, vmbr0.20, etc.). This is wonderfully obvious and great for smaller setups.
    2. The Scalable Approach (my personal recommendation): Use a VLAN-aware bridge. You configure one bridge on the host and let the individual VMs specify their VLAN tag in their own network adapter settings.

    The second method keeps your host configuration remarkably clean. My unbreakable rule: if you’re managing more than five VLANs, go VLAN-aware. Your future self will thank you.

    No Single Points of Failure: Bonding and Teaming

    Here’s a truth I’ve learned the hard way: a single physical NIC is a liability, not a feature.

    Both platforms solve this through link aggregation (called NIC Teaming in VMware and Bonding in Linux/Proxmox).

    VMware offers several teaming policies. The simplest (“Route based on originating port ID”) gives you excellent failover. For more active throughput, you can use IP hash — but only if your physical switches are configured to play nice.

    Proxmox uses standard Linux bonding modes. My go-to for most production workloads is mode 4 (802.3ad/LACP). Yes, it requires switch configuration, but the payoff is worth it.

    My minimum standard for any serious workload: at least a two-port LACP bond. This protects you from cable disasters, dying NICs, and switch port failures. I’ve seen this exact setup save multiple environments from what would have been major outages.

    The SDN Revolution: NSX vs Proxmox SDN

    Now we’re entering the really fun stuff.

    VMware’s NSX is the enterprise champion of Software-Defined Networking. It lets you treat the network as code. The micro-segmentation capabilities are genuinely impressive — you can put a firewall around every single workload. It completely decouples virtual networking from physical hardware using overlays.

    It’s powerful. It’s also expensive.

    What fascinates me about Proxmox is how they’ve brought serious SDN capabilities to the masses. Using open standards like VXLAN, BGP, and EVPN, you can build sophisticated virtual networks that span clusters and even datacenters — all configured through the web GUI.

    This isn’t “enterprise lite.” It’s genuinely powerful networking that doesn’t require a six-figure licensing agreement. I get genuinely excited when I think about what this means for smaller teams and organizations.

    Philosophy Matters: GUI vs “The Metal”

    This is where the cultural differences become most obvious.

    VMware’s world is beautifully integrated and GUI-first. Almost everything can be done through vCenter with a consistent, predictable workflow. For many teams, this coherence is worth the price of admission.

    Proxmox takes a more transparent approach. The web GUI is excellent for day-to-day tasks, but it never tries to hide what’s happening underneath. You can always crack open /etc/network/interfaces and see (and edit) the actual Linux configuration.

    I love this dual nature. When things are calm, use the GUI. When you need to automate, script, version-control with Git, or do something truly custom? The command line and configuration files are right there.

    It’s the difference between a beautifully wrapped present and being handed the tools to build your own.

    How to Choose: The Three Question Framework

    So which one should you use?

    After watching many organizations make this decision, I’ve distilled it down to three honest questions:

    1. Cost Reality
    VMware’s advanced features (Distributed Switches, NSX, etc.) come with serious licensing costs. Proxmox is open source. The financial difference can be staggering.

    2. Team DNA
    Are your people vCenter power users who live in the GUI? Or are they Linux-native engineers who enjoy understanding what’s happening under the hood? Forcing the wrong culture fit creates unnecessary friction.

    3. Actual Requirements
    Do you need straightforward, reliable networking? Or are you building something that genuinely requires micro-segmentation and advanced SDN capabilities?

    Answer these three questions honestly and the right platform usually becomes obvious.

    The Bottom Line

    VMware offers a mature, polished, tightly integrated networking ecosystem that feels like a luxury car — smooth, feature-rich, and expensive to maintain.

    Proxmox offers a flexible, transparent, incredibly powerful platform that leverages the full might of the Linux networking stack. It’s more like a high-performance workshop where you have access to every tool, if you’re willing to learn how to use them.

    Neither is universally “better.” The best choice is the one that aligns with your budget, your team’s skills, and your actual needs.


    Thanks for hanging out with me today! I hope this comparison gave you some clarity (and maybe even some excitement) about the networking possibilities in both platforms.

    Next time in Episode 6: “Case Study: A Small Business’s Cost-Saving Migration” — we’ll look at how one company successfully moved from VMware to Proxmox, the surprises they encountered, and the lessons that could save you from making the same mistakes.

    Drop your thoughts in the comments! Have you made the switch between these platforms? Are you team Linux Bridge or team Open vSwitch? I read every comment.

    Until next time — build resiliently, my friends.

    — Your infrastructure mentor

  • Proxmox 101: Moving Your VMs Without Losing Your Mind

    Proxmox 101: Moving Your VMs Without Losing Your Mind

    Hello and welcome back to Architecting Zero Downtime Infrastructure!

    This is our fourth episode, and today we’re tackling what I consider one of the most valuable operational skills in any Proxmox environment: moving virtual machines from one physical host to another without causing chaos.

    Think of it this way — if your cluster is a living, breathing orchestra, VM migration is your ability to swap out instruments while the music is still playing. When you master this, you stop reacting to problems and start engineering genuine flexibility.

    By the end of this post, you’ll know exactly which migration method to use in any situation, how to execute it confidently, and how to avoid the painful (and surprisingly common) pitfalls that make grown admins question their life choices.


    Why VM Mobility Matters More Than You Think

    Let’s be honest. Moving VMs sounds boring on paper. But the ability to relocate workloads gracefully is the foundation of resilient infrastructure.

    Here are the real-world scenarios where this skill becomes pure gold:

    Planned Maintenance
    Need to add RAM, replace a failing drive, or apply kernel updates? You can evacuate every VM first, do your work, then bring everything back. The users never notice.

    Proactive Load Balancing
    That one host has been running hot for weeks? Instead of hoping nothing explodes, you can surgically move the noisy VMs to a quieter node before performance degrades.

    Smart Storage Economics
    Move a VM from blazing-fast NVMe storage to high-capacity HDDs when it transitions from “hot” project to “long-term archive.” Your wallet will thank you.

    The Foundation of Real High Availability
    All the fancy HA features we’ll talk about later are really just automated versions of the migration techniques we’re covering today.

    This isn’t just a feature. It’s infrastructure freedom.


    Cold Migration: The Reliable Safety Net

    Let’s start with the simplest approach — what we call a cold migration.

    The process is exactly what it sounds like:

    1. Gracefully shut down the VM
    2. Right-click in the Proxmox web interface ? Migrate
    3. Choose your destination node

    I always recommend starting here when you’re learning because it’s nearly bulletproof. It doesn’t care whether you’re using local storage or shared storage. It just works.

    The obvious downside? The VM is offline during the entire process. For a development or test machine, this is perfect. For a production database server? Not so much.

    My rule of thumb: If the VM can tolerate downtime, use cold migration. It’s the method I reach for when I want zero drama.


    Live Migration: The Holy Grail

    Now we’re talking about the cool stuff.

    Live migration lets you move a running VM from one host to another with zero perceptible downtime. We’re talking sub-second interruptions that don’t even drop TCP connections. It’s borderline magical when you see it the first time.

    But magic always has requirements.

    The fundamental key is shared storage (NFS, iSCSI, Ceph, etc.). If all your hosts can see the same disk files, Proxmox doesn’t need to move the virtual disks — it only needs to move the living memory of the VM.

    Here’s what actually happens under the hood:

    Proxmox starts copying the VM’s memory pages to the destination host. It does this iteratively, keeping track of which pages change while the copy is happening. Once the two hosts are almost perfectly in sync, it pauses the VM for a tiny fraction of a second (usually 20-100ms), copies the final “dirty” pages, and flips control to the new host.

    Your users? They rarely notice anything.

    My unbreakable rule: In any serious cluster, I insist on a dedicated 10GbE (or better) migration network. This isn’t optional if you want reliable live migrations. The network is the highway your VM’s entire memory has to travel across — don’t make it use a dirt road.


    When You’re Stuck With Local Storage

    Many of us (myself included in the early days) run our clusters with local disks. Don’t worry — Proxmox has you covered.

    Offline Storage Migration is beautifully simple. You power off the VM, tell it to migrate, and Proxmox automatically handles both the disk transfer and the VM configuration in one operation. It’s remarkably clean.

    But the real game-changer is Live Storage Migration.

    This feature still blows my mind. It can move a running VM and its disks from one host’s local storage to another host’s local storage simultaneously. No shared storage required.

    The power is incredible. The resource consumption is… significant.

    I always warn people: this operation is heavy. It hammers both network bandwidth and storage I/O on two hosts at once. Think of it like moving houses while simultaneously hosting a dinner party. It can be done, but everyone’s going to feel it.

    Use it deliberately. Schedule it during maintenance windows when possible.


    When Things Go Wrong (And They Will)

    Let’s talk about the painfully common failure modes so you don’t have to discover them at 2 AM.

    The error log is your best friend. When a migration fails, read it. Don’t just restart the task and hope.

    The usual suspects are:

    • CPU Mismatch: Moving between dramatically different processor generations (especially Intel to AMD or very old to very new). The VM may refuse to start on the new host.
    • Network Issues: Firewall blocking ports 60000-60003, or a congested/slow migration network causing timeouts.
    • Storage Problems: Insufficient space or permission issues on the target. (You’d be shocked how often this one bites people.)

    My diagnostic process: Check CPU compatibility first, then network, then storage. Ninety percent of migration issues are solved by these three checks.


    From Manual Hero to Automated Resilience

    Here’s where everything clicks together.

    All the techniques we’ve discussed are building blocks for Proxmox High Availability (HA).

    HA is essentially an automation layer that watches your cluster. If a node dies, HA automatically restarts those VMs on healthy nodes using the same migration capabilities we’ve been talking about. You go from “I need to be awake and ready to respond” to “the cluster heals itself while I sleep.”

    That’s not just convenient. It’s a completely different philosophy of infrastructure.


    Your Migration Toolkit, Summarized

    • Cold Migration: Universal, safe, requires downtime
    • Live Migration: Zero-downtime magic (requires shared storage)
    • Live Storage Migration: The nuclear option for local storage setups

    The real skill isn’t knowing how to do all three. It’s knowing which one to use in any given situation.

    Master these tools and you’ll never look at your cluster the same way again.


    That’s it for today, my friends.

    You now have a complete mental model for moving VMs in Proxmox with confidence. Next time, we’re going deep on networking — specifically “Networking in Proxmox vs. VMware: Bridging the Gap.” We’ll talk virtual switches, VLANs, bond configurations, and how to build the rock-solid virtual networks that make everything else possible.

    I can’t wait to share it with you.

    In the meantime, I’d love to hear from you. What’s been your biggest migration horror story (or triumph)? Drop a comment below or reach out on social. I read every single one.

    Until next time — keep building systems that just work.

    — Your friendly infrastructure mentor

  • Guest Interview: A SysAdmin’s VMware to Proxmox Journey

    Guest Interview: A SysAdmin’s VMware to Proxmox Journey

    Hello and welcome back to Architecting Zero Downtime Infrastructure.

    Today we’re tackling one of the most anxiety-producing shifts happening in data centers right now: the great VMware exodus. Between the licensing changes, the per-core pricing shock, and the strategic uncertainty, what used to be a comfortable “we’ll just renew” conversation has become a genuine board-level strategic imperative.

    I recently sat down with someone who didn’t just talk about leaving VMware — he actually did it. David led his team through a full production migration to Proxmox VE. No smoke, no mirrors, and (most impressively) no meaningful downtime.

    What follows isn’t theory. It’s the real story — the good, the painful, the “we definitely didn’t see that coming” moments — straight from the trenches.


    The Catalyst: When Cost Meets Control

    Every big IT project needs a spark. For many organizations, Broadcom’s VMware licensing changes provided a five-alarm fire.

    I asked David the question I ask every leader in this situation: Was this really about money, or was something deeper going on?

    His answer didn’t surprise me, but it was refreshing to hear it said out loud.

    Yes, the financial pressure was real. The new subscription model and core-based licensing delivered a budget forecast that made leadership’s eyes water. But beneath the numbers was a strategic realization: they were tired of being locked into a vendor’s roadmap. They wanted to own their architecture again.

    The move wasn’t just about escaping rising costs. It was about reclaiming control.

    That’s a distinction that matters. Organizations that only focus on the sticker price often make reactive choices. The ones that treat it as a strategic repositioning tend to build much stronger foundations.


    The Bake-Off: Finding the Right Successor

    Once the decision was made, David’s team ran a proper evaluation. They looked at XCP-ng, Hyper-V, oVirt, and Proxmox.

    I love a good scorecard, so I asked him about his.

    Their non-negotiables were:
    – Strong live migration capabilities
    – Integrated, enterprise-grade backup
    – Solid storage options (they wanted to use Ceph)
    – An active community and commercial support availability
    – Reasonable learning curve for the team

    Proxmox won for three reasons that continue to resonate with me.

    First, it offered an open-source core with optional commercial support — the best of both worlds. Second, its integrated storage and backup features dramatically reduced complexity compared to bolting separate solutions together. And third, the philosophy just felt right. It respected engineers instead of trying to hide the Linux underneath.

    As David put it, “We wanted to understand our infrastructure again instead of just clicking through wizards.”

    I felt that in my soul.


    The Proof of Concept: Try to Break It

    Here’s my unbreakable rule: Never trust a datasheet. Make it cry in a lab first.

    David’s team built a small three-node cluster and went to war with it. They tested live migration under load, validated the backup system with real data, and deliberately tried to break storage failover.

    The learning curve was real. After years in the polished vCenter interface, Proxmox’s web UI felt… different. But once they pushed past the initial “where’s the button?” frustration, they discovered something surprising: the UI was actually more transparent about what was happening under the hood.

    Pleasant surprise: Hardware passthrough (especially for GPUs) was dramatically easier than they expected.

    Early gotcha: Their monitoring tools didn’t always interpret Proxmox’s metrics the same way, forcing them to rethink some of their alerting logic.

    The PoC wasn’t just technical validation — it was confidence building. By the end, the team wasn’t just convinced. They were excited.


    The Migration: Phased, Planned, and (Mostly) Boring

    This is where migrations die or succeed.

    David’s approach was textbook perfect: start boring. They began with development and non-critical systems. Each successful wave increased both skill and organizational comfort.

    For VM conversions, they landed on a combination of qm importdisk and virt-v2v depending on the workload. The networking translation was, as expected, where the most brain cycles were spent. Mapping vSphere port groups and vSwitches to Linux bridges and bonds required careful documentation, but once the patterns were established, it became surprisingly routine.

    The entire migration was completed in carefully orchestrated phases over several months. The business never felt it.

    That’s the dream.


    The Moment Everything Got Weird

    Of course, no migration this size gets through unscathed.

    I asked David for the war story — that one moment where the documentation failed and engineering skill had to take over.

    His answer involved Ceph, a particularly noisy Microsoft SQL Server, and some very confused OSDs.

    The database was generating I/O patterns that caused Ceph to constantly rebalance. Performance tanked. The team found themselves deep in the weeds of CRUSH maps, PG tuning, and network latency between nodes.

    The solution wasn’t in any official guide. It came from a late-night forum thread, a very patient community member, and some creative adjustments to both the Ceph configuration and the SQL Server’s storage layout.

    This is my favorite part of these stories. The technical solution was interesting, but the real lesson was that they had built enough institutional knowledge by that point to even know where to look for help.


    The Human Side: Moving People, Not Just VMs

    Here’s what many technical leaders get wrong: they treat the migration as purely technical.

    David’s team invested heavily in the human transition. They created hands-on labs, ran “Proxmox Fridays,” and deliberately paired their strongest VMware engineers with the new platform. Instead of telling people their skills were obsolete, they positioned the change as leveling up their infrastructure skills.

    The shift from point-and-click vCenter to Proxmox’s combination of GUI and CLI was a feature, not a bug. Once the team saw how much faster they could work at the command line, resistance melted away.


    Life After VMware: The Report Card

    Six months later, what actually changed?

    The numbers are impressive:
    62% reduction in virtualization costs
    – Noticeable performance improvement on storage-intensive workloads
    – Dramatically faster provisioning (LXC containers are now used heavily alongside traditional VMs)
    – Much greater visibility into what’s actually happening on the hosts

    Most importantly, David’s team feels in control of their infrastructure again. They can implement new capabilities without waiting for a vendor’s roadmap or paying for new licensing tiers.

    They’re not just running VMs differently. They’re thinking differently about their entire stack.


    My Three Biggest Takeaways for You

    After listening to David’s experience, three truths stand out:

    1. The financial pressure is real, but the strategic opportunity is bigger. Don’t just optimize for cost — optimize for control and flexibility.
    2. Planning beats heroics every single time. The teams that succeed are the ones that build small labs, document dependencies, and move methodically.
    3. The community is your hidden accelerator. David’s team repeatedly found answers in the Proxmox forums that saved them days of troubleshooting.

    Final Advice from the Trenches

    If you’re standing at the beginning of this journey, here’s the distilled wisdom:

    Start tiny. Build a three-node lab. Break things. Rebuild them. Get comfortable before anything production touches the new platform.

    Audit everything. Map every dependency, every network flow, every backup job. This work feels slow until it saves you from a catastrophic surprise.

    Bring your people with you. This isn’t just a technology change — it’s a capability upgrade. Treat it that way.


    David, thank you for sharing your journey with such honesty and clarity. Your story is going to save a lot of teams from learning these lessons the hard way.


    And that, my friends, brings us to the perfect setup for our next episode.

    We’re getting tactical.

    Next time: “Proxmox 101: Moving Your VMs Without Losing Your Mind” — a practical, step-by-step guide for engineers ready to roll up their sleeves.

    You won’t want to miss it.

    In the meantime, I’d love to hear from you. Are you currently wrestling with a VMware migration decision? What’s your biggest concern? Drop your thoughts in the comments or reach out on LinkedIn.

    Until next time, keep building infrastructure that doesn’t break when the world changes.

    — Your infrastructure mentor

  • Pre-Flight Check: Planning Your Proxmox Migration

    Pre-Flight Check: Planning Your Proxmox Migration

    Hello and welcome back!

    If you’ve ever watched a pilot walk around their aircraft before takeoff, you’ve seen something beautiful: professional paranoia. They’re not hoping everything works—they’re confirming it. Today we’re bringing that same mindset to your Proxmox migration.

    Welcome to the single most important episode in this entire series. We’re calling it the Pre-Flight Check, and by the end of this post, you’ll have a complete checklist that turns a potentially terrifying migration into a controlled, almost boringly successful operation.

    Because here’s the truth I’ve learned the hard way: the real work of any migration happens on the ground, not during the move.


    Why Most Migrations Become Weekend Nightmares

    I’ve seen it too many times. A team gets excited about new hardware, spins up Proxmox, and starts moving VMs with more hope than strategy. The result? Extended downtime, mysterious performance regressions, or that special moment when you discover an undocumented dependency at 2:17 a.m. on a Sunday.

    This planning phase isn’t bureaucratic busywork—it’s your primary risk mitigation strategy.

    The very first question we ask isn’t “How do we move these machines?” It’s “Why are we doing this?”

    You need a crisp, measurable definition of success. Is it literally zero data loss? Is it under five minutes of downtime for critical services? A 15% performance improvement? Write it down. Make it your North Star. Every decision that follows gets measured against this definition.


    Discovery: Mapping Your Virtual Estate

    Once you know why, it’s time to figure out what you actually have.

    This goes way beyond a simple spreadsheet of CPU, RAM, and OS versions. I want to know the personality of each machine.

    • What are its actual disk I/O patterns?
    • How chatty is it on the network?
    • Which services does it truly depend on?

    The most critical (and most overlooked) part is dependency mapping. I like to think of it as figuring out which VMs are family—they need to travel together. Migrate a web server without its database and you’ve just created a very expensive paperweight.

    Once you have this map, you can create “migration waves”—logical groups of systems that belong together. This is the difference between a controlled relocation and digital whack-a-mole.


    The Hardware Reality Check

    Now let’s talk about the physical world. This is where I see teams get surprisingly sloppy.

    My first move is always the same: I take the exact bill of materials for my target servers and cross-reference it against Proxmox’s hardware compatibility list.

    Pro tip: Don’t obsess over the CPUs first. The usual villains are the I/O components—RAID controllers, network cards, and HBAs. These are the pieces that have to speak fluent “outside world,” and driver issues here will ruin your day.

    While you’re at it, update every piece of firmware. It’s a 10-minute task that has saved me days of troubleshooting. Consider it cheap insurance.


    Choosing Your Storage Philosophy

    This is one of the most important long-term decisions you’ll make. Get this right and everything else becomes easier.

    Here’s how I think about the three main paths:

    Local ZFS – When I want a powerful, self-contained node with rock-solid data integrity, this is my go-to. The performance is fantastic. The trade-off? It’s not shared, so live migration between nodes isn’t an option.

    Ceph – This is the hyper-converged superstar. It takes local disks across multiple nodes and creates one resilient, distributed storage fabric. It’s magical when done right, but it demands a properly designed network. If you’re going Ceph, treat your storage network like it’s VIP traffic.

    Existing SAN/NAS – Sometimes the pragmatic choice is best. If you already have a solid enterprise storage system, connecting via NFS or iSCSI can be stable and sensible.

    There’s no universally “correct” answer—only the one that best serves your definition of success.


    Network Design: Don’t Let Traffic Fight

    In Proxmox, two concepts rule the networking world: Bridges and Bonds.

    Think of a Linux Bridge as a virtual switch inside your host, and a Bond as a team of network cards working together for redundancy or speed. My nearly unbreakable rule: create the Bond first, then attach your primary bridge to it.

    But the real secret to a happy cluster is segmentation.

    On any production deployment, I insist on at least three separate networks:
    1. Management access
    2. General VM traffic
    3. Dedicated high-speed storage network (non-negotiable for Ceph)

    Keep that storage traffic isolated and your cluster will thank you with predictable, stable performance.


    Cold Migration vs Live Migration

    You have two fundamental paths: cold (offline) and live (online).

    My strong recommendation for most organizations? Start with cold migrations.

    They’re more predictable, significantly safer, and let you validate your process without heroics. Proxmox’s vzdump tool combined with qm importovf for foreign VMs makes this surprisingly straightforward.

    Live migration is beautiful when it works—but it adds complexity and risk. I use it, but only after I’ve proven the entire environment with cold migrations first.


    The Lab: Where Theory Meets Reality

    This step is non-negotiable.

    You don’t need a perfect replica of production. I’ve built effective proof-of-concept environments with nothing but a single spare server pulled from the rack.

    The goal is simple: run a real production VM clone through your entire planned process. This is where you’ll discover that one weird driver issue, that one configuration quirk you never knew existed, that one assumption that was completely wrong.

    Better to find these things in a lab than at 3 a.m. on migration weekend.


    The Two Documents That Save You

    Once your lab validates the approach, it’s time to document everything in two critical artifacts:

    The Runbook – A minute-by-minute, command-by-command battle plan. It should include success criteria for each step and expected durations. Think of it as your migration GPS with turn-by-turn instructions.

    The Rollback Plan – This is even more important. Define clear triggers: “If performance drops more than X% below baseline” or “If service Y doesn’t respond within Z seconds, we roll back.” Remove emotion from the equation. Give yourself permission to pull the ripcord without debate.


    Your Five-Pillar Pre-Flight Checklist

    Let’s bring it all together. A proper pre-flight check rests on five pillars:

    1. Deep Discovery – Know your estate and all its hidden relationships
    2. Hardware Validation – Confirm compatibility before you commit
    3. Strategic Architecture – Make smart choices about storage and networking
    4. Appropriate Migration Methods – Match the technique to the risk level
    5. Proven Execution Plan – Lab validation plus comprehensive runbooks and rollback procedures

    Every hour you spend here is an hour you won’t spend in crisis later.


    The beautiful part? When you’ve done this work properly, migration day feels almost anticlimactic. You’re not hoping for the best—you’re executing a plan you’ve already proven.

    That’s exactly how we want it.


    What’s next?

    Join me for Episode 3: “Guest Interview: A SysAdmin’s VMware to Proxmox Journey” where we’ll get a raw, firsthand account from someone who’s been through the trenches—complete with the lessons, surprises, and victories.

    In the meantime, I’d love to hear from you. What’s your biggest worry about your upcoming migration? Drop a comment below or reply to the email. I read every single one.

    Until next time, keep building infrastructure that just works—even when everything changes.

    — Your friendly infrastructure mentor