伺服器名稱:安裝時就選好,之後就別再動它
名稱不是標籤,而是位址。設定存放在以它命名的資料夾中,圖表檔案以它命名,叢集成員也靠它辨識。
AtlasPVE ·
本條目涵蓋以下問題
- proxmox 修改主機名稱
- proxmox 改主機名稱後面板打不開
- proxmox 節點名稱是什麼
- proxmox 叢集節點改名
- proxmox 圖表空白
安裝時會輸入一個名稱。當下感覺無關緊要,因為名稱通常只是個標籤。
在這裡不是。在 Proxmox 上,伺服器的名稱是一個位址,日後要更改,工作量遠比預期的大。
名稱用在哪裡
設定存放在以它命名的資料夾中。各台機器的定義就放在這個資料夾底下。改了名稱,定義仍會留在舊名稱底下。
歷史圖表檔案以它命名。改了名稱,系統就會為新名稱開一個新的空白檔案。舊資料不會被刪除,但再也沒有人去看它。面板上看到的,是一台沒有過去的伺服器。
在叢集中,成員靠名稱辨識。對叢集而言,替節點改名就等於銷毀這個節點,再放一個新的節點到它的位置上。
憑證帶有名稱。改了名稱就會出現瀏覽器警告,接著還得去追查原因。
所以改名不是表面工夫
在單一伺服器上,這件事很費工:設定要搬移,服務要重新安排,憑證要重新簽發。
在叢集中,實際做的根本不是改名:而是把節點從叢集移除,再以新名稱重新加入。換句話說,這跟重建它是同一件工作,只是換了一個標籤。
簡單說,安裝時做的這個決定,是日後最難撤回的一個。值得花五分鐘想一想。
選擇名稱時
簡短、小寫。即使輸入很長的網域名稱,實際用到的也只有第一段;寫上其餘部分沒有任何好處。
要經得起時間。名稱裡不要放角色。今天是備份伺服器的機器,明天可能變成主伺服器,結果主伺服器卻叫做 backup。機櫃位置、客戶名稱、專案名稱也一樣:這些都可能改變,機器卻不會跟著變。
有意義但保持中性。足以區分兩台機器,但不足以說出一段故事。
如果圖表變成空白
這正是本文派上用場的地方。面板運作正常,機器也都在執行,但歷史圖表看起來一片空白。
第一個要檢查的是伺服器的名稱。如果名稱與系統預期的名稱已經不一致,系統就無法在預期的位置找到圖表檔案,畫面也就是空的。沒有任何東西報錯,因為技術上確實沒有錯誤:要找的檔案不存在,僅此而已。
Atlas 的做法
本文背後有一個產品本身的缺陷,值得講出來。
在 Atlas 中,伺服器名稱曾在五個不同的地方解析,其中三處帶著同樣的瑕疵:來源暫時無法取得時,名稱是捏造出來的。系統寫下一個常見的預設值,並在整個處理程序的生命週期中保留在記憶體裡。
經過實際量測,發現了兩件事。
第一:捏造的值一旦寫下,之後即使能取得正確的名稱也沒有幫助,因為記憶體檢查位在最前面。於是一次短暫的異常,變成了永久的錯誤答案。
第二,也是更隱蔽的一點:名稱錯誤造成的後果並非處處相同。客體機器的圖表持續正常,因為那些檔案以機器編號定址,名稱從不經過驗證。伺服器自己的圖表卻變成空白,因為檔案路徑中包含名稱。伺服器狀態和機器清單也一起失效。
所以症狀是混雜的:有些圖表有資料,有些是空的。看到這種畫面的人,誰也不會懷疑到名稱上。
修正歸結為三條規則。不捏造:不知道就說不知道。只有經過驗證的名稱才保留在記憶體中:後備路徑得到的值會被使用但不儲存,下一次呼叫會重新嘗試。後備值是機器本身的名稱,因為在 Proxmox 上兩者本來就相同。
通用的教訓
本 wiki 的另一篇條目寫過:空的答案和取不到答案不是同一件事。
這裡的缺陷比那還糟一級:在未知的位置放上一個看似合理的預設值。空清單至少很奇怪,而奇怪的事會被注意到。捏造的名稱一點也不奇怪,看起來完全正確,所以沒有人會去看它。
如果它接著又被儲存下來,暫時的故障就變成了永久的故障。
可以寫成一條規則:預設值真正是預設的地方,它是好東西;拿它頂替未知的地方,它就是謊言。
資料來源
Proxmox 官方文件。內容為英文,且在此主題上以官方文件為準。