blob: 9efea4550aeea097f6e1956d7d004283dc1f5b2e (
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
86
87
88
89
|
#! /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 [ -z "$1" -a "$1" =~ ^all ]; then
all=0
[ "$1" == "all_heketi" ] && all=1
[ "$1" =~ ^all ] && shift
vols=$(gluster volume info | grep -P '^Volume Name' | awk '{ print $NF }' | tr '\r\n' ' ')
for vol in $vols; do
if [ $all -eq 0 ]; then
[[ "$vol" =~ [0-9] ]] && continue
[[ "$vol" =~ ^vol_ ]] && continue
[[ "$vol" =~ ^heketi ]] && continue
fi
eval "$action" "$vol" "$@"
done
else
eval "$action" "$@"
fi
|