glusterfsボリュームを監視する方法


12

Glusterfsは優れた分散ファイルシステムですが、整合性を監視する方法はほとんどありません。サーバーが行き来する可能性があり、レンガが古くなったり失敗したりする可能性があります。

最近、すべてが機能しているように見えたときに奇妙な失敗がありましたが、ボリュームから1つのレンガが落ちました(純粋な偶然によって発見されました)。

GlusterFS 3.2ボリュームの正常性状態を知らせるシンプルで信頼できる方法(cronスクリプト?)はありますか?


今、私たちは汚いシェルスクリプトを使用するための監視ベース:check_gluster.sh
アリーSkliarouk


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章で3.3のインストールをあなたのGlusterFSを監視するための特定のセクションを持つ管理者ガイドがあります- 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/


チダのおかげで、私がハングアップしたのは、一部の人々(github.com/semiosis/puppet-gluster)がprocテーブル(「--with-brick」など)とログファイル(egrep 'E'エラーのため)、そして一部の人々はCLIを使用しており、私はglusterの状態をより正確に報告する可能性が高いという見当がつかない。
r_2

CLIを使用することをお勧めします。これはGlusterFSが推奨するものであり、最新の状態にバインドされているためです。
チダ


2

gluster 3.3については、https: //www.gluster.org/pipermail/gluster-users/2012-June/010709.htmlの添付スクリプトを確認してください。おそらく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


1

@Arie Skliarouk、あなたcheck_gluster.shにはタイプミスがあります。最後の行では、のexitst代わりにgrepを使います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

1
「exitst」タイプミスは、ログに書き込まれるものです。「コンパクトな」利点を購入しません-行が過負荷になると、スクリプトを理解するのがはるかに難しくなります。一時ファイルは、わかりやすいコードに支払う安価な価格です。
アリースクリアルーク

@ArieSkliarouk:両方のケースをカバーするように更新しましたが、関連するメッセージが2011年11月に削除されたことに注意してください。git.gluster.org/…を参照してください。したがって、これは新しいGlustersでは機能しない可能性があります。短いコードを理解するのが難しい場合、それは問題ありませんが、一時ファイルを使用するよりもはるかに堅牢であるため、その属性の知覚された不足のためにそれを却下するのではなく、読みやすさのためにそれをリファクタリングすることを検討してください。
BMD

1
匿名の編集者は、それgluster volume info | awk ...をに短縮できることに注意しましたgluster volume list
Lekensteyn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.