UPS 連動シャットダウン構成 (完成版 v2)
稼働中 APC Smart-UPS 1200 ×3 + 2-of-3 判定 + 復電キャンセル + 4段階停止シーケンス (Supermicro → hirame → DarkHero → R640)
katuocloud DC では APC Smart-UPS 1200 × 3台 を用いて 2-of-3 判定による安全停止 を行う。 監視ノードは R640。 R640 が NUT (Network UPS Tools) で 3 台の UPS を SNMP 経由で監視し、 停電条件成立時に Supermicro → hirame → DarkHero → R640 の順で停止する。
| UPS | IP (VLAN10) | NMC | 接続機器 |
|---|---|---|---|
| UPS-A | 192.168.10.50 | AP9630 | 通信 / Switch (12XS, 48T, RTX1300) + DarkHero + hirame |
| UPS-B | 192.168.10.51 | AP9630 | Server 系 (R640 / maguro 電源系統の一部) |
| UPS-C | 192.168.10.52 | AP9630 | Server 系 (R640 / maguro 電源系統の一部) |
3 台の UPS のうち 2 台以上が OB (On Battery) になった場合のみ停電扱い。 単独 OB (1 台だけ) はノイズ・誤検知として無視する (例: コンセント抜けでひと UPS だけ OB になっただけ等)。
| 条件 | 動作 |
|---|---|
| 2 台以上 OB を検知 | statefile 作成、 タイマー開始 |
| 5 分連続継続 | 停止シーケンス実行 |
| 5 分以内に復電 (OB → OL に戻る) | statefile 削除、 停止キャンセル |
- maguro 最優先: ストレージ (LUKS + bcache + XFS) を先に止めてデータ破損リスクを最小化
- hirame 次: Collabora サービスを安全停止 (NC データ本体は maguro)
- DarkHero: クライアント / 計算ノードを停止
- R640 最後: 管理ノードは最後まで生かして停止制御を担当
監視ノード: R640。 SNMP (APC AP9630) で UPS 3 台を polling。
MODE=netserver
[ups-a] driver = snmp-ups port = 192.168.10.50 community = public desc = "UPS-A" [ups-b] driver = snmp-ups port = 192.168.10.51 community = public desc = "UPS-B" [ups-c] driver = snmp-ups port = 192.168.10.52 community = public desc = "UPS-C"
LISTEN 127.0.0.1 3493 LISTEN 192.168.10.21 3493
※ 192.168.10.21 = R640 MGMT IP
[upsmon] password = (設定済み) upsmon master
MONITOR ups-a@localhost 1 upsmon (password) master MONITOR ups-b@localhost 1 upsmon (password) master MONITOR ups-c@localhost 1 upsmon (password) master
# ping 確認 ping 192.168.10.50 # UPS-A ping 192.168.10.51 # UPS-B ping 192.168.10.52 # UPS-C # SNMP walk 確認 snmpwalk -v1 -c public 192.168.10.50 | head snmpwalk -v1 -c public 192.168.10.51 | head snmpwalk -v1 -c public 192.168.10.52 | head # NUT 状態確認 upsc ups-a@localhost upsc ups-b@localhost upsc ups-c@localhost
正常時ステータス例:
ups.status: OL(On Line)battery.charge: 100battery.runtime: 正常
| 接続エイリアス | ssh maguro |
| HostName | 192.168.10.31 (VLAN10 MGMT) |
| 実行ユーザー | upsctl |
| 停止権限 | visudo: upsctl ALL=(ALL) NOPASSWD: /usr/sbin/shutdown |
| authorized_keys | /data/sftp/upsctl/.ssh/authorized_keys (SFTP 系構成のため通常のパス外) |
| 安全テスト | ssh maguro 'sudo shutdown -k now' 成功済 |
| 接続エイリアス | ssh hirame |
| HostName | 192.168.10.40 (VLAN10 MGMT) |
| 実行ユーザー | hirame |
| 停止権限 | visudo: hirame ALL=(ALL) NOPASSWD: /usr/sbin/shutdown |
| authorized_keys | /home/hirame/.ssh/authorized_keys (通常 Linux 構成) |
| 役割 | Collabora Code (office.k2-o.net 関連) |
| 電源接続 | UPS-A (192.168.10.50) |
| 安全テスト | ssh hirame 'sudo shutdown -k now' 成功済 |
| 接続エイリアス | ssh darkhero |
| HostName | 192.168.10.10 |
| 実行ユーザー | neowa |
| 動作確認 | ssh darkhero "hostname" → WAN-PC |
| 停止コマンド | shutdown /s /t 30 /c "メッセージ" |
| authorized_keys | C:\ProgramData\ssh\administrators_authorized_keys (管理者ユーザのため) |
UPS 自動停止専用に パスフレーズ無し鍵 を作成 (cron 実行のため)。
~/.ssh/id_ed25519_ups_auto ~/.ssh/id_ed25519_ups_auto.pub
Host maguro
HostName 192.168.10.31
User upsctl
IdentityFile ~/.ssh/id_ed25519_ups_auto
IdentitiesOnly yes
Host hirame
HostName 192.168.10.40
User hirame
IdentityFile ~/.ssh/id_ed25519_ups_auto
IdentitiesOnly yes
Host darkhero
HostName 192.168.10.10
User neowa
IdentityFile ~/.ssh/id_ed25519_ups_auto
IdentitiesOnly yes
- UPS-A / B / C の
ups.statusを取得 OBを含む台数をカウント- 2 台以上なら statefile 作成 (タイマー開始)
- 5 分継続した場合のみ停止シーケンス実行
- 復電したら statefile 削除 → 停止キャンセル
* * * * * /usr/local/bin/ups-check.sh >/dev/null 2>&1
# 1) maguro (Storage) ssh -o BatchMode=yes maguro 'sudo /usr/sbin/shutdown -h now' sleep 20 # 2) hirame (Collabora) ssh -o BatchMode=yes hirame 'sudo /usr/sbin/shutdown -h now' sleep 20 # 3) DarkHero ssh -o BatchMode=yes darkhero 'shutdown /s /t 30 /c "UPS 2-of-3 battery event: controlled shutdown from R640"' sleep 40 # 4) R640 (自身) shutdown -h now
完成版スクリプトでは 5 分待機中に 2-of-3 条件が解除された場合は停止をキャンセル する。
- UPS-A / B が OB
- 3 分後に商用電源復帰 → 両方 OL に戻る
- statefile 削除
- 停止しない
- ✓ UPS 3 台の固定 IP 設定 (VLAN10)
- ✓ SNMP 有効化 (community public)
- ✓ R640 で NUT 監視
- ✓ 2-of-3 判定スクリプト
- ✓ 復電キャンセル仕様
- ✓ maguro SSH 停止
- ✓ hirame SSH 停止 (2026-03-31 追加)
- ✓ DarkHero SSH 停止
- ✓ cron 自動監視
UPS 自動停止専用鍵 id_ed25519_ups_auto は パスフレーズ無し で作成済前提。
DarkHero は管理者権限ユーザのため、 通常の ~/.ssh/authorized_keys ではなく:
C:\ProgramData\ssh\administrators_authorized_keys
maguro は SFTP 系設定のため、 通常の /home/.../.ssh ではなく:
/data/sftp/upsctl/.ssh/authorized_keys
hirame は通常の Linux 構成:
/home/hirame/.ssh/authorized_keys
この構成は単純な家庭 UPS 運用ではなく、 以下を満たす:
- 複数 UPS 監視
- 2-of-3 停電判定 (誤検知耐性)
- 復電キャンセル
- ストレージ優先停止 (データ保全)
- サービス階層別停止 (Collabora → Client → Management)
- Windows / Linux 混在停止
- 管理ノード最終停止
| 日付 | 変更内容 |
|---|---|
| 2026-03-xx | 初版作成 (Supermicro + DarkHero + R640) |
| 2026-03-31 | hirame 追加 (Collabora CODE 自動停止対応) |
| 2026-05-14 | R640 fresh install + ssh alias 名 (supermicro → maguro) リネーム時に config 反映確認 |
- ! 実停電を模したテスト手順書作成 (年1回の停電テスト)
- ! UPS ごとのバッテリー健全性確認 (3年で劣化)
- ! R640 再起動後の NUT 自動復旧確認
- ! 復電後のノード起動順序設計 (BIOS WoL + 待機)
- ! Telegram 通知連動 (停電検知 → 即座に通知)