#! /bin/bash . opts.sh [ $? -ne 0 -o -z "$gpod" ] && { echo "No storage pods are running..." ; exit 1 ; } [ -z "$1" ] && { echo "Usage: $0 [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