156 lines
4.3 KiB
Bash
156 lines
4.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Fix failed Ceph services and retry OSD creation
|
||
|
|
# Run on R630-01 as root
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Colors
|
||
|
|
RED='\033[0;31m'
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
DRIVES=("sdc" "sdd" "sde" "sdf" "sdg" "sdh")
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Fix Ceph Services and Create OSDs"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if running as root
|
||
|
|
if [ "$EUID" -ne 0 ]; then
|
||
|
|
echo -e "${RED}ERROR: Please run as root${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 1: Check Failed Services ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
echo "Monitor service status:"
|
||
|
|
systemctl status ceph-mon@r630-01.service --no-pager | head -15 || true
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "OSD service status:"
|
||
|
|
systemctl status ceph-osd@1.service --no-pager | head -15 || true
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 2: Check Service Logs ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
echo "Monitor service logs (last 20 lines):"
|
||
|
|
journalctl -u ceph-mon@r630-01.service -n 20 --no-pager | tail -10 || true
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "OSD service logs (last 20 lines):"
|
||
|
|
journalctl -u ceph-osd@1.service -n 20 --no-pager | tail -10 || true
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 3: Attempt to Start Services ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
echo "Starting monitor service..."
|
||
|
|
if systemctl start ceph-mon@r630-01.service 2>&1; then
|
||
|
|
sleep 3
|
||
|
|
if systemctl is-active --quiet ceph-mon@r630-01.service; then
|
||
|
|
echo -e "${GREEN} ✓ Monitor service started${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ Monitor service started but not active${NC}"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo -e "${RED} ✗ Failed to start monitor service${NC}"
|
||
|
|
echo " Check logs above for errors"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Starting OSD service..."
|
||
|
|
if systemctl start ceph-osd@1.service 2>&1; then
|
||
|
|
sleep 3
|
||
|
|
if systemctl is-active --quiet ceph-osd@1.service; then
|
||
|
|
echo -e "${GREEN} ✓ OSD service started${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ OSD service started but not active${NC}"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo -e "${RED} ✗ Failed to start OSD service${NC}"
|
||
|
|
echo " Check logs above for errors"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 4: Test Cluster Connectivity ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
echo "Testing cluster connectivity (5 second timeout)..."
|
||
|
|
if timeout 5 ceph health 2>&1; then
|
||
|
|
echo -e "${GREEN} ✓ Cluster is accessible${NC}"
|
||
|
|
echo ""
|
||
|
|
echo "Ceph health:"
|
||
|
|
ceph health
|
||
|
|
echo ""
|
||
|
|
echo "OSD tree:"
|
||
|
|
ceph osd tree
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ Cluster still not accessible${NC}"
|
||
|
|
echo " Services may need more time or have other issues"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Step 5: Create OSDs (if cluster accessible) ===${NC}"
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
# Test if cluster is accessible
|
||
|
|
if timeout 5 ceph health &>/dev/null; then
|
||
|
|
echo "Cluster is accessible. Creating OSDs..."
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
osd_count=0
|
||
|
|
for drive in "${DRIVES[@]}"; do
|
||
|
|
if [ ! -b "/dev/$drive" ]; then
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${BLUE} Creating OSD on /dev/$drive...${NC}"
|
||
|
|
|
||
|
|
# Try pveceph first (Proxmox tool)
|
||
|
|
if command -v pveceph &> /dev/null; then
|
||
|
|
if pveceph create "/dev/$drive" 2>&1 | tee /tmp/ceph-osd-${drive}.log; then
|
||
|
|
echo -e "${GREEN} ✓ OSD created on /dev/$drive (using pveceph)${NC}"
|
||
|
|
osd_count=$((osd_count + 1))
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Fallback to ceph-volume
|
||
|
|
if ceph-volume lvm create --data "/dev/$drive" 2>&1 | tee /tmp/ceph-osd-${drive}.log; then
|
||
|
|
echo -e "${GREEN} ✓ OSD created on /dev/$drive${NC}"
|
||
|
|
osd_count=$((osd_count + 1))
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW} ⚠ OSD creation had issues${NC}"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "Created $osd_count OSD(s) out of ${#DRIVES[@]} drives"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Verifying OSDs:"
|
||
|
|
ceph osd tree
|
||
|
|
echo ""
|
||
|
|
ceph health
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}Cluster not accessible. Cannot create OSDs yet.${NC}"
|
||
|
|
echo ""
|
||
|
|
echo "Next steps:"
|
||
|
|
echo "1. Fix service issues (check logs above)"
|
||
|
|
echo "2. Ensure services are running"
|
||
|
|
echo "3. Test cluster connectivity"
|
||
|
|
echo "4. Retry OSD creation"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo -e "${GREEN}Process Complete${NC}"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|