Tags

Recent Entries

Recent Comments

Recent Trackback

Feeds

More Links


タグ:「server」の記事一覧

NagiosのnrpeプラグインでMysqlの監視

[Permalink] [Post to del.icio.us] [Post to hatena] [Post to livedoorClip]
Nagiosのnrpeプラグイン使ってリモートのサーバを色々監視できます。
プラグインはバイナリだったりperlでかかれてたりするんですが基本的に実行してステータスを返すことができたら何でもよいらしいので、phpで書いてみました。

check_mysql.php


#!/opt/php5/bin/php -q
<?php
$u = array_search('-u', $argv);
$p = array_search('-p', $argv);
$d = array_search('-d', $argv);
$P = array_search('-P', $argv);
$H = array_search('-H', $argv);
$S = array_search('-S', $argv);

$user = ($u) ? $argv[$u+1] : '';
$password = ($p) ? $argv[$p+1] : '';
$database = ($d) ? $argv[$d+1] : '';
$port = ($P) ? $argv[$P+1] : '3306';
$host = ($H) ? $argv[$H+1] : 'localhost';

################################################
# connect check
################################################
$db = mysql_connect("{$host}:{$port}", $user, $password) || die("CRITICAL: ".mysql_errno().":".mysql_error()."\n");
mysql_select_db($database) || die("CRITICAL: ".mysql_errno().":".mysql_error()."\n");
################################################
# status check
################################################
$result = mysql_query("SHOW STATUS");
$status = mysql_fetch_assoc($result);
if(mysql_errno())
die("CRITICAL: ".mysql_errno().":".mysql_error()."\n");
################################################
# slave check
################################################
if($S){
$result = mysql_query("SHOW STATUS");
$status = mysql_fetch_assoc("SHOW SLAVE STATUS");
if(mysql_errno())
die("CRITICAL: ".mysql_errno().":".mysql_error()."\n");
if($status['slave_io_running']!='Yes' && $status['slave_sql_running']!='Yes')
die("CRITICAL: Slave_IO_Running = ".$status['slave_io_running'].", Slave_SQL_Running = ".$status['slave_sql_running']."\n");
}

exit("STATUS OK\n");
?>


# check_mysql.php -u [接続ユーザ名] -p [パスワード] -d [データベース名] -P [ポート番号] -H [ホスト名]
Status OK


でチェックできます。スレーブのチェックをしたい場合はオプションに「-S」を付ければおk。

nrpeから呼び出して使用する場合は、
サーバ側(nagiosサーバ)で、
# sudo vi /etc/nagios/services.cfg
define service{
use generic-service
host_name [ホスト名1,ホスト名2,...]
service_description Mysql Status
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups [コンタクトグループ名]
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_nrpe!check_mysql_php
}

のようにサービスの定義をした上で、クライアント側(監視されるサーバ)に上記phpスクリプトを作成し
# sudo vi /etc/nagios/nrpe.cfg
command[check_mysql_php]=/usr/lib/nagios/plugins/check_mysql.php -u [ユーザ名] -p [パスワード] -d [DB名]
 ↑
この記述を追加

とすれば監視可能になります。
Posted by: simpraight at 2007/01/04 13:19:00 | Tags: [server] [tips] | Comments:7 | Trackbacks:0

courieer-imap + postfix + mysql + smtp auth

[Permalink] [Post to del.icio.us] [Post to hatena] [Post to livedoorClip]
嵌りどころ。

・mysqlに保存するパスワードはplaintextに
・smtpはjail環境で動かさない。

# tail /var/log/mail.log
warning: SASL authentication failure: cannot connect to Courier authdaemond: No such file or directory

こんなエラーが出てる場合は、

# vi /etc/postfix/master.cf
smtp inet n - - - - smtpd
 ↓
smtp inet n - n - - smtpd


とりあえずこれで動作しますがセキュリティ的にはもちろん微妙。。
Posted by: simpraight at 2006/12/09 02:17:28 | Tags: [嵌る] [server] [tips] | Comments:1 | Trackbacks:0

