Setup scripts added
This commit is contained in:
113
scripts/setup_keepalived.sh
Normal file
113
scripts/setup_keepalived.sh
Normal file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Keepalived Setup Script for 5-Node Docker Cluster
|
||||
# VIP: 140.44.4.70
|
||||
# Nodes: 140.44.4.71 - 140.44.4.75
|
||||
#
|
||||
# Usage: sudo bash setup_keepalived.sh
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
log "ERROR: This script must be run as root (use sudo)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VIP="140.44.4.70"
|
||||
VIP_CIDR="24"
|
||||
ROUTER_ID="70"
|
||||
AUTH_PASS="DockerHA123!"
|
||||
|
||||
log "Detecting primary network interface and IP..."
|
||||
# Find interface with default route to the gateway (140.44.4.1)
|
||||
IFACE=$(ip route | awk '/default/ {print $5}' | head -n1)
|
||||
if [ -z "$IFACE" ]; then
|
||||
log "ERROR: Could not detect default network interface."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Find IP of that interface
|
||||
MY_IP=$(ip -4 addr show dev "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
if [ -z "$MY_IP" ]; then
|
||||
log "ERROR: Could not detect IP address for interface $IFACE."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Detected IP: $MY_IP on interface: $IFACE"
|
||||
|
||||
# Validate IP and determine priority
|
||||
case "$MY_IP" in
|
||||
140.44.4.71) PRIORITY=150; STATE="MASTER" ;;
|
||||
140.44.4.72) PRIORITY=140; STATE="BACKUP" ;;
|
||||
140.44.4.73) PRIORITY=130; STATE="BACKUP" ;;
|
||||
140.44.4.74) PRIORITY=120; STATE="BACKUP" ;;
|
||||
140.44.4.75) PRIORITY=110; STATE="BACKUP" ;;
|
||||
*)
|
||||
log "ERROR: This IP ($MY_IP) is not part of the expected cluster (140.44.4.71-75)."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
log "Installing keepalived..."
|
||||
if command -v apt-get &> /dev/null; then
|
||||
apt-get update -y && apt-get install -y keepalived
|
||||
elif command -v dnf &> /dev/null; then
|
||||
dnf install -y keepalived
|
||||
elif command -v yum &> /dev/null; then
|
||||
yum install -y keepalived
|
||||
else
|
||||
log "ERROR: Unsupported package manager. Please install keepalived manually."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Configuring keepalived (State: $STATE, Priority: $PRIORITY)..."
|
||||
|
||||
# Create a health check script for Docker
|
||||
mkdir -p /etc/keepalived/scripts
|
||||
cat << 'EOF' > /etc/keepalived/scripts/check_docker.sh
|
||||
#!/bin/bash
|
||||
# Returns 0 if docker is active, 1 if it is stopped/crashed
|
||||
systemctl is-active --quiet docker
|
||||
EOF
|
||||
chmod +x /etc/keepalived/scripts/check_docker.sh
|
||||
|
||||
# Backup existing config if any
|
||||
[ -f /etc/keepalived/keepalived.conf ] && mv /etc/keepalived/keepalived.conf "/etc/keepalived/keepalived.conf.bak.$(date +%s)"
|
||||
|
||||
# Create new config
|
||||
cat << EOF > /etc/keepalived/keepalived.conf
|
||||
vrrp_script chk_docker {
|
||||
script "/etc/keepalived/scripts/check_docker.sh"
|
||||
interval 2
|
||||
weight -20
|
||||
}
|
||||
|
||||
vrrp_instance VI_1 {
|
||||
state $STATE
|
||||
interface $IFACE
|
||||
virtual_router_id $ROUTER_ID
|
||||
priority $PRIORITY
|
||||
advert_int 1
|
||||
authentication {
|
||||
auth_type PASS
|
||||
auth_pass $AUTH_PASS
|
||||
}
|
||||
virtual_ipaddress {
|
||||
$VIP/$VIP_CIDR dev $IFACE
|
||||
}
|
||||
track_script {
|
||||
chk_docker
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
log "Restarting and enabling keepalived service..."
|
||||
systemctl enable keepalived
|
||||
systemctl restart keepalived
|
||||
|
||||
log "=== Keepalived setup complete on $MY_IP ==="
|
||||
log "Check status with: systemctl status keepalived"
|
||||
log "Virtual IP $VIP will be active on the node with the highest priority."
|
||||
Reference in New Issue
Block a user