supervisor监控mongoDb

来源:互联网 发布:适合20岁女装淘宝店铺 编辑:程序博客网 时间:2024/04/28 18:38
在linux下监控进程,分为6步:

1、查看python版本(决定是否需要安装python)

实验中系统版本为:Red Hat 6.5 自带2.6.6版本的python,不需要安装

2、安装与python对应的setuptools,下载地址在此

tools为:setuptools-15.2.tar.gz

以下的

wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086

解压安装

tar -xvf setuptools-15.2.tar.gz

切换到tools目录,执行python setup.py install进行安装

3、安装supervisor,下载地址在此,解压缩后

# python setup.py install

supervisor版本为:supervisor-3.0b1.tar.gz

wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0b1.tar.gz

在安装supervisor过程中发现下面错误:

error:.....Couldn't find index page for 'meld3' (maybe misspelled?)

查找发现是需要安装 meld3-0.6.8.tar.gz,安装完后,问题解决

有的朋友说是需要添加DNS,我试了一下不行,大家也可以试一下

vi /etc/resolv.conf

nameserver 10.69.6.134
nameserver 10.69.6.190

4、配置守护进程 /etc/supervisord.conf

创建supervisord的配置模板

echo_supervisord_conf > /etc/supervisord.conf
修改/etc/supervisord.conf文件,加入你要监控的进程,里面的注释很详细,举个简单的例子:

这是一段要监控的进程的描述信息,添加到这个文件的末尾就好了mongodb_monitor.sh见文章最后:
[program:Mongodb]
command=/etc/mongodb_monitor.sh
priority=1    
numprocs=1                            ; 启动几个进程
autostart=true                        ; 随着supervisord的启动而启动
autorestart=true                    ; 自动重启。。当然要选上了
startretries=10                        ; 启动失败时的最多重试次数
stopsignal=KILL                        ; 用来杀死进程的信号
stopwaitsecs=10                        ; 发送SIGKILL前的等待时间
redirect_stderr=true                ; 重定向stderr到stdout
stdout_logfile=/var/log/mongo.log    ;监控日志
stdout_logfile_maxbytes=1MB            ;每个日志文件大小

配置完成后保存退出。

5.编写supervisor服务脚本,添加服务

vi /etc/init.d/supervisord

#!/bin/sh
#chkconfig: 2345 80 90
#description:auto_run
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PROGNAME=supervisord
DAEMON=/usr/bin/$PROGNAME
CONFIG=/etc/$PROGNAME.conf
PIDFILE=/tmp/$PROGNAME.pid
DESC="supervisord daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -c $CONFIG
echo "..."
}
stop()
{
echo -n "Stopping $DESC: $PROGNAME"
supervisor_pid=$(cat $PIDFILE)
kill -15 $supervisor_pid
echo "..."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0


保存退出

6.做成服务,添加开机启动

修改权限
chmod 755 /etc/init.d/supervisord
添加服务
chkconfig --add supervisord

开启服务
chkconfig supervisord on
验证服务
chkconfig --list|grep supervisord

启动服务
/etc/init.d/supervisord start

# supervisord -n

能在控制台看到监控进程的输出:
2010-08-17 10:26:07,467 INFO supervisord started with pid 943
2010-08-17 10:26:08,469 INFO spawned: 'meta.txn.recover.on.error' with pid 1009
2010-08-17 10:26:09,876 INFO success: meta.txn.recover.on.error entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2010-08-17 10:26:48,442 INFO exited: meta.txn.recover.on.error (terminated by SIGKILL; not expected)
2010-08-17 10:26:49,444 INFO spawned: 'meta.txn.recover.on.error' with pid 2427
2010-08-17 10:26:50,487 INFO success: meta.txn.recover.on.error entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
黑体的地方是我用kill -9杀掉进程后出来的,看到supervisor检测到进程退出后又再次启动了进程。
不带参数运行supervisord是以daemon方式运行。
把supervisord加入到开机启动项里就可以完成监控进程的功能了。

或查看监控日志

tail -900f /var/log/mongo.log

supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令

supervisorctl:启动supervisor的命令行窗口。


【注意】:当supervisord以非daemon方式运行时,杀掉supervisord后,被监控的进程也退出了。

而以daemon方式运行,杀掉supervisord对被监控进程无影响。


MongoDb的守护进程

注:因为MongoDb意外挂掉或会存在一个.lock文件,该文件存在则mongoDb启动会失败

添加将脚本放到/etc/下并命名为mongodb_monitor.sh,配置上面的守护进程步骤,即可;

#!/bin/bash

while [ 1=1 ]
do
    count=`ps -ef|grep "/shard/config "|cut -d " " -f 7|wc`
    count=`echo $count |awk '{print int($0)}'`    #将字符串转换为数字,要不然 if [ $count -lt 2 ] 会报错
    #ps -ef|grep "/data/DB1/" >>/var/log/mongo.log
    #ps -ef|grep "/data/DB1/"|wc|cut -d " " -f 7 >>/var/log/mongo.log
    #echo "$count1 is"
    if [ $count -lt 2 ]
    then
       DATASTRING=`date +%Y%m%d%H%M%S`
       echo "$DATASTRING $count MongoDB_config is down" >>/var/log/mongo.log
       rm -f /usr/local/mongodb/data/shard/config/mongod.lock >>/var/log/mongo.log     #删除mongDb的lock文件
       /usr/local/mongodb/bin/mongod --port 27027 --dbpath /usr/local/mongodb/data/shard/config --fork --logpath /usr/local/mongodb/data/shard/config/config.log >>/var/log/mongo.log
       echo "$DATASTRING MongoDB_config"
    fi
    sleep 3
done   


我是菜鸟,大家有更好的办法麻烦分享一下


1 0
原创粉丝点击