0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人開発者とSREのための自律型ホームラボ運用術:静音・省電力で実現する高可用性インフラ

0
Last updated at Posted at 2026-11-01

個人開発者とSREのための自律型ホームラボ運用術:静音・省電力で実現する高可用性インフラ

快適なデスク環境とエンジニアワークスペース
写真1:静音性と電力効率を両立した自宅ホームラボの作業環境

こんにちは!インフラ自動化と個人開発の生産性向上を日々探求しているSREエンジニアです。

パブリッククラウドの従量課金や急な価格改定に頭を悩ませたことはありませんか?「手元で自由に動かせる検証環境が欲しい」「でも電気代やファンの騒音は抑えたい」——そんな願いを叶えるため、手元にあった低消費電力なMini PC(Intel N100 / Core i5-11320H)とRaspberry Pi 4Bを組み合わせた 「自律型プライベートクラスター」 を構築しました。

[!IMPORTANT]
【重要なお断り】:本稿で紹介するハードウェア構成は、読者の皆様に購入を推奨する「公式推奨スペック」ではありません。筆者が手元に持っていた型落ちの余剰マシンや不要パーツを「廃品利用・再活用」した結果の構成です。読者の皆様がお持ちの古いノートPCや余っているミニPC、デスクトップ機でも全く同様の設計思想で構築可能です。


1. なぜ今、オンプレミス・マイクロクラスターなのか?

クラウドネイティブ全盛の時代にあえてハードウェアを手元に置く最大のメリットは、 「ネットワーク帯域の自由」 と 「実験コストのゼロ化」 にあります。

私たちが直面していた3つの課題

  1. 毎月のクラウドインフラ費用の増大:CI/CDランナーやRAG用ベクトルDBを常時稼働させるとコストが跳ね上がる。
  2. ストレージ転送レイテンシ:大容量のログやモデル重みデータを外部APIに往復させる非効率さ。
  3. 突然のサービス停止リスク:APIレートリミットによる夜間バッチジョブの破綻。

これらを解決するため、3台の物理マシンで役割を明確に分担させた三位一体(Triad)アーキテクチャを採用しました。


2. ハードウェア構成と役割分担のリアル

エッジデバイスとハードウェア検証
写真2:手のひらサイズの省電力ノード群による分散コンピューティング

実際に稼働している3ノードのスペックと消費電力の実測データです:

ノード種別 再活用ハードウェア 主な役割 アイドル消費電力 月間電気代(目安)
Gateway Node Raspberry Pi 4B (4GB) Keepalived VIP, CoreDNS, WireGuard 約 3.8W 約 90 円
Core Node Intel N100 Mini PC (8GB DDR5) PostgreSQL 18 主系, MinIO S3, Redmine 約 7.2W 約 170 円
Compute Node Intel i5-11320H (16GB) Playwright Hub, Dify LLM, Celery 約 14.5W 約 340 円

合計しても常時待機電力は約25〜30W、月額約600円程度。一般的なVPSを何台も契約するよりも圧倒的に安価で、なおかつメモリ合計28GBという実用的な作業領域が手に入ります。


3. ヘッドレスブラウザによる自律的ヘルスチェック

インフラが正常に稼働しているかどうかを「外側」から監視するため、Playwrightを用いたヘッドレスブラウザ監視エージェントを導入しています。

以下は、Node.jsで書かれた軽量な巡回スクリプトの例です:

// note_health_monitor.js
const { chromium } = require('playwright');

async function checkClusterHealth() {
  const cdpUrl = process.env.PLAYWRIGHT_CDP_URL || 'ws://192.168.3.9:3002';
  console.log(`[HealthCheck] Connecting to CDP Hub at ${cdpUrl}...`);

  const browser = await chromium.connectOverCDP(cdpUrl);
  const context = await browser.newContext();
  const page = await context.newPage();

  try {
    const response = await page.goto('http://192.168.3.3/healthz', {
      timeout: 10000,
      waitUntil: 'networkidle',
    });

    if (response && response.status() === 200) {
      console.log('✅ 全サービス正常稼働中 (All systems operational)');
    } else {
      console.warn(`⚠️ 異常検知: ステータスコード ${response?.status()}`);
    }
  } catch (error) {
    console.error('❌ 監視エラー発生:', error.message);
  } finally {
    await browser.close();
  }
}

checkClusterHealth();

運用で学んだ重要ポイント

  • 共有メモリの設定:Dockerコンテナ内でブラウザを複数動かす際は、shm_size: '2gb' を指定しないと高負荷時に突然クラッシュ(SIGBUS)します。
  • 冪等性の担保:自動投稿やバッチ処理には必ず sha256(日付 + タイトル) などの一意キーを付与し、二重実行を防止しています。

4. 高可用性の真実:なぜ家庭環境で「過剰な全自動」を避けたのか?

ホームラボの可用性を設計する際、「Quorum Witness(仲裁哨兵)を置いて完全自動フェイルオーバーにしよう」と考えがちです。しかし、実地検証を重ねる中で私たちは重要な原則に辿り着きました。

家庭環境に「仲裁哨兵」を置かない合理的理由

商用データセンターのように二重化されたUPS電源がない家庭環境では、一時的な家庭内Wi-Fiの瞬断や電源タップの接触不良によって、仲裁哨兵が正常なノードを「死亡」と誤認し、危険なスプリットブレイン(脳裂)を引き起こすリスクがあります。

そのため、現在のアーキテクチャでは以下の 「徹底的に誠実(Radical Honesty)」 な設計を採用しています:

  1. ネットワーク層:Keepalived VRRP による 1〜3秒の極速仮想IP(VIP)漂移。
  2. データ層:PostgreSQL 18 の物理ストリーミングレプリケーション(待機系i5は読み取り専用として計算負荷を分散)。
  3. 障害復旧(RTO):Coreノードが物理故障した際は、明確にテストされた復旧スクリプト(disaster-recovery-failover.sh)を実行し、 10〜30分以内の目標復旧時間(RTO) で i5 を主系に昇格。

家庭環境や個人開発においては、制御不能な「全自動の幻想」を追うよりも、 「手順が確立された安全な半自動・スクリプト主導リカバリ」 の方が遥かに安全で確実です。(※なお、UPSを完備した環境での Quorum Witness 自動仲裁については、将来の発展編・単独記事にて詳しく検証する予定です)。


5. 連載予告:『HomeLab SRE Cookbook』の開幕へ

「良いインフラとは、そこに存在することを忘れてしまうインフラである。」

自宅にこの仕組みを整えてからというもの、深夜にサーバーの障害で起こされることもなく、日々のブログ執筆や技術検証が驚くほどスムーズになりました。

そして、本記事はその壮大な冒険の「プロローグ(前日譚)」に過ぎません。

手元の旧型PCを活用し、ゼロからエンタープライズ級のSRE運用と一人会社(OPC)基盘を構築するための全知見を体系化した大型連載—— 『HomeLab SRE Cookbook』 をいよいよ本格始動します!

次回は 【第000章:30Wの主権的ホームラボSRE青写真(創刊総覧&全125章ロードマップ公開)】 をお届けします。

自宅サーバーやインフラ自動化に興味のある方は、ぜひスキ(Like)やフォローをして次回の公開をお待ちください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?