どどんとふをdebian+nginxで動かすやり方(運用ツール編)@公式鯖3rdシリーズ

第1回: OS編

第2回: nginxセットアップ編

第3回: fcgi編

第4回: どどんとふ本体編

今回: 運用ツール編(最低限)

前回まで、作り込んだ状態では、saveDataがRAMDISKに保存しているため、サーバーをシャットダウンするとデータが消えてしまいますので、定期的に別SSDなりHDDにコピーしてデータを保護する必要があります。同時アクセス数が100~200人程度であれば高速なSSDに直接保存しても問題ありません。

以下のようなスクリプトを作成しcronで定期的に実行させます。(公式鯖は5分おきに実行)
(実際の公式鯖は、待機系サーバーとデータ同期するrsync処理も含んでいますが、その部分は除外して記載しています。)


#!/bin/bash
echo “— start —”
date

echo “— Check lockfile —”
LOCKFILE=/root/script/sync_webdir.lock
if [ -f ${LOCKFILE} ]
then
echo “${LOCKFILE} is exsist”
exit
fi

echo “— Commit ramdisk to ssd —”
if [ ! -d /srv/ram/data ]
then
echo “Ramdisk image not found”
exit
fi

echo “— Create lockfile —”
> ${LOCKFILE}

btrfs subvolume snapshot /srv/ram /srv/ram/snapshot.lock
cd /srv/ram/snapshot.lock && rsync -aAXv –delete –exclude=’*.lock’ data /srv/ssd/
btrfs subvolume delete /srv/ram/snapshot.lock

btrfs subvolume snapshot /srv/ssd/www /srv/ssd/www.snapshot

echo “— end —”
date

rm -f ${LOCKFILE}


次の監視シェルは、別に必須ではありませんが、多くのリクエストを処理する際に、どどんとふ本体の問題だったり、OSがメモリ不足になったりで不意にプロセスがダウンしてしまうことがありますので、
これを3分おきに動かしています。(閾値をハードコーディングしているとことがダサいですが、一つの公式鯖毎に40プロセスを稼働させていますが、これが15を切ると再起動させるようにしています)

#!/bin/bash
function checkService
{
systemctl is-active $1 >/dev/null 2>&1
if [ $? != 0 ]
then
echo “Service ${1} is down. Restarting…”
systemctl restart $1
else
echo “Service ${1} is alived.”
fi
PS_NUM=`ps -ef |grep $2 |wc -l`
if [ ${PS_NUM} -lt 15 ]
then
echo “${1} is down.(Leser than 15) Restarting…”
systemctl restart $1
else
echo “Service ${1} is alived.(${PS_NUM} processes are running.)”
fi
}

date
checkService dodontof_srv1 DodontoF_srv1
date