Backing up Proxmox VMs with Veeam
Recently Veeam came with official support for backup and restore of Proxmox Virtual Environment, in this post we'll take a look at how to configure Veeam Backup for a Proxmox VE cluster.
Official documentation for the Proxmox support in Veeam can be found here
The Veeam architecture looks like the following
As we can see the Veeam Backup server connects to a PVE host via the Proxmox plugin. The backup jobs are orchestrated through a Veeam worker installed on the PVE host and it is through this the backups are sent back to the Veeam Backup repository.
Let's see how it is configured
Environment
The environment we'll use in this post is a Proxmox Cluster running Ceph as the storage backend on three PVE hosts. They are all running Proxmox 8.3
The Veeam Backup and Replication server is running the (as of time of writing) the latest version 12.2.
In the PVE cluster there's a few VMs running, a couple of Ubuntu servers and a Windows server.
Adding PVE to the Veeam inventory
The first step is to add each PVE host to the Veeam inventory.
This is a caveat that differs from i.e. backing up a vSphere cluster where you connect Veeam to vCenter and discover the resources through those APIs. In Proxmox the cluster can be managed from each of the nodes and there's, at least not at this point, no centralized management API.
From the Veeam Backup and Replication server we'll start the Add server wizard for Virtualization platforms and select Proxmox VE
We'll specify the IP address of the first PVE host (from the official Veeam documentation it seems FQDN is not supported at this time). Note that we do not have to add the port
Next we'll specify the root credentials of the host
Note that the Veeam documentation specifies that the root credentials is required. Hopefully they'll come up with a less permissive solution to this going forward
Next we'll accept the SSH key fingerprint warning
The Veeam Proxmox plugin will query the PVE host and we'll have to specify the storage to save the snapshots on before the worker will transfer it to the Veeam backup repository server. Notice that our Ceph storage is not available here so we'll select the local datastore on the host
At this point Veeam will register the PVE host in it's inventory and hopefully the process will succeed
Again, note that there's a few caveats (or "Considerations and Limitations" as Veeam refers them)
- You must use the official Proxmox ISO image
- Ensure that the hosts have been assigned a PVE system UUID, and do not use FQDNs
- All nodes must be added separately
- After adding the nodes you can not change the name of the cluster
Deploy worker
After successfully registering the PVE host in the Veeam inventory we'll can deploy a worker to the PVE node
The worker can be deployed to Ceph but I'll select the local lvm storage for this
We'll give the worker a name and specify the number of concurrent tasks allowed. I've set this to 2, whereas the default is 4. From this we can also hit the advanced button to override the default vCPUs and RAM for the VM, but we'll leave the default
Next we'll specify the networking for the node
And before deploying we'll get a summary of our settings
After a few minutes (depending on the infrastructure) our worker should be deployed and hopefully report a successful connection to our Veeam server
We can also verify it from the Proxmox UI. We'll notice that the VM is shutdown. The VM will only be running during actual backup (and restore) operations and otherwise shutdown. The Veeam server/plugin will orchestrate all of this for us
Now we can go ahead and add our remaining PVE hosts. We'll also deploy workers for each of them as this is the recommended best practice from Veeam.
Our workers can be found in the Backup Proxies view
With this in place we're ready to perform backups in our Proxmox environment
Test backup of workload
Note that there are a few limitations to the backup support. Please refer to this list from the official Veeam documentation
We'll perform a simple backup of one of the virtual machines to test the functionality
To test the backup of the VM we'll first write to a file inside the running VM
Now we'll start the New Backup Job wizard for Proxmox VE
Next we'll choose the virtual machines to include in this job. We could also have chosen the whole cluster or one or more of the hosts, but there's no way to choose by e.g. tags as there is with e.g. vSphere environments.
Next we'll choose the Backup repository and the days to store the backup
For this job we'll not set a schedule
With this in place we get the summary and the option to start the job when the wizard finishes
Since we chose to start the job immediately, the job is now starting
Over in our PVE UI we can see that the Veeam worker node has been started by the Veeam plugin
After a while the backup should be in process
And after another short while the backup is finished
Test restore of VM
Now, to test a restore of the VM we'll first add a few more lines to the text file
Let's now shutdown the VM and perform a restore of it
We'll find the backup job and initiate a full restore of the Proxmox VM
In the job we have only one VM and one restore point so we'll accept the VM restore selection
Next we could have selected to restore the VM to a different host, but we'll go ahead with the same location
We get a warning about an existing VM with the same id, which we'll accept
We'll need to type in a reason for the restore
And finally we have the summary where we can choose to start the restore job
In the Proxmox UI we can see that the Veeam worker has started, that it has deleted the old VM and started restoring the VM from backup
Depending on the underlying infrastructure (e.g. hypervisor host, network and storage) the restore operation takes some time.
After the restore has finished we can jump in to the VM and check the contents of our file
For these kind of restore operations, a File-level Restore would be more efficient. Check out this post for an example of this
Another use case for utilizing Veeam for Proxmox, if you already are running Veeam for your virtual environment, is to restore a VM from e.g. vSphere to Proxmox. I'll do a write up on this in an upcoming post.
Summary
This post has shown how to configure Veeam for backup and restore of a Proxmox Virtual Environment. We've seen how the architecture looks like with the Veeam server(s) and the workers which are fully managed by the Veeam server it self. And we've also seen how to backup and restore a VM in a PVE cluster.
This is a promising start from Veeam and hopefully they'll continue their work on the PVE integration. I would like to see a solution more like the VMware one where we don't have to add each of the hosts separately (I do understand that this depends on the Proxmox APIs). The same goes for the backup job selection, it would be nice to be able to add resources to a backup job dynamically (e.g. via tags or something similar). A more restrictive permission for the integration is also something they need to come up with.
As of my understanding there's also a need for the Veeam workers to download their updates from the internet. Hopefully Veeam will come with a solution for this going forward so we'll have full support for air-gapped environments.
The APIs for Veeam does not support Proxmox at this time, this is also something I hope they'll rectify going forward.
Thanks for reading, and please feel free to reach out if you have any questions or comments