Managing Pacemaker services keeps the cluster stable during upgrades, configuration changes, and recovery work where controlled restarts matter more than optimism. Clean service operations prevent the classic “split brain by accident” outcome where nodes disagree loudly and workloads pay the bill.
A typical stack runs corosync for membership and messaging and pacemaker for resource orchestration, both supervised by systemd. On many distributions, the pcsd daemon exposes the pcs API for remote administration, while systemctl and journalctl provide the primary control and troubleshooting surface for the underlying units.
Stopping or restarting cluster services can move resources, drop quorum, or trigger fencing depending on policy and current cluster state. Schedule service work in a maintenance window, keep console access available, and avoid impacting multiple nodes simultaneously unless a full-cluster shutdown is planned.
Related: How to create a Pacemaker cluster
Related: How to create a floating IP address in Pacemaker
| Component | Common unit name | Purpose |
|---|---|---|
| Corosync | corosync.service | Cluster messaging and membership |
| Pacemaker | pacemaker.service | Resource management |
| PCS daemon | pcsd.service | Remote management API for pcs |
| Quorum device (optional) | corosync-qdevice.service | Helps maintain quorum with a QDevice |
Steps to manage Pacemaker cluster services with systemctl in Linux:
- List installed cluster service units.
$ systemctl list-unit-files --type=service | grep --extended-regexp '^(pacemaker|corosync|pcsd)\.service' corosync.service enabled enabled pacemaker.service enabled enabled pcsd.service enabled enabled
- Check the Corosync service status.
$ sudo systemctl status corosync --no-pager ● corosync.service - Corosync Cluster Engine Loaded: loaded (/usr/lib/systemd/system/corosync.service; enabled; preset: enabled) Active: active (running) since Wed 2025-12-31 11:26:55 UTC; 1h 14min ago Docs: man:corosync man:corosync.conf man:corosync_overview ##### snipped ##### - Check the Pacemaker service status.
$ sudo systemctl status pacemaker --no-pager ● pacemaker.service - Pacemaker High Availability Cluster Manager Loaded: loaded (/usr/lib/systemd/system/pacemaker.service; enabled; preset: enabled) Active: active (running) since Wed 2025-12-31 11:26:55 UTC; 1h 14min ago Docs: man:pacemakerd https://clusterlabs.org/pacemaker/doc/ ##### snipped ##### - Check the pcsd service status when the unit is present.
$ sudo systemctl status pcsd --no-pager ● pcsd.service - PCS GUI and remote configuration interface Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; preset: enabled) Active: active (running) since Wed 2025-12-31 08:13:15 UTC; 4h 28min ago Docs: man:pcsd(8) man:pcs(8) ##### snipped #####The pcsd.service unit is not present on every distribution.
- Restart the Corosync service when membership changes require a full restart.
$ sudo systemctl restart corosync
Restarting corosync can trigger membership changes and resource failover.
- Restart the Pacemaker service after configuration changes.
$ sudo systemctl restart pacemaker
Restarting pacemaker can move resources or interrupt clustered workloads.
- Stop the Pacemaker service to take a node out of the cluster.
$ sudo systemctl stop pacemaker
Use pcs node standby to drain resources before stopping pacemaker when a clean evacuation is required.
Stopping pacemaker removes the node from resource management until the service is started again.
- Stop the Corosync service to fully leave the cluster.
$ sudo systemctl stop corosync
Stopping corosync breaks cluster membership for the node.
- Start the Corosync service after maintenance.
$ sudo systemctl start corosync
- Start the Pacemaker service after corosync is running.
$ sudo systemctl start pacemaker
- Restart the pcsd daemon when remote pcs management is used.
$ sudo systemctl restart pcsd
The pcsd.service unit is not present on every distribution.
- Disable cluster services on boot when a node must stay out of the cluster.
$ sudo systemctl disable --now pacemaker corosync Synchronizing state of pacemaker.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable pacemaker Synchronizing state of corosync.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable corosync Removed "/etc/systemd/system/multi-user.target.wants/pacemaker.service". Removed "/etc/systemd/system/multi-user.target.wants/corosync.service".
Disabling cluster services prevents the node from joining after reboot.
- Mask cluster services to prevent accidental starts when the node must remain out of the cluster.
$ sudo systemctl mask pacemaker corosync Created symlink /etc/systemd/system/pacemaker.service → /dev/null. Created symlink /etc/systemd/system/corosync.service → /dev/null.
Masked units cannot be started until unmasked.
- Unmask cluster services before rejoining when units were previously masked.
$ sudo systemctl unmask pacemaker corosync Removed "/etc/systemd/system/pacemaker.service". Removed "/etc/systemd/system/corosync.service".
- Enable cluster services on boot after maintenance.
$ sudo systemctl enable --now corosync pacemaker Synchronizing state of corosync.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable corosync Synchronizing state of pacemaker.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable pacemaker Created symlink /etc/systemd/system/multi-user.target.wants/corosync.service → /usr/lib/systemd/system/corosync.service. Created symlink /etc/systemd/system/multi-user.target.wants/pacemaker.service → /usr/lib/systemd/system/pacemaker.service.
- Review recent Corosync logs when the unit fails.
$ sudo journalctl --unit=corosync.service --no-pager --lines=50 Dec 31 11:26:55 node-01 corosync[11118]: [MAIN ] Completed service synchronization, ready to provide service. Dec 31 11:26:55 node-01 systemd[1]: Started corosync.service - Corosync Cluster Engine. Dec 31 11:26:57 node-01 corosync[11118]: [KNET ] rx: host: 3 link: 0 is up ##### snipped #####
- Review recent Pacemaker logs when the unit fails.
$ sudo journalctl --unit=pacemaker.service --no-pager --lines=50 Dec 31 11:56:23 node-01 pacemaker-schedulerd[11133]: notice: Calculated transition 11, saving inputs in /var/lib/pacemaker/pengine/pe-input-13.bz2 Dec 31 11:56:23 node-01 pacemaker-controld[11134]: notice: Transition 11 (Complete=0, Pending=0, Fired=0, Skipped=0, Incomplete=0, Source=/var/lib/pacemaker/pengine/pe-input-13.bz2): Complete Dec 31 11:56:23 node-01 pacemaker-controld[11134]: notice: State transition S_TRANSITION_ENGINE -> S_IDLE ##### snipped #####
- Verify cluster health after service operations.
$ sudo pcs status Cluster name: clustername Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: node-01 (version 2.1.6-6fdc9deea29) - partition with quorum ##### snipped #####
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.
