Glusterfs 볼륨을 모니터링하는 방법


12

Glusterfs는 훌륭한 분산 파일 시스템이지만 파일의 무결성을 모니터 할 방법이 거의 없습니다. 서버가왔다 갔다 할 수 있고, 벽돌이 오래되거나 실패 할 수 있으며 아마도 너무 늦을 때 그 사실을 알기를 두려워합니다.

최근에 모든 것이 작동하는 것처럼 보였을 때 이상한 실패가 있었지만 벽돌 하나가 볼륨에서 떨어졌습니다 (순수한 우연의 일치로 발견).

GlusterFS 3.2 볼륨의 상태를 알려주는 간단하고 안정적인 방법 (크론 스크립트?)이 있습니까?


지금 우리는 더러운 쉘 스크립트를 사용에 대한 모니터링을 기반으로 : check_gluster.sh
아리 Skliarouk


1
glfs-health.sh를 확인했는데 구성 파일로 제어되는 이전 버전의 glusterfs에 대한 것 같습니다. glusterfs 3.2를 나타내는 내 질문을 명확히 할 것입니다.
Arie Skliarouk

답변:


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 장-http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US에 GlusterFS 3.3 설치를 모니터링하기위한 특정 섹션의 관리자 안내서가 있습니다 . .pdf

다른 nagios 스크립트에 대해서는 여기를 참조하십시오-http: //code.google.com/p/glusterfs-status/


Chida에게 감사 드린다. github.com/semiosis/puppet-gluster 일부 사람들 은 proc 테이블 ( '--with-brick'등)과 로그 파일 (egrep 'E' 오류로 인해), 일부 사람들은 CLI를 사용하고 있으며 글 러스터의 상태를 정확하게보고 할 가능성이 더 큽니다.
r_2

CLI를 사용하는 것이 좋습니다. GlusterFS가 권장하는 최신 버전이므로 CLI를 사용하는 것이 좋습니다.
Chida


2

gluster 3.3 은 https://www.gluster.org/pipermail/gluster-users/2012-June/010709.html 에서 첨부 된 스크립트를 확인하십시오 . 아마도 글루 스터 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


1

@Arie Skliarouk, check_gluster.sh마지막 줄에 오타 exitstexist있습니다. 대신에 grep하십시오 . 좀 더 작고 임시 파일에 대한 요구 사항을 제거하기 위해 다시 작성했습니다.

#!/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

1
"종료"오타는 로그에 기록됩니다. 필자는 "컴팩트 한"이점을 구매하지 않습니다. 줄이 과부하 될 때 스크립트를 이해하기가 훨씬 어렵습니다. 임시 파일은 이해하기 쉬운 코드를 지불하기위한 저렴한 가격입니다.
Arie Skliarouk

@ArieSkliarouk : 두 경우 모두를 포함하도록 업데이트되었지만 2011 년 11 월에 관련 메시지가 제거되었다는 점에 유의하십시오. git.gluster.org/…를 참조하십시오 . 따라서 이것은 새로운 Glusters에서 작동하지 않을 것입니다. 짧은 코드를 이해하기가 더 어렵다고 생각하면 괜찮지 만 임시 파일을 사용하는 것보다 훨씬 강력하므로 해당 속성이 부족하다고 판단되는 경우이를 무시하지 않고 가독성을 높이기 위해 리팩토링을 고려하십시오.
BMDan

1
익명의 편집자 gluster volume info | awk ...가로 축약 될 수 있다고 언급했습니다 gluster volume list.
Lekensteyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.