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.

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:

  1. 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
  2. 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 #####
  3. 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 #####
  4. 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.

  5. Restart the Corosync service when membership changes require a full restart.
    $ sudo systemctl restart corosync

    Restarting corosync can trigger membership changes and resource failover.

  6. Restart the Pacemaker service after configuration changes.
    $ sudo systemctl restart pacemaker

    Restarting pacemaker can move resources or interrupt clustered workloads.

  7. 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.

  8. Stop the Corosync service to fully leave the cluster.
    $ sudo systemctl stop corosync

    Stopping corosync breaks cluster membership for the node.

  9. Start the Corosync service after maintenance.
    $ sudo systemctl start corosync
  10. Start the Pacemaker service after corosync is running.
    $ sudo systemctl start pacemaker
  11. Restart the pcsd daemon when remote pcs management is used.
    $ sudo systemctl restart pcsd

    The pcsd.service unit is not present on every distribution.

  12. 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.

  13. 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.

  14. 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".
  15. 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.
  16. 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 #####
  17. 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 #####
  18. 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 #####