使用supervisor监控mha masterha_manager进程

我们在用mha自带的masterha_manager脚本做mysql主库故障自动切换时,需要考虑如何让masterha_manager监控进程一直处于正常运行的状态。而supervisor可以很好地解决这个问题,它可以将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

这里列一下部署要点和管理命令

一,supervisor 安装:

sudo pip install supervisor

二,supervisor配置:

mkdir -p /etc/supervisor/conf.d/

生成配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf

cat /etc/supervisor/supervisord.conf

[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file

[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
user=dbadmin ; default is current user, required if root

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket

[include]
files = /etc/supervisor/conf.d/*.conf

配置要点:
1,其它的配置将可以使用生成的默认配置,但是user需要改成做免密码登陆的用户,比如这里的dbadmin,不然masterha_manager启动会出错,因为mha的免密码登陆全部是用的dbadmin的帐号
2,管理进程的配置可以直接放在supervisor的主配置文件中的[program:xxx]段,但是最好每个进程准备一个配置文件,以方便管理,通过[include]段的file配置指定配置文件目录。

三,以masterha_manager监控test为例来看supervisor的操作

1,准备masterha_manager监控test的配置文件

cat /etc/supervisor/conf.d/masterha_manager_test.conf
[program:masterha_manager_test]
command=masterha_manager --conf=/etc/mha/test.cnf --ignore_last_failover ; 启动命令
stdout_logfile=/tmp/manager.log ; stdout 日志输出位置
stderr_logfile=/tmp/manager.log ; stderr 日志输出位置
autostart=true ; 在 supervisord 启动的时候自动启动
autorestart=true ; 程序异常退出后自动重启
startsecs=10 ; 启动 10 秒后没有异常退出,就当作已经正常启动

2,启动supervisord进程

# supervisord -c /etc/supervisor/supervisord.conf
# ps -ef | grep super
dbadmin 11892 1 0 02:56 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
root 13340 31610 0 02:56 pts/0 00:00:00 grep super

3,查看监控的进程状态

# supervisorctl status

masterha_manager_test RUNNING pid 11912, uptime 0:03:08

# ps -ef | grep master
root 1343 31610 0 02:59 pts/0 00:00:00 grep master
root 3228 1 0 2016 ? 00:01:33 /usr/libexec/postfix/master
dbadmin 11912 11892 0 02:56 ? 00:00:00 perl /usr/local/bin/masterha_manager --conf=/etc/mha/test.cnf --ignore_last_failover
可以看到masterha_manager已经启起来了

4,测试

直接杀掉masterha_manager进程模拟masterha_manager异常退出:
# ps -ef | grep master
root 1343 31610 0 02:59 pts/0 00:00:00 grep master
root 3228 1 0 2016 ? 00:01:33 /usr/libexec/postfix/master
dbadmin 11912 11892 0 02:56 ? 00:00:00 perl /usr/local/bin/masterha_manager --conf=/etc/mha/test.cnf --ignore_last_failover

# kill -9 11912

# ps -ef | grep master
dbadmin 1707 11892 5 03:30 ? 00:00:00 perl /usr/local/bin/masterha_manager --conf=/etc/mha/test.cnf --ignore_last_failover
root 2054 31610 0 03:30 pts/0 00:00:00 grep master
root 3228 1 0 2016 ? 00:01:33 /usr/libexec/postfix/master

可以看到supervisor又重新启了masterha_manager监控进程

5,常用管理命令

supervisord: 初始启动Supervisord,启动、管理配置中设置的进程;
supervisorctl stop(start, restart) xxx,停止(启动,重启)某一个进程(xxx);
supervisorctl reread: 只载入最新的配置文件, 并不重启任何进程;
supervisorctl reload: 载入最新的配置文件,停止原来的所有进程并按新的配置启动管理所有进程;
supervisorctl update: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启;

6,添加supervisord为Linux系统服务,开机自动启动

准备启动脚本supervisord.sh

# chmod +x supervisord.sh

# mv supervisord.sh  /etc/init.d/supervisord

# chkconfig --add  supervisord

# chkconfig --level 345 supervisord on

cat /etc/rc.d/init.d/supervisord

#!/bin/sh

#

# /etc/rc.d/init.d/supervisord 

#

# Supervisor is a client/server system that

# allows its users to monitor and control a

# number of processes on UNIX-like operating

# systems.

#

# chkconfig: - 64 36

# description: Supervisor Server

# processname: supervisord

# Source init functions

. /etc/rc.d/init.d/functions

prog="supervisord"

prog_bin="/usr/bin/supervisord"

PIDFILE="/tmp/supervisord.pid"

CONFILE="/etc/supervisor/supervisord.conf"

start()

{

 echo -n $"Starting $prog: "

 daemon $prog_bin -c $CONFILE --pidfile $PIDFILE

 [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"

 echo

}

  

stop()

{

 echo -n $"Shutting down $prog: "

 [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"

 echo

}

  

case "$1" in

 start)

 start

 ;;

 stop)

 stop

 ;;

 status)

 status $prog

 ;;

 restart)

 stop

 start

 ;;

 *)

 echo "Usage: $0 {start|stop|restart|status}"

 ;;

esac

原文地址:http://blog.51cto.com/chenql/2136174

时间: 2024-07-30 23:33:42

使用supervisor监控mha masterha_manager进程的相关文章

[Erlang_Question13]怎么把一个普通的进程挂入Supervisor监控树?

简单来说:应该是在调用的start_link返回一个{ok,Pid}就可以把这个进程放入监控树Supervisor里面: -module(worker). -author("[email protected]"). -export([start_link/0,stop_worker/0]). start_link() –> {ok,spawn(fun() -> loop() end)}. loop() –> case whereis(?MODULE) of undef

如何用supervisor守护php-fpm主进程以实现php-fpm的自动重启

最近有同事有个针对php-fpm进程的监护需求,也即:如果php-fpm的master进程意外退出(可能是crash,也可能是被误kill),那么希望master进程能被自动拉起,以免中断服务. 我们知道,supervisor是一个非常强大的进程监控(monitor & control)工具,它理论上可以实现php-fpm master进程的守护需求.因此,我帮同事试验了如何用supervisor完成他的需求,结果表明,supervisor确实是神器,只需一个合理的配置文件,它就能解决问题. 下

用monit监控系统关键进程

monit是一款功能强大的系统状态.进程.文件.目录和设备的监控软件,用于*nix平台, 它可以自动重启那些已经挂掉的程序,非常适合监控系统关键的进程和资源,如:nginx.apache.mysql和cpu占有率等.而监控管理Python进程,常用的是supervisor,后续会另外撰文介绍. 下面分别介绍monit的安装.配置和启动. 安装 在debian或ubuntu上安装monit非常方便,通过下面的命令 sudoapt-getinstall monit 即可,其它*nix上也很简单,下载

一个用pyton写的监控服务端进程的软件hcm

使用udp实现,简单,方便,不用三次握手 1. 所有部署服务器进程的机器有一个代理进程hagent,用来监听hcm console中发送过来的命令 2.hcm需要提供以下命令 start :普通方式启动进程 stop :停止进程 reload :重新载入配置文件 resume :恢复方式启动进程(共享内存) tail:查看日志的末尾 deploy:直接更新服务器文件 rmshm:删除共享内存 autoresume:开启和关闭某个进程的自动拉起功能 3. hcm 监控所有的进程,发现进程不在时,以

erlang supervisor中启动普通的进程

http://www.cnblogs.com/little-ant/p/3192968.html 文字部分转自: http://1234n.com/?post/qou3eb supervisor的子进程 一开始使用supervisor的时候,我用的是init/1返回子进程规格列表的方式,并且所有子进程只有两种类型,一种是supervisor进程,一种是gen_server. 但这次代码重构中,我遇到一个情况.如果我可以启动普通的进程而不是gen_server,我就可以把一些我觉得没必要做成gen

JVM探秘:VisualVM监控远程Java进程

VisualVM在Java 8中是JDK自带的一个图形化工具,项目主页 VisualVM,在后续版本中可能会从JDK移除. VisualVM可以监控Java进程的CPU与内存占用情况,可以监控Java进程内的各个线程的执行情况,还可以与MAT工具一样用来分析堆转储快照. 监控远程Tomcat进程 监控远程主机上的Tomcat进程,需要在Tomcat的catalina.sh文件中加入参数: JAVA_OPTS="$JAVA_OPTS -Dcom.sum.management.jmxremote -

使用supervisor监控进程

在linux下监控进程,可以使用inittab,最近找到了supervisor,也很好用,记录一下:1.系统要安装python,并安装与之对应的setuptools,下载地址在此2.安装:# sh setuptoolsxxxx.egg3.安装supervisor,下载地址在此,解压缩后# python setup.py install这就ok了,然后执行# echo_supervisord_conf > /etc/supervisord.conf修改/etc/supervisord.conf文件

Linx监控分享--重点进程监控(mysqld)+邮件提醒

重点进程监控 mysqld:进程退出了,报警.没有退出则监控mysqld的(cpu(>=100%)|| mem(>=80%))开始提醒,同时收集和分析mysql状态信息:连接数(>=max_connections * 0.8)开始提醒:打开的句柄数(>=8192*0.8?)开始提醒. 待完善... 如果是单机多实例的话,只需要增加一个for循环就好了. 在手机上安装网易的邮件客户端,就可以达到实时提醒的效果. 关于mail的配置,见之前的文章:http://blog.csdn.ne

zabbix监控php-status和进程资源使用率

入职以后,领导让我着手zabbix监控的部署和具体的维护.监控php首先就是一个挺重要的事情了.zabbix监控php可以通过php自带的一个status功能来监控,需要在配置文件里面开启,同时在nginx里面配置php status可以访问 1.php-fpm 开启status grep pm.status_path /usr/local/php/etc/php-fpm.conf pm.status_path = /php-fpm-status 默认情况下为/status,当然也可以改成/ph