自宅サーバーを安定運用するためのトピックス
自宅サーバー歴6年目に入った筆者が、これまで悪戦苦闘して自宅サーバーを安定化させるためにやったことをまとめました。
公開日: 2022.5.6
障害対策:監視は必須、落ちない工夫を
これは自宅サーバー限らずサーバー運用での重要なポイントですが、サーバーが落ちていないかを監視してレポートする(通知する)のがサーバー運用では一番大事です。
VPSなどを使っている場合はサービス事業者側が障害を検知してお知らせしてくれますが、自宅サーバーの場合は「動いていると思ったら、知らずに1週間止まってた」なんてことも最初はよくあります。
自宅サーバーの場合、サーバーが止まる原因は、
- 電源が落ちる
- OSが落ちる
という2パターンがあります
物理電源が落ちるケースは停電やブレーカーが落ちたなどの外部要因もありますが、電源タップを間違って抜いたとか、家族が一瞬だけ電源コードを抜いてしまったなど、意外と落ちる原因としては高めです。
OSが落ちるという点についてはVPSにもありますが、VPSでは自身の仮想マシンのハングアップ系がほとんどですが、自宅サーバーの場合、物理的なHDDやメモリの故障などで落ちる場合もありますし、プロが調整していない分、OSが不安定になってハングアップすることも多々あります。
このように、自宅サーバーは最初は落ちることがよくあるので、監視系のアプリやサービスを必須です。自分は、NetdataというDockerで建てられるリソース管理OSSを入れています。
とはいえ、ここ2、3年は1年に1回も落ちることはないので、ほとんど立ち上がってるだけですが。。。
LANルーターは超重要
自宅サーバーというとサーバーにお金をかけたくなりますが、LANルーターも超重要です。IPアドレス固定や、ルーターの延長ができるかどうかで、自宅サーバー群の拡張性が決まります。
自宅サーバーを外部に晒している場合は特に、セキュリティ面が強いルーターにすべきです。具体的には、80番と443版以外のアクセスを全てしっかりと遮断できる設定ができるルーターがないのであれば、自宅サーバーを外部に公開しないほうが良いかと思います。(むしろ、民生ルーターだと80番と443番を公開できることの方が少ないですが・・・)
公開しないにしても、家族とルーターを共用しているのであれば、自宅サーバー群は別のルーター管理下において、インターネットだけ共用ルーターからもらうという設定にするのがベストです。
用途で分けて、中負荷を維持するように
自分の場合は、DBサーバーとバッチサーバーの2台を24時間365日稼働させています。
最初は1台のハイスペックマシンで運用したのですが、処理が固まるとどうしてもマシンが重くなってしまって、処理遅延が処理遅延を呼ぶ無限ループになってしまうので、現在は分散型にしています。
特に、DBに処理させる系の場合、バッチサーバーやアプリからDBにアクセスするだけでリソースを食うのに、同じマシンでDBも動作させていると、どうにもこうにもならなくなることがなります。
分散させておくと、バッチ処理だけ止めて、DBの処理は継続するということも簡単にできますし、何かあった時でも「DBだけは守れる」という安心感があります。
液晶ディスプレイはあった方が断然便利
自宅サーバーというと、LANでつないでリモートで管理する人も多いかと思いますが、個人的には15インチでも良いので物理ディスプレイを用意するのをおすすめします。
というのも、自宅サーバーの場合、sshdが起動する前の段階で何かしらの原因でOSがクラッシュすることも頻繁にあるので、「何が原因か?」をすぐに確認する意味では、液晶ディスプレイが圧倒的に便利です。(自分が遭遇したレアなトラブルでは、マザボの内蔵バッテリーが死亡してBIOSの時刻エラーが発生したケース)
液晶ディスプレイは場所を取るので使いたくない気持ちはあるのですが、何かあった時のためにHDMIやVGAのケーブルだけでもつないでおくと、トラブル時に助かります。
停電対策:UPS(無停電電源)はあれば安心だけど必須ではない
現在の日本の都市部であれば、いきなり停電するということは滅多にありません。あるとしたら、家庭用のブレーカーが落ちてしまうという方が多いくらいでしょう。
その意味では、UPS(無停電電源)は必須ではないと思います。実際、筆者が6年間くらい自宅サーバーを運用していて、停電があったのはマンションの設備工事による計画停電くらいで、事前にわかっていているのでサーバーをダウンさせて対処していました。
注意したいのは、家庭内ブレーカーのエリアのうち、ブレーカーが落ちやすいブロックで使わないこと。エアコン、ドライヤー、電子レンジなどを使うエリアの電源を使うと、ブレーカーが落ちやすいので自宅サーバーも被害に合います。