系統管理員的 18 個基本準則
靠規則而活
不是僅僅只要知道怎麼建立維護伺服器和理解系統命令是怎麼工作的就可以讓你成為一個好的系統管理員——甚至也也不是知道當系統宕掉時怎麼去修復,怎麼去監控系能,怎麼去管理備份或者怎麼可以寫出漂亮的指令碼。而是除此之外還要為自己制定一套能讓系統良好執行以及讓你使用者高興的規則。
可能其中很多你已經聽過無數次,也可能有些是你遇到問題時吸取的經驗教訓。這些規則在過去幾十年的系統管理中都已經證明了它們的價值並且能夠幫助我們在腦子發熱時冷靜下來。
禁止做任何不能回滾的操作
除了一些最簡單的修改,你應該備有回滾方案。當你進行改動時想好了回滾方案嗎?有很多辦法可以在修改的途徑中留下技術上的“麵包屑”,這能夠讓你隨時回到你開始的原點。備份你需要編輯的檔案,可能是你記不住的一些複雜的配置檔案。記錄下你遇到的問題。在進行生產環境之前先在測試環境下測試,在你繼續之前確保所有的修改都是合理的。
提前計劃好需要改動的地方,最好能夠採取同行評審的方式。另外一雙眼睛可能可以看到你沒有考慮到的問題。
避免在週五做任何改動
不要在你將要不在的幾天之前做任何修改。確保在不需要干預的情況下這些修改也可以在系統上正常執行。
弄清楚根本原因
去挖掘你所碰到問題的根本原因。當懷疑的時候,用“五個為什麼”原則。我的伺服器宕了,為什麼?是因為記憶體不夠。為什麼不夠?因為其中一個程序“瘋了”。為什麼“瘋了”?因為它進入到迴圈中。為什麼進入?因為配置檔案中有錯誤。為什麼有錯誤?因為我在週五晚上離開之前修改了檔案,但是忘了測試確保所有一切都可以正常工作。
實踐災備方案
實踐災備方案在必要的時候能夠順手使用。如果你不實踐,有兩種可能會發生。第一,你沒有信心你的方案是否有用,第二,你可能會不確定你所要採取的措施。比如說,你需要遷移資料庫到一個遠端站點。你是否知道你要執行的命令?準備好資料備份了嗎?還是需要去建立備份?你是否知道遷移檔案需要多久?你是否會準備好遠端啟動資料庫?你是否有一套測試來檢驗其能夠很好地執行?
不要去依賴沒有完整測試過的指令碼
這很容易犯錯的。即使你已經寫了幾十年的指令碼也要去測試,特別是可能別人在某天會執行這些指令碼。帶引數測試和不帶引數測試。模擬其他人可能會犯的錯誤。總之,必須要測試指令碼。
三次以上的重複和複雜的操作,必須自動化
在別名、函式和指令碼中使用你最熟練的命令並且賦予它們有意義的命名。將那些複雜的過程寫進到指令碼中,你就無需每次都要去想那些必要的步驟和複雜的命令。這樣你會在費時費力的工作中節省很多的時間和精力,並且在需要其他人為你工作時,讓你有更多的輕鬆時間。
為你的工作建立文件
用文件記錄下你的日常工作。你做的事裡面有哪些對別人來說不好理解?可能你要跑個指令碼在日誌檔案中查詢磁碟吃緊或者資料中心溼度太高的警告。
往指令碼中添加註釋。你可能會覺得你用的那些命令很顯而易見,但是當你隔了一兩年沒用再回去用的時候就不會那麼顯而易見了。不要為了簡潔而犧牲了可讀性。別人可能會要讀你的程式碼。完整地寫下你所做的一切,別人能夠在你決定跳槽時候很好地接手你的工作。
重視你犯的錯誤
用你自己的方式去理解錯誤是避免再犯的唯一方法。重視你所做錯的並且注意那些多次犯錯的型別
可能是你忘了修改預設密碼從而密碼過期導致啟動的服務宕了;可能你沒有去驗證備份是否可用;也可能是當其他人離開公司時你忘了封鎖他們的賬號。不管什麼問題,需要注意記錄你的疏忽並且找到一種可靠的方式來提醒自己容易忘記的事。
強迫自己輕微妄想症
經常問自己問題,比如“別人會不會誤用這個呢?”,“別人會不會弄壞這個呢?”,以及“這個服務會怎麼收到攻擊?”給所有的指令碼設定許可權使除管理員以外其他人都無權檢視。想一些防守措施能夠讓你減少很多痛苦。而且,對管理伺服器來說,妄想症是優點。
未雨綢繆
並不是每一個問題都會找上你的門。利用空餘時間去“招惹”問題並且確保系統還是能夠完好執行。想想系統會出問題的各種可能性並且檢查這些問題是否已經存在。
儘可能自動化去檢查問題,但是要確保問題在你的掌控之中,你要注意本應該看到的報警是否如期到來。收到你最關鍵的伺服器宕機警報不能讓你得到任何獎勵。
特別注意安全性
安全方面的投入是要與你所保護的資料成比例的。要知道你在保護什麼,知道你所保護資料的“主人”。運用一些最佳的實踐方案,比如最小特權、定期補丁、監控關鍵服務以及漏洞檢測。僅僅只執行你所需要的服務。時刻警惕任何強行闖入或者系統受損的跡象。準備好上報渠道能夠讓你知道什麼時候以及向誰彙報這些系統受損現象。
不要忽視日誌檔案
例行檢查日誌檔案能夠在正常的伺服器和服務受威脅之前發出警告。檢查錯誤和警告。使用一個監控日誌的工具或者自己寫指令碼。沒有人有時間去看你日誌中所有的資訊。
備份一切
制定一個好的備份策略即使伺服器已經做了同步。一個同步伺服器上的錯誤同樣也是錯誤。測試好備份系統。確保在你要使用它們之前是沒有問題的。
在你能夠承擔的情況下多僱傭一位員工。儘可能零容忍單點故障,即使是你自己。
像自己的時間一樣考慮其他人的時間
系統管理員有點像一個自大的小男孩。我們在自己的神奇領域是奇才。但是儘管如此,我們還是要準時參加會議並且別人向你尋求幫助的時候及時回覆別人,即使只是說一句我正在解決他們的問題。禮貌地對待顧客,即使他們找不到怎麼執行命令列。他們可能在他們自己領域是個專家級魔術師,如果他們不是的,那就正好說明我們是如此的重要。
保持時刻通知使用者
確保使用者能夠預料將會發生什麼,特別是計劃會有重大更新時。這些可以讓他們對你抱有信心,並且信任他們所依賴的服務。交流、透明化、使用票務系統還有就是要留意多長時間能夠解決問題。
避免太過自我,讓別人喜歡你
系統管理員沒必要讓人難以接近和自大。實際我這幾年與我合作過真正厲害的系統管理員從沒顯示出任何的優越感。他們沒必要這樣。
不要停止學習新技能
就像逆水行舟,不進則退。經常找些新東西來學習。你將準備好承擔新的責任甚至可能在裁員中倖存。如果你沒有把握去學什麼,那就去看心儀工作的職位介紹。怎麼讓自己符合標準?那些技術是高需求的嗎?你是否可以每天騰出一點點時間來學習新東西呢?
尋求平衡生活
找一些自己喜歡的事來平衡生活甚至可以找點活動可以獎勵你些東西,這些東西可以跟做一名天才般的並且極具洞察力的系統管理員完全無關。不要把自己的價值栓在一匹馬上。即使是你非常熱愛工作,也不要讓它成為唯一使你感到愉快和重要的事。你甚至可以被扔到車底下,但是也不能讓車胎印記印在你的生活中。工作不是全部。不要被辦公室政治束縛。去看一場真實的比賽並且努力成為一個你所欽佩的那種人。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!