はじめに
UniProjectでは、Proxmoxを基盤環境として様々なサービスが稼働しています。
その基盤環境は、私のオンプレ環境で動いており、日々細かなメンテナンスや保守を行っています。
障害時のときの構成は以下のとおりです。
障害の原因と、、、?
今回の障害の原因は、スイッチの設定ミスが原因です。
障害当時ネットワークについての知識が浅く、TagVLanを設定しなければならないところをPortVLanを設定しました。
ネットワークのセグメントが変わってしまったため、以下のような構成となり、Proxmox間の通信ができなくなりクラスタ崩壊となりました。
ここまでは、よくあること(???)で設定後10秒ほどで異変に気が付きスイッチのリセットを行いクラスタ通信を復旧させました。
Proxmoxは比較的クラスタ崩壊には強いと勝手に思っていて、今回もすぐに復旧するものだと思いました。
しかし、以前に調子乗って設定したCephが火を吹きます。
Cephとは
Cephは分散ストレージの一種で、クオーラムという仕組みでクラスターを維持し、最低3ノード以上が推奨されています。現に私の環境では3ノード以上という最低要件を満たしていないにもかかわらず平然と運用していました。
3ノード以上が推奨されています
大事なことですからね?
Cephの復旧
ネットワークが復旧して10分ほどたち、いつまで経ってもステータスが復旧しないことに気が付きます。
Proxmox以外にもCephがクラスタ崩壊を起こし、厄介なことにCephからのデータが取れないがためにとんでもないIO遅延が発生していました。
SSH経由で、ここから5時間ほどCephと格闘する羽目になります。
Cephのceph-monというクラスタを構築するサービスがクラッシュを繰り返していて、これを復旧すればいいのです。
簡単なように言いますが、当時は今ほど知識がありませんでしたし、何よりコミュニティの全サービスを停止してしまっているのが何よりのプレッシャーでした。
クラッシュを繰り返している原因はクラスタのデータを保存しているDB(store.db)にロックがかかっているのが原因でした。最終的には、monを再作成して対処した記憶があります。
ProxmoxのステータスがUnknownから戻らない
同時に、もう一つ問題が発生しました。ProxmoxのステータスがずっとUnknownとなり、メトリクスが確認できない状態となっていました。
これはCephが復旧しないことにより、発生したIO遅延が原因です。
Cephが復旧しても遅延の回復までかなり時間を要します。
それでも、あまりにも復旧しないため、pvedeamonを再起動してステータス回復となりました。
総括
ドキュメントは、しっかり読んでから導入をしましょう。
ノリで導入する前に、ちゃんとテストしようね。