🦔

Raspberry Piでマルチサーバー構築

2023/01/17に公開


非公開の個人ローカル用ファイル,DB,アプリケーション兼任サーバーを構築したメモです。ラズパイ推奨電源を使用していないため参考にする場合は自己責任でお願いします。
2024/05/15追記
Raspberry Pi5が発売されたからか最近この記事がそれなりに見られているようですので、マルチサーバーの機能をアップグレードした記事へのリンクを置いておきます。リンク先記事ではミニPCを使用していますが、使用リソース的にラズパイ/ROCK5Bでも実現できそうでした。

ハードウェア

構成サーバー仕様

  • CPU (Raspberry Pi 4B)
    • Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
  • メモリ (Raspberry Pi 4B)
    • 8GB LPDDR4-3200 SDRAM
  • ストレージ (SDカード無し,外付SSDのみ)
    • 6TB SSD
      • M.2 SATA3 SSD 2TB
      • M.2 NVMe SSD 2TB * 2
  • 空きインターフェース (Raspberry Pi 4B & Argon ONE M.2 & USB3.0ハブ)
    • フルサイズHDMI 2ポート
    • USB2.0 2ポート (電源許容量ほぼ無し)
    • USB3.0 2ポート (電源許容量ほぼ無し)
    • Raspberry Pi standard 40 pin GPIO header (GPIO4 7番ピン使用不能)
    • 3.5mmオーディオ
  • ネットワーク (Raspberry Pi 4B)
    • Gigabit Ethernet
    • 2.4 GHz and 5.0 GHz IEEE 802.11ac wireless (使用可能だが無効化,未使用)
    • Bluetooth 5.0, BLE (使用可能だが無効化,未使用)

構成図

構成図

機器詳細

  • 本体
    • Raspberry Pi 4 Model B 8GB
    • GeeekPi Raspberry Pi 4ケースArgon ONE M.2アルミニウムケース
    • Western Digital 2TB SSD (WDS200T1R0B-EC)
  • 電源
    • Anker PowerPort III 3-Port 65W Pod
  • 拡張ストレージ用
    • UGREEN USB3.0 ハブ 4ポート拡張 給電用USB-Cポート付き
    • Yottamaster NVMe M.2 SSDケース (SO1-C3) * 2
    • Western Digital 2TB SSD (WDS200T3B0C-EC) * 2

電源系統

電源タップの口が足りない個人的事情のためAnker電源を使用しています。

  • 電源 -> 本体: 15W供給 (5V3A 電源の供給上限)
    • 本体 -> SSD: 最大3.8W消費 (3.3V1.15A? SSD消費電力, 平均0.06W)
      • 公式の記載からUSB機器全体に最大1.2Aの電源供給可能
  • 電源 -> ハブ: 10W供給 (5V2A USBハブの給電上限)
    • ハブ -> SSD: 最大4.5W消費 (3.3V1.36A? SSD消費電力, 平均0.09W)
      • SSD2台接続しているため最大9W消費想定
      • SSD3台目以降を増設する場合は、ハブからハブ接続になるがハブ増設が無難そう
  • ハブ -> 本体

通信系統

  • 本体 <-> 各SSD: 5Gb/s
    • USB3.0: 5Gb/s
    • 本体SSD: 6Gb/s (M.2 2280 SATA3)
    • 拡張SSD: 8Gb/s (M.2 2280 PCIe Gen3)
  • 外部 <-> 本体: 1Gb/s
    • LAN: 1Gb/s

本体サイズ,静音性

  • 本体の大体のサイズ
    • 配線込み 縦約150mm, 横約150mm, 高さ約100mm
    • 配線無し 縦約100mm, 横約100mm, 高さ約100mm
    • サイズを小さくするためだけに高いSSDを採用
    • 副次的な効果として重さも相当軽いので、やろうと思えば持ち運び可能
  • 静音性
    • 負荷をあまりかけない使い方のためほぼ無音
    • 本体ファンが回らない限り、すぐ横で寝ていても全く音がしていないと感じる
    • ssh接続した時に表示される温度はいつも40度前後

概算コスト

イニシャル

