Cara memonitor volume glusterfs

12

Glusterfs, sementara menjadi sistem file terdistribusi yang bagus, hampir tidak menyediakan cara untuk memantau integritasnya. Server bisa datang dan pergi, batu bata bisa basi atau gagal dan saya takut tahu tentang itu ketika mungkin sudah terlambat.

Baru-baru ini kami mengalami kegagalan aneh ketika semuanya tampak berfungsi, tetapi satu batu bata jatuh dari volume (ditemukan oleh kebetulan murni).

Apakah ada cara yang sederhana dan dapat diandalkan (skrip cron?) Yang akan memberi tahu saya tentang status kesehatan volume GlusterFS 3.2 saya ?

Arie Skliarouk
sumber
Untuk saat ini kami menggunakan pemantauan berbasis skrip shell kotor: check_gluster.sh
Arie Skliarouk
Lihatlah glfs-health.sh .
quanta
1
Saya memeriksa glfs-health.sh dan sepertinya itu untuk glusterf versi lama, yang dikendalikan oleh konfigurasi-file. Saya akan mengklarifikasi pertanyaan saya untuk mewakili glusterfs 3.2.
Arie Skliarouk

Jawaban:

3

Ini telah menjadi permintaan bagi pengembang GlusterFS untuk sementara waktu sekarang dan tidak ada solusi out-of-the-box yang dapat Anda gunakan. Namun, dengan beberapa skrip itu bukan tidak mungkin.

Hampir seluruh sistem Gluster dikelola oleh satu perintah gluster dan dengan beberapa opsi, Anda dapat menulis sendiri skrip pemantauan kesehatan. Lihat di sini untuk info daftar batu bata dan volume - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Displaying_Volume_Information

Untuk memantau kinerja, lihat tautan ini - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Monitoring_your_GlusterFS_Workload

UPDATE: Pertimbangkan untuk meningkatkan ke http://gluster.org/community/documentation/index.php/About_GlusterFS_3.3

Anda selalu lebih baik dengan berada di rilis terbaru karena mereka tampaknya memiliki lebih banyak perbaikan bug dan didukung dengan baik. Tentu, jalankan tes Anda sendiri sebelum pindah ke rilis yang lebih baru - http://vbellur.wordpress.com/2012/05/31/upgrading-to-glusterfs-3-3/ :)

Ada panduan admin dengan bagian spesifik untuk memantau instalasi GlusterFS 3.3 Anda di Bab 10 - http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US .pdf

Lihat di sini untuk skrip nagios lain - http://code.google.com/p/glusterfs-status/

Chida
sumber
Terima kasih Chida, saya kira apa yang membuat saya menutup telepon adalah bahwa beberapa orang ( github.com/semiosis/puppet-gluster ) memantau gluster melalui tabel proc ('--with-brick', dll) dan file log (egrep 'E' untuk kesalahan), dan beberapa orang menggunakan CLI dan saya tidak tahu mana yang lebih mungkin melaporkan keadaan gluster secara akurat.
r_2
Saya akan merekomendasikan menggunakan CLI karena itulah yang direkomendasikan GlusterFS dan pasti akan selalu mutakhir.
Chida
2

Silakan periksa skrip terlampir di https://www.gluster.org/pipermail/gluster-users/2012-June/010709.html untuk gluster 3.3; mungkin mudah beradaptasi dengan 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
sumber
1

@Arie Skliarouk, Anda check_gluster.shsalah ketik — pada baris terakhir, Anda menerima exitstalih - alih exist. Saya pergi ke depan dan menulis ulang menjadi sedikit lebih kompak, dan untuk menghapus persyaratan untuk file sementara.

#!/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
sumber
1
Kesalahan "exitst" adalah apa yang tertulis dalam log. Saya tidak membeli keuntungan "kompak" - skrip jauh lebih sulit untuk dipahami ketika garis kelebihan beban. File sementara adalah harga murah untuk membayar kode yang mudah dipahami.
Arie Skliarouk
@ArieSkliarouk: Diperbarui untuk mencakup kedua kasus, tetapi diperingatkan bahwa pesan yang relevan telah dihapus pada November 2011; lihat git.gluster.org/… . Dengan demikian, ini sepertinya tidak akan bekerja pada Gluster yang lebih baru. Jika Anda menemukan kode pendek lebih sulit untuk dipahami, itu bagus, tetapi secara signifikan lebih kuat daripada menggunakan file sementara, jadi pertimbangkan refactoring untuk dibaca daripada mengabaikannya karena dianggap kurang atribut itu.
BMDan
1
Editor anonim mencatat bahwa gluster volume info | awk ...dapat disingkat gluster volume list.
Lekensteyn