當安裝新伺服器時,我通常傾向於忘記伺服器實際工作所需的東西。我希望進行某種自動飛行前檢查,以在首次啟動伺服器之前註意到缺少的功能,並讓即時使用者在伺服器上運行。
假設我正在負載平衡器後面使用 Tomcat 或 PHP 等平台運行應用程式伺服器集區。該服務通常需要以下一些內容:
- 安裝的軟體(外部程序,如 wget 或 ImageMagick 等)
- 安裝的模組(例如 libcurl、mod_rewrite、Oracle 等)
- 設定檔(例如 tnsnames、php.ini 等)
- 已安裝的檔案系統、某處的符號連結、某些目錄的特定權限
- 特定網路連接埠必須可從電腦存取(例如 mysql 或 http 代理)
- 機器上必須可以存取特定的網路連接埠(這必須從另一台機器進行測試,例如 rsync 或連接埠 8080)
- 必須啟動特定流程
- cronjobs 必須存在
我認為可以為大多數這些條件編寫單元測試並在安裝後在每台電腦上運行它們,但我更喜歡為此類任務使用更具體的工具,也許使用特殊的類似 shell 的語言來編寫測試(考慮到測試所有內容都需要不同的工具,這將涉及執行perl 腳本、java 程式、檢查檔案、權限、confic 檔案中的行等)。
我應該補充一點,我不想能夠修復丟失的項目,我只是想檢查是否需要向營運同事請求額外的更改。
答案1
我們這樣做的方法是使用 CFengine(但 Puppet 也可以)基於集中配置對各個節點進行設定。 CFengine 將以正確的順序強制執行機器的正確配置並繼續這樣做,例如,如果進程停止,它們將重新啟動。
在所有節點上,都可以使用腳本來檢查許多事情(中央儲存體上的檔案是否可讀,是否可以開啟與 MySQL 叢集的連接等)。負載平衡器使用此腳本作為運行狀況檢查:只有當所有檢查都通過時,節點才會傳回負載平衡器期望的值,並將其標記為「啟動」並允許處理流量。
答案2
您需要先記錄您的建置過程,然後才能編寫腳本來測試新系統的「準備」。此流程文件將為您提供要驗證的檢查清單以及每個伺服器的一致建置。 Cfengine 和 puppet 是自動化建置的好方法,但要使用它們,您需要一個需要配置的所有內容的清單。