rsyncでコピーしたHDDから起動する

[Permalink] [Post to del.icio.us] [Post to hatena] [Post to livedoorClip]
rsyncでパーティションまるごとコピーする」のシェルスクリプトでcron走らせて日次バックアップをしている状況で、プライマリのHDDが故障した場合rsyncでまるごとミラーリングコピーしたセカンダリのHDDをプライマリに差し替えて起動すればうまくいくかといえばそううまくはいきません。

ハードウエアでRAIDできる環境であればこんな事心配する必要はないんですが、何しろSunのNetraT1+Debian(SPARC)な環境だったりすると簡単にはRAIDボードなんて挿せないワケですからこういう事も考えておかなければなりません。
もちろんソフトウエアRAIDとかへの移行が可能な場合や、既に運用している場合はそれで良いと思います。
この場合はハードウエア追加・ソフトウエアRAID構成への変更が困難な環境で、とりあえずrsyncでバックアップするしかない淋しい状況下での話。

とりあえず、ブートローダが何なのかによりますが、当環境(NetraT1+Debian)では問答無用で「SILO」です。

試しに何も小細工なしにHDDを入れ替えてブートしてみます。
Boot device: /pci@1f,0/pci@1,1/scsi@2/disk@0,0:a File and args.
:217: The file just loaded does not appear to be excutable.

はい無理。まぁ当たり前ですけど。
ブートローダ(SILO)が無いとどうしようもないのでインストールCDからブートしてみます。
ok boot cdrom
Boot device: /pci@1f,0/pci@1/pci@1/ide@e/cdrom@2:a File and args.
SILO Version 1.4.9
\
boot:

とSILOが上がってくるのでブートパラメータを
boot: /pci@1f,0/pci@1,1/scsi@2/disk@0,0:a;1/boot/vmlinuz root=/dev/sda4
initrd=/pci@1f,0/pci@1,1/scsi@2/disk@0,0:a;1/boot/initrd.img
※実際は改行無し。

な感じで入力してブートすると無事起動することができました。
また、次回からこの操作をしなくても良いようにブートローダを設定しておきます。
# silo -f -C /boot/silo.conf
Posted by: simpraight at 2006/12/01 15:20:49 | Tags: [server] [tips] | Comments:0 | Trackbacks:0

rsyncでパーティションまるごとコピーする

[Permalink] [Post to del.icio.us] [Post to hatena] [Post to livedoorClip]
再利用の為にメモ。
#!/bin/sh

echo "`date +%Y-%m-%d\ %k:%M:%S`: start syncing" >> /var/log/backup.log

if [ ! -d "/mnt/sdb" ]; then
mkdir /mnt/sdb
fi
/bin/mount -t xfs /dev/sdb3 /mnt/sdb 2>> /var/log/backup.log

if [ ! -d "/mnt/sdb/boot" ]; then
mkdir /mnt/sdb/boot
fi
/bin/mount -t ext3 /dev/sdb1 /mnt/sdb/boot 2>> /var/log/backup.log


/usr/bin/rsync -aH --delete \
--exclude=/proc \
--exclude=/sys \
--exclude=/mnt \
/* /mnt/sdb

if [ ! -d "/mnt/sdb/proc" ]; then
mkdir /mnt/sdb/proc
fi
if [ ! -d "/mnt/sdb/sys" ]; then
mkdir /mnt/sdb/sys
fi
if [ ! -d "/mnt/sdb/mnt" ]; then
mkdir /mnt/sdb/mnt
mkdir /mnt/sdb/mnt/boot
fi

/bin/umount /mnt/sdb/boot 2>> /var/log/backup.log
/bin/umount /mnt/sdb 2>> /var/log/backup.log

echo "`date +%Y-%m-%d\ %k:%M:%S`: end syncing" >> /var/log/backup.log

rsyncの「-H」って付ける方が良いのか付けない方が良いのか。。

参考:rsyncで自動バックアップ
Posted by: simpraight at 2006/11/30 17:44:33 | Tags: [server] [tips] | Comments:0 | Trackbacks:0