過去購入時の価格です。電源とケーブルは手持ちの余りだったため記載していません。(専用品は1200円程度)

  • 合計: 約98,100円
    • 本体: 約45,000円
      • Raspberry Pi 4B 8GB: 約11,000円
      • Argon ONE M.2ケース: 約6,000円
      • WD 2TB SSD (WDS200T1R0B-EC) 約28,000円
    • 拡張ストレージ用: 約53,900円
      • UGREEN USB3.0ハブ: 約1,600円
      • NVMe M.2 SSDケース * 2: 約7,500円
      • WD 2TB SSD (WDS200T3B0C-EC) * 2: 約44,000円

ランニング

  • 月約50円 (21円*2.376kWh)
    • 平均消費電力想定
      • 本体: 5V0.6A + 0.06W = 3W + 0.06W -> 約3.1W
      • 拡張ストレージ: 0.09W * 2 = 0.18W -> 約0.2W
    • 常時通電時の月電力量
      • 3.3Wh * 720H = 2376Wh
    • 電気代想定
      • 1kWh 21円

AWSとの比較

  • 月約32,144円 (以下構成もざっくり 間違ってる可能性高い)
    • EC2 t4g.small 1台,ストレージ100GB,転送量1GB: 3,712円/月
    • S3 5000GB,転送量10GB,読込回数3000,書込回数300: 16,769円/月
    • RDS postgreSQL,t4g.medium 1台,Single-AZ,100GB: 11,663円/月
  • たぶん3ヶ月程でペイするが、以下はAWSに劣る
    • 家でしかアクセスできない (代わりにセキュリティほぼ考慮しなくて良い)
    • AWSも冗長性のない構成だが、物理的な障害の発生可能性がAWSよりも高い

ソフトウェア

OS

  • Ubuntu 22.04.1 LTS (64-bit) Server
    • CPUアーキテクチャは異なるが開発環境がUbuntuのため同じOSを選択
    • 用途的にGUIは不要なためServer版を使用

パーティション

構成

  1. 本体SSD (MBR)
    1. vfat 253M (/boot/firmware)
      • ブート用パーティション
    2. ext4 97G (/)
      • システム用パーティション
    3. ext4 1.7T (/mnt/share/ssd1)
      • データ用パーティション
  2. 拡張SSD1 (MBR)
    1. ext4 1.8T (/mnt/share/ssd2)
      • データ用パーティション
  3. 拡張SSD2 (MBR)
    1. ext4 1.8T (/mnt/share/ssd3)
      • データ用パーティション

構成手順概要

実際は増改築を何度か繰り返したため、下のように綺麗な手順を実施したわけではありません。

  1. Raspberry Pi ImagerでMicroSDカードにRaspberry Pi OSを書き込み
  2. 本体を構成しMicroSDカードから起動
  3. Raspberry Pi上のImagerで本体SSDにUbuntuを書き込み
  4. partedコマンドを使用して本体SSDのパーティションを分割した後フォーマット
  5. raspi-configコマンドを使用してUSBブートに変更してシャットダウン
  6. 本体からMicroSDカードを抜き取って起動することを確認
  7. 起動後に拡張SSDを取り付けてパーティション作成,フォーマット
  8. 各データ用パーティションのUUIDを確認
  9. 起動時自動マウントのために/etc/fstabにUUIDのマウント先を追記

使用ソフト

  • ファイルサーバー用
    • Samba (Version 4.15.9-Ubuntu)
  • DBサーバー用
    • PostgreSQL 15.1 (Ubuntu 15.1-1.pgdg22.04+1) on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
  • アプリケーションサーバー用
    • Python 3.11.0
    • Poetry (version 1.2.2)
    • at

その他

  • SDカードを使用しない理由
    • apt upgrade やinstallなどがかなり遅い
    • 壊れやすい
  • OpenMediaVaultを使用しなくなった理由
    • ファイルサーバー機能ぐらいしか使用しない
    • ハードウェアのマウント先がシステム管理となり、ターミナルでアクセスしにくくなる
    • GUIがあるが、sshで事足りる
    • 起動が遅くなる
    • 裏で何をしているかを把握するのに時間がかかる
  • ソフトセットアップ手順
    • シェルスクリプトで残しておくと大きな構成変更する時の再セットアップが楽
    • 実際SDカードやOMVを使用しないように変更した時など何度か再セットアップした

参考文献

Discussion