本傑明·富蘭克林是科學家、學者、政治家和……系統管理員?沒錯,早在 UNIX® 系統出現之前 200 年,富蘭克林已經對保持系統正常工作提出了建議。下面是富蘭克林最著 名的 10 條提示。
如果向任何人問起本傑明·富蘭克林的成就,您很可能會聽到關於他的 電學實驗、參與建立美國聯邦以及發明雙焦距眼鏡的故事(見 圖 1)。但是,富蘭克林還有許多不太為 人熟知但同樣令人影響深刻的成就,他參與了紙幣的發行,在紙幣上采用新穎的防偽技術,建立美國郵政 服務,於 1736 年在費城組建了殖民地的第一個火災保險公司(Union Fire Company)。實際上,早在 Smokey the Bear 出現之前幾個世紀,富蘭克林就提出了著名的防火口號,“預防勝於治療” 。他的建議時至今日仍然是非常有意義的,對於 UNIX 系統管理尤其如此。
圖 1. 本傑明 ·富蘭克林:政治家、發明家和 UNIX 系統管理員(看看他的長頭發吧),由畫家 Jean-Baptiste Greuze 於 1777 年創作
根據富蘭克林的名言(他也說過這樣的妙語, “客人就像魚,三天就發臭”),作者為系統管理員總結出 10 條保持 UNIX 系統正常工作的 提示。
富蘭克林關於安全性的提示
不輕信和謹慎是安全之母。”
保障系統安 全是很困難的。僅僅購買並安裝某種產品,是不可能完全抵御所有威脅的。相反,要想保護系統,必須時 刻保持警惕,不斷創建、尋找、應用、測試和調整許多安全措施。有點兒妄想症是有益的。鑒於安全性的 本質,富蘭克林悲觀地說,“三個人無法保住一個秘密,除非是其中兩個人死了。”
可以通過以下措施更好地保護系統:
訂閱和閱讀安全公告,了解您的操作系統和應用程序軟件面臨的威脅,判斷這些問題是否會危害您的 配置。(例如,最近發現 Apache HTTP Server 的 mod_proxy_ftp 模塊有漏洞,所以許多站點禁用了這 個模塊)。在需要采取行動時,制定一個防御威脅的計劃,比如對源代碼應用補丁並重新編譯,或通過廠 商的包存儲庫更新軟件。
只向每個用戶和應用程序授予最低限度的訪問權。只提供完成任務所需的權限,絕不要超過這個范圍 ,絕不要允許直接訪問 root 登錄。如果應用程序必須作為根用戶運行,應該考慮替代解決方案。
絕不要為了圖方便而降低安全性。
部署 Monit 以檢測入侵。Monit 和相似的工具能夠監視文件和目錄的模式、時間戳、散列值和其他屬 性,並在有人(有意或無意地)修改這些屬性時發出警告。Monit 還監視 Apache 等進程,可以在發生故 障時重新啟動守護進程。圖 2 顯示 Monit 的運行效果。
圖 2. Monit 監視文件、目錄、進程、網絡等
富蘭克林關於一致性的提示
“防止壞習慣產生比克服壞習慣更容易。”
“一次性的” 東西是最讓系統管理員頭疼的 — 獨特的甚至只有細微差異的機器配置或實現某種目的 所需的 “微小” 調整。一次性的東西很容易被遺忘,可能會造成損害,最好一開始就避免它們。
當然,排除所有例外是不現實的。正如另一位智者所說的,“某些事情總會發生!”。在一般情況下 ,保持一致性是最好的策略。但是,如果無法避免一次性的東西,那麼一定要仔細記錄這些特殊情況。
下面是一些建議:
絕不要對正在運行的生產系統應用未經檢驗的修改。應該在一個專用的系統中准備和測試每個修改, 然後再應用於生產環境。
維護自己的軟件存儲庫,使用它作為組建系統的權威源。如果您的系統使用 Red Hat Package Manager (RPM) 包格式,那麼可以使用 Yum(見 參考資料)管理和分發本地軟件包。
如果要多次重復執行一個手工任務,那麼應該在腳本中實現操作。shell 腳本可以簡化操作、避免錯 誤和節省時間。順便說一句,如果要編寫實現修改的腳本,那麼也要同時編寫相反的腳本 — “撤消” 腳本。要測試這兩個腳本以確保健壯性。
使用源代碼控制系統維護系統配置文件。源代碼控制系統允許用戶 “回滾” 到以前的文件版本,從 而恢復以前的狀態或從錯誤中恢復。另外,可以使用數據庫或者 Trac 和 Lighthouse 等系統(見 參考 資料 中的鏈接)在配置的整個生命周期內(從請求實現直至取消)跟蹤對配置的修改。
為每個一次性的配置設置過期時間,在到期時撤消修改(可能有例外情況)。
富蘭克林關於准備的提示
“不做准備,就意味著失敗。”
危機肯定會發生。UNIX 系統及其設備往往可以長時間連續運行。但是,網絡通信可能中斷,硬件可能 出現故障,人會 犯錯誤。墨菲定律(“有可能出錯的東西,就一定會出錯”)是信息技術 (IT) 的首要 法則。
但是,好在危機發生的頻率越來越低了,這使我們有足夠的時間准備和避免危機。管理員的日常工作 必須包括備份、日志輪轉、性能度量(稍後詳細討論)、應用補丁和保護所有系統。
下面是一些比較容易被忽視的日常維護任務:
檢驗備份。當危機發生時,如果發現備份是不完整的或無法使用,那就真的有大麻煩了。應該常常進 行恢復演習。另外,應該制定一個恢復計劃,以便在發生不可抗的災難時恢復業務運營。
要注意即將到期的期限,要及時續約 — 尤其是系統所依賴的 Secure Sockets Layer (SSL) 證書和 其他服務或產品,這方面的失誤可能會干擾甚至中斷訪問或業務運營。應該至少每個月續約一次常規 SSL 證書,新的 Extended Validation (EV) 證書的續約周期可以長一些。當續約期限快要到了時,應該順便 查詢或商談更合適的服務條款。
對於升級失敗 一定要有心理准備,要制定恢復計劃。可能墨菲定律沒有發生,您的 Oracle 升級會順 利地完成……但是不應該指望永遠這麼走運。業務連續性是非常重要的,您不能心存僥幸。
富蘭克林關於節儉的提示
“注意小開支。一個小洞也會弄沉大船。”
現實情況是,IT 預算不斷縮減,而同時對服務的廣度和深度的要求卻不斷增加。必須節省每一塊錢。 富蘭克林對財政的感想也適用於當今的 IT 環境。
下面是幾點建議:
雖然富蘭克林沒有首創 “簡單點兒,傻瓜!” 這句話,但是他不會介意這麼粗魯,反而會欣賞這種 實用主義精神。盡可能每次只做一處修改,不要試圖一蹴而就。例如,如果要升級內核,就不要同時修改 Domain Name System (DNS) 條目。
禁用(甚至刪除)不使用的服務和軟件。例如,對於面向公眾的 Web 服務器,可能不需要運行用於發 送郵件的 Simple Mail Transfer Protocol (SMTP) 或用於打印機管理的 Common UNIX Printing System (CUPS)。每個組件都可能增加管理員的工作量,可能出現問題,會占用處理器周期、磁盤空間和時間;應 該盡可能去除不必要的東西。
優化,優化,再優化。按照 Bruce Schneier 的說法,“優化是一個過程,而不是產品”。與安全性 一樣,沒有 “治療” 糟糕性能的萬靈藥。安裝更多的內存或處理器肯定會有幫助,但是它們僅僅是暫時 掩蓋了效率低下的問題,當這些新資源也被消耗掉之後,性能問題會再次出現。
富蘭克林關於信息的提示
你相信誰?我還是你自己的眼睛?”
實際上,這句話不 是富蘭克林說的,而是馬克斯兄弟中的 Chico Marx(是經典作品 Duck Soup 中 Groucho Marx 的台詞) 。
當然,人們總是希望根據可靠的數據做出決定,而不是根據傳言或猜測。因此,一定要收集系 統指標,據此制定計劃和評估操作。應該連續監視系統的使用量和容量,以此了解什麼是 “正常情 況”。這樣的話,可以很容易地發現異常。基線對於制定計劃也非常有價值,可以根據基線和預計 或觀察到的使用量決定增加多少資源。
下面是一些建議:
有許多自動化系統監視工具可供 選用,其中大多數是開放源碼的。例如 ZABBIX、Nagios 和 Cacti(見 參考資料 中的鏈接)。應該把這 種系統與電子郵件和傳呼機連接起來,在發生緊急問題時及時通知相關人員。
如果系統支持的話 ,應該啟用 IBM® SMART HDD 警報等硬件監視機制。許多硬件廠商也提供用來監視硬件的軟件代理; 應該安裝並運行這些守護進程。同樣,應該把警報傳播給相關人員,以便他們及時做出反應。
應 該觀察前 24 小時、前一周和前一個月的使用量模式。要特別注意平均負載、磁盤空間消耗量和內存使用 量;然後,總結出變化趨勢。根據這些分析,提前添加所需的硬件。
檢查系統日志中的重要消息 ,比如失敗的登錄嘗試和出現問題的守護進程。
富蘭克林關於教育的提示
花錢求知識,無 人能奪去。”
很少有哪個行業的變化速度能有計算機行業這麼快,IT 業的變化甚至更快。 任何系統管理員的最佳投資方向都是培訓。
參加培訓課程和獲取認證對於管理員的職業前途和應 對大型項目非常重要。還應該通過閱讀雜志增長見聞,逐漸形成自己的觀點和傾向。應該經常與同行交流 實踐經驗。
最重要的是 “RTFM”。也就是,閱讀手冊、手冊頁、發布說明、README 和軟件附帶的其他文檔。
富蘭克林關於開放源碼的提示
“我們受益於別人的發明,也應該樂於用自己的發明幫助別人;我們應該慷慨無私。”
富蘭克林是一位非常多產的發明家,但是他不願意申請專利。實際上,當年賓夕法尼亞州州長要給富 蘭克林的新型火爐授予專利權,這樣富蘭克林就可以在幾年內壟斷這種產品的生產,但是他用上面這段話 表示拒絕。(在 1790 年之前,各個州有自己的專利權法規,它們各自頒發專利。於 1790 年通過的聯邦 專利法把專利權劃歸聯邦管轄的范圍,由聯邦憲法的第 1 章第 8 節第 8 款加以規定)。
毫無疑問,富蘭克林會贊成開放源碼,很可能會激烈地反對軟件專利和版權法規。
富蘭克林關於協作的提示
“假使我們不團結在一起,我們將分開被絞死。”
IT 確實有自己的職責范圍。但是,IT 並不存在於真空中。它的目標、優先次序、開支和服務(包括 日常任務)必須與企業的目標保持一致。
無論 UNIX 計算機調整得多麼好,它只對於一組條件是最優的;如果條件發生了變化,UNIX 管理員必 須相應地進行調整。
富蘭克林關於廠商的提示
“通過體驗和觀察做出結論的關鍵在於評估可能性,也就是估計可能性是否足夠高,足以證明結論是 客觀的。這種評估非常復雜,非常困難。這通常需要大大超越常人的智力水平。牛皮大王、巫士和煉金術 士(以及濫用公眾信任的所有人)的成功都是因為一般人無法正確評估可能性。”
借用一句老話:要有自己的標尺。
就像是煉金術一樣,為您的應用程序找到最佳的硬件和軟件組合是一種神秘的藝術,需要不斷實踐才 能取得最有效的結果。在考慮任何廠商的產品和技術之前,應該確定自己的需求和重要的性能基准。應該 向多家廠商咨詢;對於比較中意的兩三家廠商,在購買之前先向它們要求借用您想要的設備。運行您的基 准測試,甚至可以邀請廠商參與針對您的需求進行系統調優。
富蘭克林關於必然性的提示
除了死亡和稅收之外,這個世界上沒有什麼是必然的。 ”
富蘭克林說的不完全正確。這樣說可能更准確,“除了死亡、稅收和系統崩潰之外 ,這個世界上沒有什麼是必然的。”
無論系統管理員多麼小心謹慎、多麼有天才,都不可能 防止硬件故障,而且硬件故障常常在最不合時宜的時候發生。因此,一定要做好充分的准備並儲備備用硬 件。在購買硬件時,要考慮它的平均故障間隔 (MTBF) 並相應地儲備備用硬件。下面是幾條經驗規則:
至少為投入服務的每 10 到 15 個組件購買一個備用組件。同時購買備用設備和生產設備通常是 最經濟的。
在前一條規則的基礎上,對於部署的每種硬盤型號,至少購買一個備用硬盤。例如, 如果購買用於生產的三個 Super Spindle 100 和兩個 Disc-o-Tech LX,那麼應該多購買一個 Super Spindle 100 和一個 Disc-o-Tech LX。如果需要,可以立即換上備用硬件。
如果您的硬件逐漸過 時了(誰不是呢?),那麼考慮購買兩三個替換硬件,以便在部件損壞時替換。硬件越老,就越難找到部 件。在市場上還有供應時,盡可能提前做好准備。
采用 Puppet 等功能豐富的配置管理和部署系 統(見 參考資料 中的鏈接),以便快速地用新主機替換出故障的機器,盡可能避免操作人員手工操作。
對於儲備備用硬件,沒有惟一正確的戰略,您采用的方法必須符合體系結構的特點。如果服務器 部署在計算機集群中,那麼最前端的節點是惟一的關鍵機器;其他機器可以隨意啟動和停止,崩潰了也不 要緊。如果您的系統相互連接,可以自動地故障轉移到熱備用機器上,那麼儲備可以少一些。
如 果一台單獨的專用機器提供某種關鍵服務,比如 DNS 或集中的身份驗證,它就是致命的弱點,必須為它 提供充足的備用硬件。另外,應該提前計劃在發生緊急事件時如何把關鍵服務遷移到其他系統上。
結束語
制憲元勳和喜劇演員本傑明·富蘭克林曾經說,“夾在兩個律師之間 的老百姓就像是夾在兩只貓之間的魚。”
除了本傑明·富蘭克林和 Chico Marx 之外 ,我還要感謝 Ted Boggs、Mark Bouman、Oleg Brodkin、Dana French、Tom Georgoulias、Steve Holdoway、Altan Khendup、Jeff Kimble、Lubos Kolouch、John Mascio、Philip Mather、Nathan McCourtney、Ray Robert、Matthew Sacks 和 Jesse Sipprell,本文引用了他們的話。
無論 UNIX 計算機調整得多麼好,它只對於一組條件是最優的;如果條件發生了變化,UNIX 管理員必須相應地 進行調整。” 這句話直接引自 Altan Khendup。
絕不要為了圖方便而降低安全性。” 這句話直接引自 Dana French — 也是 IBM developerWorks® 的撰稿人。
希望富蘭克 林和其他人的建議對您有幫助。誰知道呢?富蘭克林的話可能會幫助您獲得成功。