マルチポイントの有効化をトリガー

4253 ワード

inotify+rsyncに基づいた実際のアプリケーションスクリプト.環境:4台のnginxサーバー(A、B、C、D)、nginxの配置に対する修正、発効、トポロジーは図の通りである.
機能紹介:
1台のnginx配置の修正、その他の3台の自動同期の修正;構成の有効化結果を検出し、問題がなければ、1つのコマンドを使用して、他の3台のサーバを同時に有効にします.原理:全過程の協力には3つのスクリプト機能が必要で、触発端サーバー(A)に2つの機能を含む3つのスクリプトがあり、リアルタイムでnginxを同期する.confのスクリプト(rsyncNginx.sh)と同期有効スイッチファイルのスクリプト(rsyncSwitch.sh)、コマンドスクリプト(allNginxEffective.sh)は、すべての有効なコマンドを発行します.他のサーバ(B、C、D)には、リアルタイムで有効スイッチをチェックするスクリプト(rsyncEffective.sh)が1つずつ含まれており、1つの有効スイッチファイルが変動するとnginxプロファイル再ロードコマンドが実行されます.
二:基礎サポートサービスインストール1、rsyncサービス2、inotify-tools以上の2つのサービスはインストールしやすく、前にインストール構成ブログがあります.
三、スクリプト編集、ここで私は直接スクリプト作業ディレクトリを/root/work/inotifyの下で1、Aサーバースクリプト:rsyncNginx.sh:Aサーバ上のnginx.confが変動すると,B,C,Dサーバにリアルタイムで同期する.
#!/bin/bash
src=/usr/local/nginx/conf/
des=inotifyhome
ip=172.X.X.2 172.X.X.4 172.x.x.5
user=sysman
/usr/local/bin/inotifywait -mrq -e modify $src |  while read file
do
for i in $ip
do
rsync  -zrtopgl  --delete --progress  --include=nginx.conf  --password-file=/etc/rsyncd.pwd  $src $user@$i::$des
done
done
#
#

##################################################################################### 
スクリプト:rsyncSwitch.sh:Aサーバ上のスイッチファイルswitch.txtが変動するとB,C,Dサーバにリアルタイムで同期する.
ここのswitchホームディレクトリとswitch.txtファイルは手動で作成する必要があります.
#!/bin/bash
switchHome=/root/work/inotify/switchHome/
desSW=nginxSwitch
ip=172.X.X.2 172.X.X.4 172.x.x.5
user=sysman
/usr/local/bin/inotifywait -mrq -e modify  $switchHome |  while read file
do
for i in $ip
do
rsync  -zrtopgl  --delete --progress  --include=switch.txt  --password-file=/etc/rsyncd.pwd  $switchHome  $user@$i::$desSW
done
done

#####################################################################################
スクリプト:allNginxEffective.sh:修正switch.txtファイルのスクリプトは、他のサーバnginxにコマンドを発行するための役割を果たす.confは同時に発効する.              
 
#!/bin/bash
#this script is rsync exec  the nginx.conf to effective
date=`date +%Y%m%d%T`
echo $date >> /root/work/inotify/switchHome/switch.txt
#
#

###########################################################################################################################sh:B,C,Dサーバ上のスイッチファイルswitchをモニタする.txt、このファイルが変更されるとnginxプロファイル再ロードコマンドを実行します(厳密な観点から、プロファイル再ロード前にファイルの正確性をチェックし、正しい場合はロードし、間違っている場合はロードしないで、アラーム情報をハンドマシンに送信します).                 
#!/bin/bash
src=/root/work/inotify/switchHome/
/usr/local/bin/inotifywait -rmq  -e modify $src |  while read  event
do
Yes=`/usr/local/nginx/sbin/nginx -t 2> temp.txt ; grep successful temp.txt  | wc -l ; rm -rf  temp.txt`
if [ $Yes -eq 1 ];then
kill -HUP `ps -ef |grep master |grep -v grep | awk '{print $2}'`
else
echo `hostname`:nginx.conf configure error.  | mutt -s warring   [email protected]
fi
done

#####################################################################################
応用の肝心な点は構想で、この構想によってその他の各式の必要に応じた脚本以上を派生することができて個人の拙筆で、達人が意見を出すことを歓迎します
2012-06-18補足:
実際のアプリケーションでスクリプトが奇妙に消えたので、いくつかのスクリプトが存在するかどうかを確認するために、デーモンプロセスのようなものを書きました.
[root@nginx-m inotify]# cat rsyncdaemon.sh
#!/bin/bash
function rsyncSwitchdaemon
{
rsyncSwitchCount=` ps -ef | grep rsyncSwitch | grep -v grep  | wc -l`
if [ $rsyncSwitchCount -ne 2 ] ;then
if [ $rsyncSwitchCount -eq 0 ];then
(/root/work/inotify/rsyncSwitch.sh )
else if [ $rsyncSwitchCount -eq 1 ];then
kill -9 `ps -ef |grep  rsyncSwitch | grep -v grep | awk '{print $2}'`                                                       (/root/work/inotify/rsyncSwitch.sh )
fi
fi
fi
}
function rsyncNginxdaemon
{
rsyncNginxCount=` ps -ef | grep rsyncNginx | grep -v grep  | wc -l`
if [ $rsyncNginxCount -ne 2 ] ;then
if [ $rsyncNginxCount -eq 0 ];then
(/root/work/inotify/rsyncNginx.sh )
else if [ $rsyncNginxCount -eq 1 ];then
kill -9 `ps -ef |grep  rsyncNginx | grep -v grep | awk '{print $2}'`                                                           (/root/work/inotify/rsyncNginx.sh )
fi
fi
fi
}
rsyncSwitchdaemon
rsyncNginxdaemon
#
#

#####################################################################################
タイミングタスクに0 0**/root/work/inotify/rsyncdaemonを追加します.sh 
 
 
 
に感謝http://monigo.cn/article/7/凱旋ブロガーのいつもの助けに感謝します