Как отслеживать объемы glusterfs

12

Glusterfs, будучи хорошей распределенной файловой системой, почти не предоставляет возможности контролировать ее целостность. Серверы могут приходить и уходить, кирпичи могут устаревать или выходить из строя, и я боюсь знать об этом, когда, вероятно, будет слишком поздно.

Недавно у нас произошел странный сбой, когда все оказалось работающим, но из объема выпал один кирпич (найденный по чистой случайности).

Есть ли простой и надежный способ (cron script?), Который позволит мне узнать о состоянии моего тома GlusterFS 3.2 ?

Арье Склярук
источник
Сейчас мы используем мониторинг на основе грязного сценария: check_gluster.sh
Арье Склиарук,
Посмотрите на glfs-health.sh .
кванты
1
Я проверил glfs-health.sh и похоже, что это для старых версий glusterfs, которые контролировались конфигурационным файлом. Я уточню свой вопрос, чтобы представлять Glusterfs 3.2.
Арье Склярук

Ответы:

3

Это было просьбой разработчиков GlusterFS некоторое время, и нет ничего из готового решения, которое вы можете использовать. Однако с помощью нескольких скриптов это не невозможно.

Практически вся система Gluster управляется одной командой Gluster, и с помощью нескольких опций вы можете сами написать сценарии мониторинга состояния. Смотрите здесь для получения информации о кирпичах и объемах - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Displaying_Volume_Information

Чтобы отслеживать производительность, просмотрите эту ссылку - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Monitoring_your_GlusterFS_Workload

ОБНОВЛЕНИЕ: Рассмотрите возможность обновления до http://gluster.org/community/documentation/index.php/About_GlusterFS_3.3

Вам всегда лучше быть в последней версии, так как они, кажется, содержат больше исправлений ошибок и хорошо поддерживаются. Конечно, запустите свои собственные тесты, прежде чем переходить на более новую версию - http://vbellur.wordpress.com/2012/05/31/upgrading-to-glusterfs-3-3/ :)

В главе 10 есть руководство администратора с определенным разделом для мониторинга вашей установки GlusterFS 3.3 - http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US .pdf

Смотрите здесь для другого сценария nagios - http://code.google.com/p/glusterfs-status/

Chida
источник
Спасибо Чида, я думаю, что меня зацепило то, что некоторые люди ( github.com/semiosis/puppet-gluster ) следят за Gluster через таблицу процедур ('--with-brick' и т. Д.) И файлы журналов (например, Reprep 'E'). из-за ошибки), и некоторые люди используют CLI, и я понятия не имею, что с большей вероятностью точно сообщит о состоянии кластера.
r_2
Я бы порекомендовал использовать CLI, так как это тот, который рекомендует GlusterFS, и он должен быть обновленным.
Чида
2

Пожалуйста, проверьте прикрепленный скрипт на https://www.gluster.org/pipermail/gluster-users/2012-June/010709.html для Gluster 3.3; это, вероятно, легко адаптируется к Gluster 3.2.

#!/bin/bash

# This Nagios script was written against version 3.3 of Gluster.  Older
# versions will most likely not work at all with this monitoring script.
#
# Gluster currently requires elevated permissions to do anything.  In order to
# accommodate this, you need to allow your Nagios user some additional
# permissions via sudo.  The line you want to add will look something like the
# following in /etc/sudoers (or something equivalent):
#
# Defaults:nagios !requiretty
# nagios ALL=(root) NOPASSWD:/usr/sbin/gluster peer status,/usr/sbin/gluster volume list,/usr/sbin/gluster volume heal [[\:graph\:]]* info
#
# That should give us all the access we need to check the status of any
# currently defined peers and volumes.

# define some variables
ME=$(basename -- $0)
SUDO="/usr/bin/sudo"
PIDOF="/sbin/pidof"
GLUSTER="/usr/sbin/gluster"
PEERSTATUS="peer status"
VOLLIST="volume list"
VOLHEAL1="volume heal"
VOLHEAL2="info"
peererror=
volerror=

