Glusterfs는 훌륭한 분산 파일 시스템이지만 파일의 무결성을 모니터 할 방법이 거의 없습니다. 서버가왔다 갔다 할 수 있고, 벽돌이 오래되거나 실패 할 수 있으며 아마도 너무 늦을 때 그 사실을 알기를 두려워합니다.
최근에 모든 것이 작동하는 것처럼 보였을 때 이상한 실패가 있었지만 벽돌 하나가 볼륨에서 떨어졌습니다 (순수한 우연의 일치로 발견).
GlusterFS 3.2 볼륨의 상태를 알려주는 간단하고 안정적인 방법 (크론 스크립트?)이 있습니까?
답변
이것은 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/
답변
모니터링에 사용할 수있는 nagios 플러그인이 있습니다 . 그러나 버전에 맞게 편집해야 할 수도 있습니다.
답변
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
답변
아래와 같이 glusterfs에 대한 nagios 모니터링을 구성 할 수있었습니다.
http://gopukrish.wordpress.com/2014/11/16/monitor-glusterfs-using-nagios-plugin/
답변
@Arie Skliarouk, check_gluster.sh
마지막 줄에 오타 exitst
가 exist
있습니다. 대신에 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