CentOS 7 is end of life, and if you’re running Splunk, that eventually becomes your problem — not because Splunk 9.4 cares, but because Splunk 10.x won’t support it, and the Cluster Manager isn’t the kind of box you want to be dragging into an OS upgrade and a version upgrade at the same time. This post walks through how we approached moving a Cluster Manager (CM) off CentOS and onto Ubuntu, and what we learned along the way about which parts of Splunk clustering actually need careful handling.
Nothing exotic: one cluster manager, two indexers, one search head, one deployment server. The CM also happened to be doing double duty as license manager and monitoring console.
Our first instinct was to reach for Splunk’s built-in manager node redundancy — stand up a second CM, make it an active/standby pair, fail over, retire the old one. We actually built and tested this locally first: two CMs, manager_switchover_mode, pass4SymmKey, the whole thing, fronted first by an HAProxy load balancer and later by a hand-rolled /etc/hosts-based DNS simulation.
It worked. But it also made clear why you wouldn’t want to do this for a simple OS swap on a small, single-site cluster. Redundancy mode requires every peer and the search head to be configured with both managers, plus a rolling restart to apply it, and a second rolling restart later to remove the standby again once you’re done. That’s two change windows to accomplish what should be one.
So we didn’t use it. The real insight, once we sat with it, is this: A Cluster Manager holds very little unique, persistent state. It rebuilds its peer registry and bucket map from the peers themselves on every startup. What actually needs to survive a CM replacement is its identity — not a live failover mechanism.
That reframing turned a redundancy project into a much simpler one: build a new CM with the same identity as the old one, point the peers at it, verify, done.
Three things make a CM “the same CM” from the peers’ point of view:
Get those three right, and the rest is just pointing peers at a new IP and restarting them one at a time.
The two co-located roles turned out to be their own small projects:
It’s easy to forget both, since neither one is really about clustering — but skipping them causes real problems later.
Once the CM was sorted, replacing the two indexers (also moving CentOS → Ubuntu) turned out to be simpler in a real way: indexers don’t hold cluster identity, they just get config pushed to them. The pattern was:
splunk offline --enforce-counts
splunk remove cluster-peers -peers <guid>,<guid>,<guid>,...
You can also remove the peer from the manager’s list by restarting the manager.
A Cluster Manager’s replaceability comes down to three files and a lot of patience with restart; everything else — redundancy, load balancers, DNS tricks — is there for when you actually need automatic failover, not for a routine OS swap you’re doing once, carefully, in a maintenance window.
https://help.splunk.com/en/data-management/manage-splunk-enterprise-indexers/9.2/manage-the-indexer-cluster/take-a-peer-offline
https://help.splunk.com/en/data-management/manage-splunk-enterprise-indexers/9.2/manage-the-indexer-cluster/remove-a-peer-from-the-manager-nodes-list
https://help.splunk.com/en/splunk-enterprise/get-started/install-and-upgrade/10.4/plan-your-splunk-enterprise-installation/system-requirements-for-use-of-splunk-enterprise-on-premises