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
このステップでは、次のエラーが発生する可能性があります.
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バージョンに関連しているかもしれませんが、ソースコードでmeld 3を1回インストールすれば、簡単な3つのステップができます.
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.loglogfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MBlogfile_backups=10 ; # of main logfile backups; 0 means none, default 10loglevel=info ; log level; default info; others: debug,warn,tracepidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pidnodaemon=false ; start in foreground if true; default falseminfds=1024 ; min. avail startup file descriptors; default 1024minprocs=200 ; min. avail process descriptors;default 200user=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 superdbadmin 11892 1 0 02:56 ? 00:00:00/usr/bin/python/usr/bin/supervisordroot 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 masterroot 1343 31610 0 02:59 pts/0 00:00:00 grep masterroot 3228 1 0 2016 ? 00:01:33/usr/libexec/postfix/masterdbadmin 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、テスト
直接殺してmanagerプロセスシミュレーションmasterha_manager異常終了:#ps-ef|grep masterroot 1343 316100 02:59 pts/00:00:00 grep masterroot 3228 1 0 2016?00:01:33/usr/libexec/postfix/masterdbadmin 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 masterdbadmin 1707 11892 5 03:30 ? 00:00:00 perl/usr/local/bin/masterha_manager --conf=/etc/mha/test.cnf --ignore_last_failoverroot 2054 31610 0 03:30 pts/0 00:00:00 grep masterroot 3228 1 0 2016 ? 00:01:33/usr/libexec/postfix/master
supervisorがmasterhaを再開したのが見えます.managerモニタリングプロセス
5、常用管理コマンド
supervisord:Supervisordを初期に起動し、構成で設定されたプロセスを起動、管理します.supervisorctl stop(start,restart)xxx、あるプロセス(xxx)を停止(起動、再起動)する.supervisorctl read:最新のプロファイルのみをロードし、プロセスを再起動しません.supervisorctl reload:最新のプロファイルをロードし、元のすべてのプロセスを停止し、新しい構成ですべてのプロセスを管理します.supervisorctl update:最新のプロファイルに基づいて、新しい構成または変更されたプロセスを起動し、変更されていないプロセスを構成しても影響を受けずに再起動します.
6、supervisordをLinuxシステムサービスに追加し、起動して自動的に起動する
スクリプトを起動する準備をします.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