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/