どどんとふをdebian+nginxで動かすやり方(OS編)@公式鯖3rd

パーティーション構成(システム以外)

パーティーションレイアウトはこんな感じで設定しています。(df -hの結果)
vdaとvdbは、qcow2のイメージファイルですが、ホストOSでは、vdaがMegaRAIDのRAID1論理ドライブ(btrfs)、vdbがSSD×2のSW-RAID1(btrfs)に配置しています。

ファイルシス   サイズ  使用  残り 使用% マウント位置
udev             7.9G     0  7.9G    0% /dev
tmpfs            1.6G   89M  1.5G    6% /run
/dev/vda1        9.1G  2.9G  5.8G   34% /
tmpfs            7.9G     0  7.9G    0% /dev/shm
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs            7.9G     0  7.9G    0% /sys/fs/cgroup
/dev/vda3         82G   12G   68G   15% /srv/hdd
/dev/vdb1        100G   41G   59G   42% /srv/ssd
/dev/zram0       2.0G  509M  1.4G   27% /srv/ram

さらに、btrfsのサブボリュームを作成し、snapshotを取得しやすいように色々と設定

/srv/ssd/www    ←nginxのDocumentRootであり、どどんとふ本体や、imageUploadSpaceを配置
/srv/ssd/data   ←/srv/ram/data以下と定期的にrsyncする先
/srv/hdd/log    ←nginxのアクセスログや、どどんとふのlog保管場所
/srv/ram/data   ←どどんとふのsavedata保存場所

RAMDISKの作成とリストア

zram0については、システム起動時にzram_initというShellScriptでzramを初期化し、SSDからコピーするようにしています。
zram_initの中身(容量は2GB確保していますが、普通は512MBでも足りると思います)

#!/bin/bash
cat /proc/mounts |grep zram0
if [ $? -eq 0 ]
then
  echo "zram0 is ready"
else
  echo "formatting zram0"
  modprobe zram
  echo 2G >/sys/block/zram0/disksize
  mkfs.btrfs /dev/zram0
  echo "mounting /dev/zram0 to /srv/ram"
  mount -t btrfs /dev/zram0 -o compress=no,nobarrier,noatime /srv/ram
  mkdir /srv/ram/data
  cd /srv/ssd/data && rsync -avuAX * /srv/ram/data/ --exclude='*.lock'
fi

カーネルまわりの設定

/etc/sysctl.confに以下の設定を追加し、バッファ盛り盛りのカリカリチューニングしてます。

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.arp_filter = 0
# Protect Against TCP Time-Wait
net.ipv4.tcp_rfc1337 = 1
# Allowed local port range
net.ipv4.ip_local_port_range = 8192 65535

net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144

# Increase the read-buffer space allocatable
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.udp_rmem_min = 16384

# Increase the write-buffer-space allocatable
net.ipv4.tcp_wmem = 8192 65536 16777216
net.ipv4.udp_wmem_min = 16384

# Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_slow_start_after_idle=0

前提ソフトウェアのインストール

どどんとふが稼働するのに必要な前提ソフトウェアをインストール。(rubyのバージョンは、1.9.x~2.2で動作確認済み。2.3以降はたぶん動くと思いますが、ダメだったら作者にバグレポートしてください)

$ sudo apt-get install nginx-extras fcgiwrap ruby2.2 ruby-uconv  libfcgi-dev gcc make ruby2.2-dev rake
$ sudo gem2.2 install fcgi msgpack json i18n

仮想マシンのOSまわりの設定でした。nginxやどどんとふ本体の設定については、後日続きを書いていきます。