Summary
- Running a single Pi-Hole instance means your entire network goes down when updates or configuration errors happen.
- Two Pi-Hole instances provide redundancy, meaning that your network can stay online even when one of the servers is down for updates, hardware swaps, or configuration changes.
- Keeping Pi-Hole instances in sync (with something like NebulaSync) is crucial as it allows changes made on the primary server to transfer to the backup automatically.
If you run a Pi-Hole server, you probably, like me, have experienced downtime when updating or rebooting the server. To fix this, I started running two Pi-Hole instances. Here’s how I did it, and how I keep them in sync, too.
Why Run Two Pi-Hole Instances?
I first tried Pi-Hole a few years ago, and it was nice as a content blocker and DNS manager. However, whenever I had to do maintenance to the machine it was on, my entire network would go down. Pi-Hole was my only DNS provider, and, without that, my computers didn’t know how to access the internet.
So, I gave up on the Pi-Hole journey for that time. A few years after that, I saw someone running two Pi-Hole instances, and it got me intrigued as to why. The answer is simple, and the solution to my earlier problem: redundancy.

Related
Why You Should Change Your DNS Server Today
Still using your ISP’s default DNS server? Change today and reap the benefits.
Most routers can use two DNS servers for redundancy. With a single Pi-Hole instance, you’re relying on only one DNS server. However, if you have two separate Pi-Holes running, then there’s both a primary and a secondary.
With this type of setup, when one Pi-Hole goes down, the other takes its place. When I redid my homelab, this is exactly what I did. My main application server runs my primary Pi-Hole instance, but I also have an older Raspberry Pi 3 B that runs a backup Pi-Hole instance.

Raspberry Pi 3 B
The Raspberry Pi 3 B is a single-board computer (SBC) with a 1.2GHz quad-core processor and 1GB RAM. With Gigabit Ethernet and HDMI output, it makes for a great small, low-power device to run smart home or homelab services like Home Assistant, Homebridge, Pi-Hole, or other software on.
If the Pi 3B goes down, nothing happens, as my main Pi-Hole instance is set as the primary DNS server. However, if my application server goes down for whatever reason, then the Pi 3B picks up as the backup.
Why would a server go down? Well, any number of reasons. The main one is simply just updating Pi-Hole. Updating the Docker container or the host can bring it down for several seconds or even longer, depending on the hardware you’re running Pi-Hole on. If something happens and a configuration file gets messed up or corrupted, then it could be offline for even longer.

Related
Docker for Beginners: Everything You Need to Know
Learn to use this incredibly popular development tool.
Another reason could simply be server maintenance. I might shut the VM down that houses the Docker container to add more RAM to it, or even shut the entire server down if I’m moving it in the rack or doing maintenance to the networking cables around it.
There are numerous reasons why a Pi-Hole server could go offline. So, in my network now, if the main server shuts off, the backup Pi-Hole simply kicks in and everything keeps on chugging along.
The Importance of Syncing Instances
While having two Pi-Hole instances is half the battle, you shouldn’t stop there. Having two installations of Pi-Hole going on separate machines is enough for redundancy, but you’ll want to keep them in sync too.
Why? Keeping the Pi-Hole instances synced means that whatever changes you make on the primary server get moved over to the backup. I’m often making small tweaks to my Pi-Hole config. It could be as simple as changing what my upstream DNS server is, or adding a domain to the allow/deny list, or even as complex as adding in DNS records for local domain resolutions.
Just a week or so ago, my wife clicked on an ad result on Google Search only to find that it was blocked by Pi-Hole. She frequently clicks those top results (as do I), so she asked if I could fix that. I added “www.googleadservices.com” to the allow list and presto, those top links are now working again. This also works when certain tracking functions of popular services break with Pi-Hole’s content-blocking lists, which you can modify to allow certain things through.
Regardless of what changes I’m making, I want them on both Pi-Hole installs. I could manually copy the changes over, but that takes a lot of work and is simply unnecessary.
Instead, I started with a service called OrbitalSync to keep the two Pi-Holes in sync. However, I’ve since migrated to NebulaSync as it included Pi-Hole V6 support from the start. With NebulaSync, you tell it the server information for your primary and secondary (tertiary, quaternary, and however many you have) installs, and give it log-in credentials, and it handles the process from there.
How to Keep Two Pi-Hole Instances in Sync
NebulaSync is a Docker container that you can run on any Docker host. I use Portainer to manage my Docker containers, and it makes it quite simple.
You’ll find the GitHub repository for NebulaSync has a Docker Compose file in the readme that has everything you need to get started. Simply replace the placeholder characters with your primary and secondary server address and password, and it’ll be up and running. The included chron timer is set to run once per hour.

Related
What is a Cron Job, and How Do You Use Them?
The cron utility is used for running scripts and commands at regular intervals, and at specific times and dates.
While OrbitalSync’s Pi-Hole V6 support is still in beta, NebulaSync supports the latest version out of the gate. This is one of the reasons that I recently switched from OrbitalSync to NebulaSync. Regardless of which software you choose to go with, I’ve had great success with both. NebulaSync just seems to be slightly more active in development and the team seems to have a little more time behind it.
NebulaSync is written in Go, and comes with an alternative installation method if you’re not a Docker fan. There are NebulaSync binary installation instructions, but Docker is the preferred and recommended way to run NebulaSync.
Now that you have Pi-Hole up and running on two devices, syncing every hour, why not give the content blocker a face lift? Check out how I changed the theme of my Pi-Hole installs to be a bit more fun and enjoyable to look at.