あーかいぶすハイディフィニション

ここはもう更新しとらんのじゃ

MySQL Cluster を監視する

榛名ちゃんに監視されたい(くれちん)。

ちょうど一年くらい前に書いたスクリプトです、当時は頭が回ってなかったので1ファイルで完結しなかった。ので、そのうち近代化改修したいけど、これでも目的は達成出来てるのでいいかな、と思ってます。

#!/bin/sh

# スクリプト実行前に
# vi /tmp/ndbd_alivecheck.log
# -> 0
# chown maintenance:maintenance /tmp/ndbd_alivecheck.log
#
# user env.
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
export LANG=ja_JP.UTF-8

MAIL_TO="ndbdhogefuga@example.com"

# set PATH
PATH_NDBMGM="/usr/bin/ndb_mgm"
PATH_CLUSTERROOT="/var/lib/mysql-cluster/"
PATH_CLUSTERERRFILE=${PATH_CLUSTERROOT}"ndb_11_error.log"
PATH_TMPFAILLOG="/tmp/ndbd_alivecheck.log"

# set PID
PID_FILENAME="ndb_11.pid"
PID_PATH=${PATH_CLUSTERROOT}${PID_FILENAME}
PID_NUMBER=`cat ${PID_PATH}`

# set local machine infomation
MACHINE_HOSTNAME=`hostname`
MACHINE_ACTIVEIP=`LANG=C /sbin/ifconfig | grep 'inet ' | awk '{print $2;}' | cut -d: -f2`
MACHINE_NDBSTATUS=`${PATH_NDBMGM} -e show`

# set check variables
unset CHECK_PROCESS
CHECK_FAILLOG=`cat ${PATH_TMPFAILLOG}`
CHECK_PROCESS=`ps ${PID_NUMBER} | grep ndbd`

# set alert message
if [ -e "${PATH_CLUSTERERRFILE}" ]; then
  MSG_CLUSTERERR="
  output ${PATH_CLUSTERERRFILE} >------------------------------------
  `cat ${PATH_CLUSTERERRFILE}`"
else
  unset MSG_CLUSTERERR
fi
MSG_TITLE="【WARNING】"${MACHINE_HOSTNAME}" ndbd has gone shutdown or crashdown"
MSG_BODY="
    _人人 人人_
    > 突然の死 <
     ̄Y^Y^Y^Y ̄
┌○┐
│障│ハハ
│ │゚ω゚)
│害│ //
└○┘ (⌒)
  し⌒

Hostname   : `echo ${MACHINE_HOSTNAME}`
Active IP  : `echo ${MACHINE_ACTIVEIP}`
NDB status :
`echo "${MACHINE_NDBSTATUS}"`

`echo "${MSG_CLUSTERERR}"`
"

case "${CHECK_FAILLOG}" in
  0 )
    if [ -n "${CHECK_PROCESS}" ] ; then
      echo 0 > ${PATH_TMPFAILLOG}
    else
      echo 1 > ${PATH_TMPFAILLOG}
    fi
    ;;
  1 )
    echo "${MSG_BODY}" | mail -s "${MSG_TITLE}" ${MAIL_TO} -- -f totsuzenshi@example.com
    echo sendedmail > ${PATH_TMPFAILLOG}
    ;;
  sendedmail )
    if [ -n "${CHECK_PROCESS}" ] ; then
      echo 0 > ${PATH_TMPFAILLOG}
    else
      break
    fi
    ;;
esac

みりゃ大体わかりますが、# set XXXX となってる所は変数の中身をお手持ちの環境に合わせて変更していってください。 大体下記の変数を更新すれば大丈夫だと思うます!

  • export PATH
  • export LANG
  • MAIL_TO
  • PATH_NDBMGM
  • PATH_CLUSTERROOT
  • PATH_CLUSTERERRFILE
  • PATH_TMPFAILLOG
  • PID_FILENAME
  • MSG_TITLE
  • MSG_BODY

僕の運用している環境では、社内の全員に配送するメーリングリスト宛で送付するので、容赦なくマルチバイトをつこうています。使用しはじめた当初は MySQL Cluster が突如落ちたりとかあって、わりと「突然の死!」メールが多く飛んでおり「(もうこれ)突然死でもねえな」みたいな雰囲気が多くありました。突然の死とは……うごご。
なお、maintenance というユーザで監視しているのですが、ndb_mgm を実行できることや、mysql-cluster の pid ファイルたらを読めたりすることが実行ユーザには求められるので、root ユーザや MySQL Cluster をインストールしたユーザ(大体 mysql ユーザになるのかな?)で監視したほうがスマートかもしれません。うちの環境は mysql ユーザにシェルを与えてないので、一律メンテナンス用のユーザが監視をやってるだけです。
なお設置先は NDB node が動いてるサーバです。

ロケ地:CentOS6.4/MySQL Cluster 7.2.x
インストール方法:RPM
PREFIX:/var/lib/mysql-cluster/