# check for commands
for cmd in $SUDO $PIDOF $GLUSTER; do
    if [ ! -x "$cmd" ]; then
        echo "$ME UNKNOWN - $cmd not found"
        exit 3
    fi
done

# check for glusterd (management daemon)
if ! $PIDOF glusterd &>/dev/null; then
    echo "$ME CRITICAL - glusterd management daemon not running"
    exit 2
fi

# check for glusterfsd (brick daemon)
if ! $PIDOF glusterfsd &>/dev/null; then
    echo "$ME CRITICAL - glusterfsd brick daemon not running"
    exit 2
fi

# get peer status
peerstatus="peers: "
for peer in $(sudo $GLUSTER $PEERSTATUS | grep '^Hostname: ' | awk '{print $2}'); do
    state=
    state=$(sudo $GLUSTER $PEERSTATUS | grep -A 2 "^Hostname: $peer$" | grep '^State: ' | sed -nre 's/.* \(([[:graph:]]+)\)$/\1/p')
    if [ "$state" != "Connected" ]; then
        peererror=1
    fi
    peerstatus+="$peer/$state "
done

# get volume status
volstatus="volumes: "
for vol in $(sudo $GLUSTER $VOLLIST); do
    thisvolerror=0
    entries=
    for entries in $(sudo $GLUSTER $VOLHEAL1 $vol $VOLHEAL2 | grep '^Number of entries: ' | awk '{print $4}'); do
        if [ "$entries" -gt 0 ]; then
            volerror=1
            let $((thisvolerror+=entries))
        fi
    done
    volstatus+="$vol/$thisvolerror unsynchronized entries "
done

# drop extra space
peerstatus=${peerstatus:0:${#peerstatus}-1}
volstatus=${volstatus:0:${#volstatus}-1}

# set status according to whether any errors occurred
if [ "$peererror" ] || [ "$volerror" ]; then
    status="CRITICAL"
else
    status="OK"
fi

# actual Nagios output
echo "$ME $status $peerstatus $volstatus"

# exit with appropriate value
if [ "$peererror" ] || [ "$volerror" ]; then
    exit 2
else
    exit 0
fi
S19N
источник
1

@ Арье Склярук, у тебя check_gluster.shесть опечатка - на последней строчке ты говоришь exitstвместо exist. Я пошел дальше и переписал его, чтобы он был немного более компактным и убрал требование для временного файла.

#!/bin/bash

# Ensure that all peers are connected
gluster peer status | grep -q Disconnected && echo "Peer disconnected." && exit 1

# Ensure that all bricks have a running log file (i.e., are sending/receiving)
for vol in $(gluster volume list); do
  for brick in $(gluster volume info "$vol" | awk '/^Brick[0-9]*:/ {print $2}'); do
    gluster volume log locate "$vol" "$brick";
  done;
done |
 grep -qE "does not (exist|exitst)" &&
 echo "Log file missing - $vol/$brick ." &&
 exit 1
BMDan
источник
1
Опечатка exitst - это то, что написано в журналах. Я не покупаю «компактное» преимущество - сценарий намного сложнее понять, когда строки перегружены. Временный файл - это дешевая цена за простой в понимании код.
Арье Склярук
@ArieSkliarouk: Обновлено, чтобы охватить оба случая, но имейте в виду, что соответствующее сообщение было удалено в ноябре 2011 года; см. git.gluster.org/… . Таким образом, это, вероятно, не будет работать на более новых Glusters. Если вам кажется, что более короткий код сложнее для понимания, это нормально, но он значительно более надежен, чем использование временного файла, поэтому рассмотрите возможность рефакторинга его для удобства чтения вместо того, чтобы отклонить его из-за нехватки этого атрибута.
BMDan
1
Анонимный редактор отметил, что gluster volume info | awk ...может быть сокращено до gluster volume list.
Лекенштейн