使用supervisor监控mha masterha_manager进程
admin
2023-04-28 01:21:35
0

我们在用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

这一步可能会遇到以下报错

Traceback (most recent call last):
  File "/usr/bin/echo_supervisord_conf", line 5, in 
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in 
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5

在网上查了一下原因,大概和python或者pip版本相关,通过源码安装一次meld3好了,简单三步搞定:

git clone https://github.com/Supervisor/meld3
cd meld3
python setup.py install


查看配置文件

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





相关内容

热门资讯

烈焰熊熊,堪比“原子弹”,欧洲... 据美国有线电视新闻网(CNN)7月29日报道,席卷法国西南部的大片野火燃烧得如此猛烈,以至于形成了一...
外交部:对日本熊本县地震遇难者... 据凤凰卫视报道,针对日本熊本县发生强震造成人员伤亡,中国外交部发言人毛宁7月29日在例行记者会上表示...
高铁喧哗被劝阻后叫嚣全家体制内... “女子高铁喧哗被劝阻后叫嚣全家体制内”一事迎来官方通报。据新京报报道,7月29日,辽宁北票市公安局发...
广东专业蓝牙耳机定制厂家推荐,... 在珠三角腹地,广东早已成为全球蓝牙耳机产业链的“心脏地带”。从深圳华强北的声学元件批发,到东莞、惠州...
格雷厄姆葬礼变地缘竞价场!两大... 有些葬礼,送别的是逝者;有些葬礼,演的却是活人最现实的政治博弈。当地时间7月28日,美国老牌鹰派参议...
一道小学数学题难住3名医学博士... 3名不同学校的博士同做一道数学题,谁最厉害?近日,一陕西网友发布的视频引发热议。29日,视频发布者“...
华为全新“小艺任务”亮相:整合... 7月29日,在华为鸿蒙电脑新品技术沟通会上,终端云服务小艺业务部总裁贾永利宣布,小艺将迎来“从对话到...
广西日报特稿《王的猜想》火了,... 澎湃新闻记者 蒋子文 实习生 汤煜炜为应对外界购买纸质版特稿《王的猜想》的热情,《广西日报》宣布紧急...
月租20元内!2026年平价云... 不少手游玩家、账号运营从业者挑选云手机时,首要诉求就是低价够用,想要控制每月支出在20元以内,同时兼...
诺奖得主如何看待王虹境遇?“我... 中村修二(2014年诺贝尔物理学奖得主)【导读】近日王虹与邓煜双双获得2026年菲尔兹奖,成为了首批...