33 lines
1.1 KiB
Bash
33 lines
1.1 KiB
Bash
#!/bin/bash
|
|
# /usr/local/sbin/quorum-autofix.sh
|
|
# Automatically fix Proxmox cluster quorum to prevent "activity blocked"
|
|
|
|
LOGFILE="/var/log/quorum-autofix.log"
|
|
LOCAL_NODE=$(hostname)
|
|
|
|
# Extract Total votes (nodes currently online)
|
|
TOTAL=$(pvecm status | awk -F: '/Total votes:/ {gsub(/ /,"",$2); print $2}')
|
|
# Extract Expected votes (cluster configuration)
|
|
EXPECTED=$(pvecm status | awk -F: '/Expected votes:/ {gsub(/ /,"",$2); print $2}')
|
|
|
|
if [[ -z "$TOTAL" || -z "$EXPECTED" ]]; then
|
|
echo "[$(date)] [$LOCAL_NODE] Could not parse quorum status." >> $LOGFILE
|
|
exit 1
|
|
fi
|
|
|
|
# Current quorum in X/Y format
|
|
CURRENT="${TOTAL}/${EXPECTED}"
|
|
|
|
echo "[$(date)] [$LOCAL_NODE] Current quorum: $CURRENT" >> $LOGFILE
|
|
|
|
# Determine correct expected votes
|
|
if [[ "$TOTAL" -lt "$EXPECTED" ]]; then
|
|
echo "[$(date)] [$LOCAL_NODE] Total votes ($TOTAL) < Expected votes ($EXPECTED) → fixing quorum" >> $LOGFILE
|
|
pvecm expected "$TOTAL"
|
|
echo "[$(date)] [$LOCAL_NODE] Quorum fixed: expected votes set to $TOTAL" >> $LOGFILE
|
|
else
|
|
echo "[$(date)] [$LOCAL_NODE] Quorum OK, no change needed" >> $LOGFILE
|
|
fi
|
|
|
|
exit 0
|