第1回: OS編
第2回: nginxセットアップ編
第3回: fcgi編
第4回: どどんとふ本体編
今回: 運用ツール編(最低限)
前回まで、作り込んだ状態では、saveDataがRAMDISKに保存しているため、サーバーをシャットダウンするとデータが消えてしまいますので、定期的に別SSDなりHDDにコピーしてデータを保護する必要があります。同時アクセス数が100~200人程度であれば高速なSSDに直接保存しても問題ありません。
以下のようなスクリプトを作成しcronで定期的に実行させます。(公式鯖は5分おきに実行)
(実際の公式鯖は、待機系サーバーとデータ同期するrsync処理も含んでいますが、その部分は除外して記載しています。)
#!/bin/bash
echo “— start —”
dateecho “— Check lockfile —”
LOCKFILE=/root/script/sync_webdir.lock
if [ -f ${LOCKFILE} ]
then
echo “${LOCKFILE} is exsist”
exit
fiecho “— Commit ramdisk to ssd —”
if [ ! -d /srv/ram/data ]
then
echo “Ramdisk image not found”
exit
fiecho “— 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.lockbtrfs subvolume snapshot /srv/ssd/www /srv/ssd/www.snapshot
echo “— end —”
daterm -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