本杰明·富兰克林是科学家、学者、政治家和……系统管理员?没错,早在 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® 的撰稿人。
希望富兰克林和其他人的建议对您有帮助。谁知道呢?富兰克林的话可能会帮助您获得成功。 (责任编辑:A6)