自分はネットラジオなんかを録画するシステムを開発してるわけなんですが、
これをどういうサーバーで運用しているかというのをメモしておこうと思います。
- 前提
- サーバー(ハードウェア)
- ストレージ代
- いわゆる安鯖について
- OS, FileSystem
- Backupについて
- CrashPlanについて
- ニコ生について
- Google Photosについて
- Virtual Box + Windows
- 監視・アラート
- 課題・今後の方向性
前提
- ストリーミングのインターネットラジオ(radikoを2チャンネルほどやA&G+など)をリアルタイムで録音・録画している
- その他毎週更新だったりするやつもとっている
- ニコ生も1日15本ほど保存している(net-radio-archiveの新機能として開発中)
- テレビ放送のTSはキャプチャしてない
サーバー(ハードウェア)
- 自宅サーバー
- 安鯖: Fujitsu TX100
- PentiumG 2Core 2.6GHz
- Unbuffered ECC Memory 2GB → 8GB に増設
- System HDD 250GB
- 3TB HDD x3
ストレージ代
自宅サーバーにしているのはクラウドストレージはなにをどうやっても料金が高いため。S3に月数万円も払うよりは自分でHDD買ってきてRAID組んだほうが経済的な気がした。
最近はBackblaze B2という破格のS3互換ストレージが発表されたのでこいつで動くようにシステムを改修してもいいかもしれないと考え始めている。
ただS3系のやつはディレクトリ構造というのを持つことができずいわゆるファイルシステムとしては使えないのでファイルのリストなんかは別にDBで持っておいて、リンクを表示するWebページを生成する必要があったり、sftpなんかで外部から繋いでファイルを設置したりできなかったりと不便なのでnfsなんかでファイルシステムとしてmountできてなおかつ安いクラウドストレージとか出てきてくれないかなーと願ってる
いわゆる安鯖について
安鯖は自分でPC自作するよりもだいぶ安い見積もりとなったし、どんな破格でも業務用サーバーなので安定しているだろうと思って買った。実際安定している。 ML110とかじゃなのはもう少し強いCPUが欲しかったからで、まあ現状そこそこ (CPU Usage Avg は 50/200% くらい)。純粋なNAS用じゃなくてアプリケーション色々動かす場合は4Coreのやつ買っても良かったかもしれない
ECCメモリしか使用できないものを買ったのは完全に失敗でNon-ECCが動いたほうが良い。自分は仕方ないのでヤフオクで安いのを6GB分買い集めた。多分全部で6000円くらいなので安いっちゃ安いがECCメモリでも色々種類とかあるし供給が少ないのは面倒。
OS, FileSystem
自宅でNASっぽいシステムを組むからにはデータをふっとばさないことは極めて重要であり、RAIDだったりSnapshotだったりの機能はあったほうが良い。 FreeNASなんかを入れれば全部揃うんですが、自分はこのサーバーをアプリケーションサーバーとしても使うし、FreeBSDを使えるほど豪の者ではないのでUbuntuにした。 LinuxはFreeBSDほどZFSとの親和性が高くないので大丈夫か不安だったが今のところ問題はない。(インストールは面倒だった)
Linuxを使う上でRAIDとSnapshotを使える組み合わせは以下の通りだが
1つめはトラブった時地獄っぽいし、Btrfsは不安定かつRAID5,6についてはStableじゃない。 ZFSはdkmsでkernelのbuildが必要だったりと面倒で、かつapt-get upgradeなんかでkernelが更新されるとZFSがロードされなくなったり再インストールが必要になったりする。
全部微妙なわけなのですがZFS使ってます。動くようになってzfs_arc_maxを1GBくらいに抑えこんだ後は快適。
Backupについて
自宅ストレージやってる知り合いいっぱいいるんですが、驚くべきことにBackupをとってない人が多い。つまりストレージが複数台壊れたらそれでデータはおしまいという。実際飛ばしてる人も多いしRAIDしたって故障率が下がるだけで壊れるときは壊れるし雷とか水害とか食らったらRAIDに意味ないわけだ。
というわけでどっか別の場所にデータを保存する必要があるわけで CrashPlanというサービスを使っている。
競合サービスにBackblazeがあるがこちらは「NASで使うな」と公式に書いてあってサーバーに優しくない。
Dropbox系の容量無制限サービスなんかはTS送るおじさんとか/dev/urandom送るおじさんなどの鬼畜によってガンガン殺されていく (Bitcasaとか) 一方でそのだいぶ前からあるバックアップ系のBackblazeとCrashPlanはいまだ問題なく健在で安定感がある。
CrashPlanについて
バックアップサービス。 $5/monthで容量無制限のバックアップができる。 headless(GUIのない)なLinuxでの使用方法なども丁寧に解説されている。 まあ実際復元するときの速度が現実的かみたいな問題はあるが、必要なデータだけピンポイントで復元することもできるし、自分の用途だと多分なんとかなるだろう。
アップロード速度は結構遅いがニコ生除いて20GB/monthくらいの増加量の自分だとなんとか追いついている。それ以上だと厳しくて工夫したり諦めたりする必要があるかもしれない。
バックアップ用のdaemonがJavaでわりとメモリを消費する。ファイル数にもよるがデフォルトで1GB消費するし、容量やファイル数によってはそれ以上のメモリの割当が必要になる (詳細はこの辺のドキュメント に書いてある)
ニコ生について
ニコ生は録画自体にも苦労するがその容量にも苦労する。30分程度の番組でも300MB程度の容量を消費しうっかりと一挙放送だったり野球中継だったりといった長時間番組を録画してしまうと1ファイル3GBくらいのブツになる。
ニコ生を録画し始めたらストレージに保存しておくにもキツイしCrashPlanでのバックアップも追いつかなくなってきてしまうようになった。
そんななか救世主として現れたのがGoogle Photosである。このサービスは再エンコードを許容すればなんと容量無制限で動画を保存できる!!アップロードも高速!!
ということでニコ生についてはGoogle Photosにアップロードした上で自宅サーバーからは順次消去していく運用をとることにした。
Google Photosについて
Google Photosとは画像と動画の無限ストレージ(検索機能付き)である。すばらしい。
アップロードも高速で一応QuotaはあるようだがCrashPlanとは比較にならないほどのスループットが出る。
とはいえLinux Serverで使用するにはいくつか問題がある。
- UploadにAPIが使えるのかよくわからない。古いPicasaのやつが使えるような使えないような(試していない)
- 自動バックアップソフトのGoogle Photos BackupはWindowsとMac版しかなくLinux版が用意される気配はない
というわけでファイルの更新を検知してAPI叩くものを作った上で謎APIを叩けないか試行錯誤するのはつらそうだったので。なんとかGoogle Photos BackupをLinuxで動かないか試行錯誤してみた。
- Wine → OAuthっぽいTokenをWindowsで取得してレジストリの内容をWineにコピーしてくると動くことは動く。ただしとても不安定で30分ほどで勝手に死んだりして、Wineの設定を試行錯誤するごとに振るまいが変わったりしてダメっぽいので諦めた。
- Virtual Box + Windows(正規) + Synced Folder → 概ね問題なく動く
なお、閲覧時に動画にファイル名などがでないので一覧性低そうだがGoogle Driveと連携してそちらから見ればファイル名で一覧表示できることがわかった。Googleサービス間の謎っぽい連携最高!
Virtual Box + Windows
VM上のWindowsでGoogle Photos Backupという一応GUIなアプリを動かすためUbuntuにGUI環境を入れた。
デスクトップ環境を丸ごと入れると重そうだったので X + fluxbox + tight vnc server という構成にした。環境構築はとても面倒だったがCPUもメモリもほとんど消費しておらず優秀
Google Photos Backupはだいたい問題ないものの、アップロードが十数個のファイルを残して止まり、新しいファリウを探索しなくなるという問題があったため、Windowsのタスクのスケジュールでアプリを再起動するbatファイルを登録して、一日に一度強制再起動を書けるようにした。アップロードが止まる根本原因は不明。
rem google-photos-backup-restart.bat taskkill \IM "Google Photos Backup.exe" "C:\......Google Photos Backup.exe"
それから、メモリは消費しないもののやたらにCPUを消費するのでVirtual Boxの設定で1Coreの25%などに制限しておくといい。
監視・アラート
メトリクス監視はmackerel。使いやすいし無料だし最高!
ログ監視してのアラートは手が回っておらず、一応cronのstdout, stderrの内容をメールするようにしている。日本語文字化けが直らないしmailtoをどこのファイルにも書いていない気がするのにメールが飛んでくるなど謎挙動で動作している状態なのでもっといい方法に切り替えていきたいが、このあたりは知見がない。