doudonn WEB制作やサーバーの話とかいろいろ

さくらVPSの追加ストレージ(NFS)を使って盛大にやらかした話

  doudonn 更新日:
さくらVPSの追加ストレージ(NFS)を使って盛大にやらかした話

NFSで盛大にやらかした

という経験があるので話したい。
みんなも気をつけよう…

1、NFSにデータを入れて共有していた

あらゆるキャッシュデータをさくらVPSの追加ストレージ(NFS)に保存して共有

あらゆるキャッシュデータをさくらVPSの追加ストレージ(NFS)に保存。

各サーバーにキャッシュを保存すると管理が大変。
どうにかして一元管理にしようと考えついた先が、「NFSを使おう」だった。
さくらVPSならNFSが月額880円からある。

マウントするマニュアルが公式にあるので簡単。
当然ローカルネットワーク接続なのでレスポンスも抜群。
他のローカル内サーバーと変わらない速度で安心。

全サーバーでマウントすると、共有ディレクトリの出来上がり。
「/mnt」で使えるのでプログラミングも楽々です。

2、予期せぬエラーが発生

自作プログラムが動かない。

結論的にはNFSに繋がっていなかったことが原因です。
なぜかマウントから外れていた(中身を認識しない)。
メモリ解放をしたのが原因か、ubuntuの自動更新が原因か。

エラーが特殊な感じだったので原因特定に苦戦。
なかなかNFSが原因と特定することができず、2時間くらいかかりました。
mntというディレクトリは見えているけど、中身を認識しないという悪質さ。
再マウントしたらエラーは無くなり万事解決。

今回の原因はおそらくメモリ解放による不具合。
そして、再起動時の自動マウント設定をしていなかったこと。
公式マニュアルに書いてあるのに、すっかり忘れていた。

あとはやはり、NFSを信用しすぎていた、です。

3、NFSエラー対策

バックアップをローカルに置き、
NFSを認識しない時はローカルのデータを取得するようにした。

NFSと全く同じデータをcronで定期的に各サーバーにコピー。
そして、NFSのファイルを使う時は必ずファイルがあるかを確認して、
無かったらローカルのファイルを確認して使うという設計に。

<こんな感じ>

if (file_exists($cachefile)) {
include($cachefile);
}elseif (file_exists($cachegile_local)) {
include($cachegile_local);
}

これでもうNFSが故障しても一時的には問題無い。

4、教訓

なんでも冗長化大事。

サーバーは冗長化しているのに、プログラムを冗長化していない愚かさ。
明らかに経験不足、スキル不足です。
今後はキャッシュの取得等は必ず冗長化します。

あとはエラー処理。
エラーになったらメールが来るようになっていますが、
NFSが認識しないというのは想定外で作動せず。
キャッシュ取得も一つ一つエラーでメールをするようにしたい。

迷惑をかけたけども、この経験でだいぶスキルが上がったと思う。
NFSだけでなく何にでも言えることなので、
是非みなさんも「全てを信用しない設計」を意識ください。

※CDNやオブジェクトストレージもも信用してはいけない

さくらVPSの関連記事
サーバーの関連記事

記事一覧はこちら:サーバー

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

プロフィール
お知らせ

2022年11月30日に全記事削除しました。
無駄にページ表示速度にこだわってます。

役立ちサイト
wiki

プライバシーポリシー・広告について


© 2022-2024 doudonn All Rights Reserved.