我剛剛從日本出差回來, 早上去洗了衣服. 剪了個頭髮, 中午的時候跟 YS 約了要把三顆硬碟放進 Asuka, mirei 以及bowser 三台主力Proxmox cluster.
這應該只是例行公事, 一切都很順利, 一台一台的 Shutdown, YS 也很快的把 hdd 放進去重新開機
開機流程一切順利. Synology NAS 也在同一個時間更新到最新版.
每一台 server 多了一顆硬碟因為我想要嘗試 Ceph (Distributed Filesystem) 這樣可以做到 HA
https://ceph.io/en/ 有興趣者可以自己看, 基本上我希望做到任何一台 Server 掛了, 服務都還在, 真正的把三機一體做進去
目前三台機器雖然有互相溝通, VMs / CTs 可以自由 migrate 到任何其他機器, 但終究還是在一台機器. 假如 email server 在 asuka server, asuka server 掛了就掛了, 假如asuka 修不好, 也只能從 backup 回復, 需要好幾個小時.
HA (High Availability) 的基本需求就是 Computer / Storage 分離. 理論上我應該用 Synology NAS 當 Storage, 但目前那台 Synology NAS 有兩個問題:
1. Synology 本身也就一台 (Single Point of Failure)
2. Synology 那台我只有 2 x 1Gbps 的網路, 但我的Server 都已經是 10Gbps, 1Gbps 已經不夠快了.
用這三台Proxmox Server 可以解決這問題.
好, 現在開始講發生了啥事:
2pm – 3pm: 安裝了 Ceph 相關 Package, 一切ok, 也跑起來了, 非常開心
3pm – 4pm: 發現 Configuration 有 1Gbps 以及 10Gbps, 想說想測測看假如都放在 10Gbps 會不會比較快, 但要重新 Config 很困難, 需要把所有東西刪掉再試
4pm: 要刪除 /etc/ceph* 以及 /etc/pve/ceph* 相關的檔案, 要知道 /etc/pve 是所有 cluster 相關 config 的地方, 非常危險, 我不小心做了 rm -rf /etc/pve …………
這代表啥, 基本上就是在電影上看到的自我摧毀模式
………………….. 我沒有 Proxmox 整體 cluster 的備份. 但真正 Application / Data 是備份非常完整, 所以 bottomline 是沒有問題的. 但這次洞統很大……..
這是什麼意思, 用簡單的Example 講的就是說, 假如那三台 Servers 是三個人的話, 原本是一個小 Team 互相支援然後各自做各自的事情, 我幾本上把他們的腦子一起給砍了
他們三位很認真的工作: Email server, Firewall, 這個 Blog Site, 我的 gitlab, cloud storage 以及 DNS 服務 都完全不受影響, 因為他們三位還不知道他們的腦袋不見了.
3 台server 基本上都還在 RAM (Memory) 上執行程式, 只要不要重啟服務, or 重開機, 是可以繼續工作. 但他們只要重新開機, 還是服務重啟, 馬上就會死了.
最慘的狀況是這時候突然斷電, 所有系統都會下線, email, dns, firewall………etc 應該連哭都哭不出來了
這時打給 YS 要跟他說基本上是 emergency, 可能要請他standby, 假如電力還是網路出問題, 需要他處理, 但不知道為什麼, 這次YS 完全沒接電話, 這屎只能自己來了
4pm+
從這之後我已經沒在看時間了, 我需要把所有的 config 重寫回來, 這我從來沒做過. 但我知道, 我這人生第四次 Disaster Recovery 的時間到了:
第一次是我自己的硬碟 filesystem 壞掉, 以及備份不足, 花了整個晚上才把所有的Data 補足
第二次是在 UCSD (1999) 的時候用那 “天使的左手“把教授的硬碟喚起 (他在UCSD 兩年的工作都在上面, 他完全沒備份), 自從之後, 教授把我當神一樣地看待, 跟我在 CSE (Computer Science Engineering) 的另一個外號 “惡魔的右手” (因為我負責砍帳號, 以及把在網路上不乖的人處理掉)
第三次是在 南京智鶴 (2000) 時拯救 MongoDB 集群, 從 7pm – 5am. 這有相當多的細節留下, 假如當時沒救回來, 公司應該倒了
這次…. 是第四次, 也是最複雜的一次, 假如我搞砸了, Jeff 應該會哭著求我回美國趕快修
首先, 要先說: Data 本身是 Safe 的 所以只要硬碟別亂動風險不高. 重新灌 Proxmox, 然後硬碟街上是ok 得, 但得花時間, 而且需要 YS 去作. 但問題是如何把 Cluster 在短時間無感的情況下重新 config 跟之前一樣, 放進去. 不知不覺就好了, 是考驗技術的時候了
必須感謝 google 大神, 雖然並沒有solution, 但看到其人怎麼死的 給了不少靈感.
還好, 非 cluster 相關的參數如 root password, network 都沒受到影響, 假如 network 沒了, 我現在應該已經要出現在 office 了
現在開始工作
第一步, 把所有Cluster 相關的 Storage 參數(Local, Remote, PBS) 都加回來
第一步, 要重建所有 VM 的 config, 所以我新建了一些VM, 參考了那些參數, 然後一個一個塞回去到
/etc/pve/qemu-server
網路上看到 qm rescan 這command 可以 scan 到 VM 相關的 storage, 方便重建. 所以 SOP 是
1. zpool list 看系統用了哪些 storage <-> VM ID mapping
2. 從backup 上看那是那個系統的 ID
3. 重先建 VM (no storage)
4. qm rescan 把硬碟秀出來
5. Add 那些 unused HDD to VM
6. 調整 boot order, 以及其他參數
7. 假如這VM 本身沒再跑, 直接跑起來試試看了, OK 就沒問題了
8. 假如這VM 本身已經在跑, 就要把他關掉, 然後重新開 ok 就 ok 了
以上就是如何確保重啟 VM 之後東西還能動.
基本上做到這已經基本上把他們頭都接回來了, 確保70 % 的問題可以解決了, 需要的是時間一個一個記憶接回來
慢慢的東西都接回來了, 到目前為止, 那三台 server 還都不知道他們頭掉了, 而我也把他們頭接起來了
所有 VM 都回來後, 我看了一下, Cluster 的資訊是空的, 我參考了網站, 寫了一個上去, 從 UI 上面看起來應該是 ok 的, 那時候心裡想說, 應該 ok 了
看了下時間, 8pm 左右
要知道, Cluster config 其實才是最困難的, 我也沒有重接過.
Cluster 是啥? 就是如何讓這三台機器互相合作
想想問題一定得解決, 我把重要VM migrate 出 mirei server, 嘗試了重啟 cluster 服務, 就像我去敲了其中一個人, 讓他回應我.
媽的, mirei server 就離隊了, 因為 cluster config 跟那兩隻無法溝通, 假如我也叫那兩隻, 一樣的問題會發生
重啟服務是測試基本上 config 跟 data 是否 ok, 重啟機器那才是最後驗證.
8pm 後嘗試所有辦法接上 cluster, (讓mirei 回到還在群組的那兩位) 但到最後我知道, 接不上了, 只能切斷, 重新接起來
這時候, 我故意重啟 mirei, 確定單機啟動是沒問題了, 現在是 cluster 的問題
我把 MFA 移除, 這太危險了, 不小心連我都進不來
我最後決定在 mirei server 上面重新建置一個 cluster 群.
重新再 reboot 確認都沒問題後, 就是如何把 bowser, asuka 加到這邊了
要知道要加群要先退群, 然後清掉 VM, /CT 後才能加入, 以前的我是把東西備份後刪除, 然後乾乾淨淨的加入新群
但要知道, 備份好幾 TB 需要好多個小時, 要太多時間
這個時候, 俺的無敵大腦突然靈光出現, 其實清空VM, 不就像一開始一樣 config 看不到不就行了? 不用真的刪 Data., 這樣只要把 /etc/pve/qemu-server/*.conf 丟到其他地方一下就行
這招果然是對的, 我在不對Data 做處理的時候就完成”清空” 動作, 加入後把 *.conf 移回來, 這樣只要幾分鐘就行了
我先把 bowser 加回, 最後是 asuka.
最後的最後, 我把 MFA 加回然後準備 reboot bowser 以及 asuka
我在 asuka 做最後的 reboot 確認 ok 後時間是 11:30pm 左右
到這裡危機解除, 我在這 7 個多小時的經驗值是 exponentially 成長, 接下來不怕了
對了, 這個時候 YS 起床了… 睡得很好喔~~~ 我都去地獄一回回來了……
最後還是要對自己說句話: “rm -rf ” 這指令還是得三思………….
Ceph 呢? 下禮拜再說了吧……… 我基本上已經快 24 小時沒吃東西了, 等下要出門吃飯了