在進(jìn)行這篇的扯淡之前,讓我想起了《太平廣記》里的一個《 板橋三娘子》的故事,姓趙的客商窺探到客棧老板娘三娘子在小箱子中取出小孩玩具大小的木頭牛,木頭人,噴口水,木頭人、牛開始犁地耕作,撒一粒蕎麥種子,木頭小人種下,不一會兒,蕎麥長成開花結(jié)實(shí),木頭人收割,乃至磨成面粉。然后三娘子把木頭牛、人收入箱中,用得來的面粉做了數(shù)張面餅。多么好的一個自動化場景呀。
自動化的目的
自動化管理是網(wǎng)站規(guī)模化之后必須要面對的問題。為什么要自動化?肯定不是為了炫技,針對一個發(fā)展中的網(wǎng)站來說,自動化的主要目的還是為了節(jié)省維護(hù)成本,提升運(yùn)維成熟度能力。另外一個經(jīng)常被忽略的收益是能讓運(yùn)維工作更有趣味性一些,不那么無聊,不無聊的有益副作用是減少人為出錯的可能。
自動化針對的范圍大致可以分為安裝自動化、部署自動化、軟件發(fā)布自動化、升級自動化、監(jiān)控自動化等幾個方面。優(yōu)化自動化? 別,這個稍微”高級”并且不靠譜了一點(diǎn)。
自動化要解決的問題是 N 次循環(huán)的過程,如果 N 不具備延續(xù)性,那么自動化未必有必要。比如某個過程可能只是短時間內(nèi)需要臨時進(jìn)行幾次,是否有必要將其自動化就有待于商榷。如果計(jì)劃和開發(fā)自動化過程的成本高于非自動化成本就沒必要了。
開發(fā)自動化過程
如果看過古龍的小說,他曾經(jīng)描述過幾個有趣的懶人,懶人造了一些木頭人和機(jī)關(guān)來幫自己干一些不愿意做的事情。自動化多少就是”懶人”要做的事情,因?yàn)閼新铮圆艜朕k法節(jié)省時間和其他成本。一般來說,這個過程的開發(fā)者也是使用者,所以沒必要一定要按照所謂的項(xiàng)目過程去走,但是開發(fā)者必須能夠產(chǎn)出一份文檔給同團(tuán)隊(duì)的伙伴(如果有的話)。
考慮到多數(shù)的網(wǎng)站運(yùn)維可能都是在 Unix like 環(huán)境中的,而 Unix 的哲學(xué)思想之一就是”Write programs that do one thing and do it well”,每個過程只做一件事情就很關(guān)鍵,”功能單一的自動化模塊”是有必要的,把不同的模塊拼裝起來再去完成更復(fù)雜的需求。
Unix 相比 Windows 來說,天生具備可自動化能力。如 Shell/BASH(自動化日常操作)、CronTab(自動化任務(wù)調(diào)度) 、Expect (自動化交互場景) 、rsync(數(shù)據(jù)遠(yuǎn)程同步)等 啊都是一些需要注意的技術(shù)內(nèi)容。
優(yōu)化自動化過程
自動化過程一般要有個生命周期,定期升級、優(yōu)化也是有必要的。面對不同的應(yīng)用場景應(yīng)該逐漸改進(jìn)自動化的可用性。
示例:自動部署 Linux
對于批量的 Linux 安裝,RedHat 提供有 Kickstart Installations 自動安裝解決方案,不過該方案相對比較繁瑣,前不久推出的 Cobbler 是讓人眼前一亮的好工具(參見 hutuworm 的介紹文章)。我一直懷疑 Cobbler 是中國人命名的項(xiàng)目,因?yàn)?PXE 發(fā)音為”pixie”(皮鞋),而 Cobbler 的中文意思是”補(bǔ)鞋匠”。
OS 安裝完畢之后的軟件安裝、更新是個麻煩事。在一個 Linux 的環(huán)境中,SA 一定不要為軟件相互依賴性浪費(fèi)太多的時間。什么 YUM、APT、YAST 啊,能用就用上。別太迷信自己編譯軟件所能帶來的優(yōu)化收益,實(shí)際上犯錯的幾率更大。達(dá)到某個規(guī)模后,本地建立、維護(hù)一個軟件資料庫(repositories)也是有必要的。
Linux 軟件安裝進(jìn)化之路:
手工預(yù)編譯-->RPM-->APT 等工具
已經(jīng)進(jìn)化到更好的階段了,沒必要還走著老路在原地折騰。
其他參考:Flickr 運(yùn)維曾經(jīng)采用 System Image 來自動化 Linux 相關(guān)的的運(yùn)維工作。或許也可以嘗試一下。
在系統(tǒng)配置管理(別混淆到另一個配置管理上去)方面,其實(shí) cfengine 就挺好用的。更多類似工具參考這個比較列表。
標(biāo)準(zhǔn)化,減少后續(xù)維護(hù)成本是節(jié)省人力資源的一大法門。
自動化的一些風(fēng)險(xiǎn)
必須要承認(rèn)的是,自動化有的時候是容易帶來一些風(fēng)險(xiǎn)的,比如”沖掉”原有配置文件信息,不恰當(dāng)?shù)淖詣踊_本給系統(tǒng)帶來額外負(fù)載等,在運(yùn)維過程中需要不斷總結(jié)經(jīng)驗(yàn)。(又落入俗套)
這方面值得推薦的一本書是《UNIX和Linux自動化管理》,借鑒一下其中的思路和方法。
對了,補(bǔ)充一下前面的《板橋三娘子》的故事發(fā)展,三娘子的面餅如果被客人吃下,則會變成驢…… 同樣,自動化有的時候會把人陷進(jìn)去的,運(yùn)維人不要變成自動化的奴隸。