summaryrefslogtreecommitdiffstats
path: root/scripts/gluster.sh
blob: 02a0a3f20ec93a6e4ed9551a15366300b607a813 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#! /bin/bash

. opts.sh

[ $? -ne 0 -o -z "$gpod" ] && { echo "No storage pods are running..." ; exit 1 ; }
[ -z "$1" ] && { echo "Usage: $0 <info|heal|migrate> <vol|all> [src] [dst]" ; exit 1 ; }
action=$1
shift


function info {
    vol=$1

    status=$(gluster volume info databases | grep -P 'Status' | awk '{ print $2 }' | tr -d '\r\n')
    bricks=$(gluster volume info "$vol"  | grep -P 'Number of Bricks' | awk '{ print $NF }' | tr -d '\r\n')
    avail=$(gluster volume status "$vol" detail | grep Brick | wc -l)
    online=$(gluster volume status "$vol" detail | grep Online | grep Y | wc -l)
    
    echo "Volume $vol: $status (Bricks: $bricks, Available: $avail, Online: $online)"
}

function heal {
    vol=$1

    distributed=0
    gluster volume info "$vol" | grep "Type:" | grep -i "Distribute" &> /dev/null
    [ $? -eq 0 ] && distributed=1

    echo "Healing volume $vol"
    echo "-------------------"
    gluster volume heal "$vol" full
    gluster volume heal "$vol" info
    
    if [ $distributed -eq 1 ]; then
        echo "Rebalancing distributed volume $vol"
        gluster volume rebalance "$vol" fix-layout start
    fi
    
    
    gluster volume status "$vol"
}

function migrate {
    vol=$1
    src=$2
    dst=$3
    
    [ -z "$src" -o -z "$dst" ] && { echo "Source and destination servers are required" ; exit 1 ; }

    src_brick=$(gluster volume info $vol | grep -P '^Brick\d+:' | awk '{ print $2 }' | grep -P "^$src" | tr -d '\r\n' )
    dst_brick=${src_brick/$src/$dst}

    [ -z "$src_brick" -o -z "$dst_brick" ] && return 0

    echo "Volume $vol: migrating failed brick"
    echo "             from $src_brick"
    echo "               to $dst_brick"
    echo "Press enter to continue"
    read
    [ $? -ne 0 ] && exit

    gluster volume replace-brick $vol "$src_brick" "$dst_brick"  commit force
    heal $vol
}
    
    

#
#    heal $1


if [ -n "$1" -a "$1" != "all" ]; then
    eval "$action" "$@"
else
    [ "$1" == "all" ] && shift

    vols=$(gluster volume info | grep -P '^Volume Name' | awk '{ print $NF }' | tr '\r\n' '  ')
    for vol in $vols; do
        [[ "$vol" =~ [0-9] ]] && continue
        [[ "$vol" =~ ^vol_ ]] && continue
        [[ "$vol" =~ ^heketi ]] && continue

        eval "$action" "$vol" "$@"
    done
fi