题 每个程序员都应该知道哪些系统管理员的事情?


作为程序员,我们倾向于认为系统管理员是理所当然的。我几次没有一个好的系统管理员真的让我很欣赏你们做的事情。当我们冒险进入没有系统管理员的环境时,你能为我们提供什么样的智慧?


96






答案:


我先从:

  1. 总是 有一种备用系统。如果它有历史,那就更好了。
  2. 考虑单点故障以及如果失败则如何处理它们。
  3. 根据所涉及的计算机数量,查看某些方式在计算机上制作和创建标准图像将使每个人的生活更轻松 - 没有“它适用于我的”,因为他们有这样的程序通常不安装。
  4. 记录一切,只因为你  忘记你是如何设置的。
  5. 及时了解安全更新。

70



记录所有步骤是我见过的好系统管理员所做的事情,我已经开始自己做了。确实很有帮助。 - Nathan DeWitt
考虑自我记录系统。例如,当一个注释良好的区域文件是规范的信息源时,为什么要在文本文件或wiki中保留主机名列表。 - Dave Cheney
Dave,所有人都可以访问评论良好的Zone文件吗?如果我是一个新人,是不是更容易被告知“去所有答案去这个维基”,而不是“所有内容都记录在案。在DNS设置中记录了DNS。谁在whozit中记录了whozit配置文件。数据库记录在数据库配置文件中。“这对我来说似乎非常不友好。 - Nathan DeWitt
Nathan,Dave:诀窍当然是使用脚本从规范来源更新wiki。这对我有用,我真的很抱歉我现在不能在我工作的地方使用它。 - Anders Eurenius
我想补充一点:建立一个测试系统。您需要一个可以选择故障的环境。我有服务器运行VirtualBox,但是当服务器不可用时我使用了我的个人工作站 - Mark Porter


<在此插入大帖子免责声明>

之前曾说过其中一些,但值得重复。

文档:

  • 记录一切。如果您没有,请安装一个雷达维基,但请确保备份。从收集事实开始,总有一天会形成一幅大图。

  • 为每个逻辑块创建图表并保持更新。我无法计算准确的网络地图或群集图表保存的次数。

  • 保留每个系统的构建日志,即使它只是复制和粘贴如何构建它的命令。

  • 在构建系统时,安装和配置应用程序,测试它是否有效并执行基准测试。现在,擦除磁盘。认真。 'dd'离磁盘前面的第一兆字节或以其他方式使该框无法启动。时间在流逝:证明你的文档可以从头开始重建(或者更好的是,证明你的同事只需要你的文档)。这将构成灾难恢复计划的一半。

  • 现在你有灾难恢复计划的前半部分,记录其余部分;如何恢复应用程序的状态(从磁带恢复文件,从转储重新加载数据库),供应商/支持详细信息,网络要求,获取替换硬件的方式和位置 - 您可以想到的任何内容都有助于恢复系统。

自动化:

  • 尽可能自动化。如果你必须做三次,确保第二次用于开发自动化,所以第三种是完全自动化的。如果您无法自动化,请记录下来。那里有自动化套件 - 看看你是否可以让它们为你工作。

监控:

  • 应用仪器是纯金。能够观察通过系统的事务使得调试和故障排除变得更加容易。

  • 创建端到端测试,不仅证明应用程序是活着的,而且确实能够实现它应有的功能。如果可以将其插入监控系统以进行警报,则可以使用积分。这是双重职责;除了证明应用程序有效之外,它还使系统升级变得更加容易(监控系统报告绿色,升级工作,回家时间)。

  • 对所有事情进行基准测试,监控和收集指标。基准测试告诉你什么时候会有什么东西会让魔法冒出来。监控会告诉您何时有。通过管理,指标和统计数据可以更容易地获得新的工具包(带有新鲜的魔法烟雾)。

  • 如果您没有监控系统,请执行一个。如果您确实将上述端到端测试插入其中,则可获得奖励积分。

安全:

  • “chmod 777”(即授予所有访问/权限)永远不是解决方案。

  • 订阅“最低位”原则;如果它没有安装,复制或以其他方式存在于磁盘上,它就不会受到损害。 “厨房水槽”操作系统和软件安装可能会使构建阶段的生活变得更轻松,但您最终会在赛道上付费。

  • 了解服务器上的每个开放端口的用途。经常审核它们以确保不会出现新的。

  • 不要尝试清理受感染的服务器;它需要从头开始重建。使用新下载的介质重建到备用服务器,仅从备份中恢复数据(因为二进制文件可能被泄露)或将受感染的主机克隆到隔离的某个位置进行分析,以便您可以在同一个工具包上重建。这周围有一个完整的法律噩梦,如果你需要追求法律途径,那么在保存方面就更加错误。 (注:IANAL)。

硬件:

  • 永远不要假设任何东西都会按照它在盒子上说的做。证明它可以满足您的需求,万一它没有。你会发现自己比你期望的更频繁地说“它几乎起作用”。

  • 不要吝啬远程硬件管理。串行控制台和熄灯管理应被视为强制性的。当您没有选择时,远程控制电源板的加分点。

(旁白:有两种方法可以在凌晨3点解决问题,一个是温暖的,一个穿着睡衣的VPN在笔记本电脑上工作,另一个是厚夹克和驱动器到数据中心/办公室。我知道哪一个我喜欢。)

项目管理:

  • 从项目生命周期的第一天开始,让将要维护系统的人员参与其中。套件和大脑时间的交付时间可以并且会令人惊讶,毫无疑问,他们将(应该)具有将成为项目依赖性的标准或要求。

  • 文档是项目的一部分。在项目关闭并且系统已经转移到维护之后,您将永远不会有时间编写整个项目,因此请确保它在开始时包含在计划中。

  • 从第一天开始将计划的过时实施到项目中,并在项目文档中指定的关闭日期前六个月开始刷新周期。

服务器在适合生产时具有定义的生命周期。这一生命周期的结束通常定义为供应商开始每年维护的费用高于刷新套件的费用,或者大约三年,以较短者为准。在此之后,它们非常适合开发/测试环境,但您不应该依赖它们来运行业务。在2年半的时间内重新审视环境,您可以有足够的时间来完成必要的管理和资金投入,以便订购新套件并在将旧套件发送给天空中的大型供应商之前实现平稳迁移。

发展:

  • 确保您的开发和分段系统类似于生产。虚拟机或其他虚拟化技术(区域,LDOM,虚拟服务器)可以轻松实现真实的每个感知但性能更高的生产克隆。

备份

  • 您未备份的数据是您不想要的数据。这是一个不可改变的法律。确保你的现实符合这一点。

  • 备份比他们看起来更难;一些文件将被打开或锁定,而其他文件需要停顿以便有任何恢复的希望,所有这些问题都需要解决。一些备份包具有代理或其他方法来处理打开/锁定文件,而其他包则没有。将数据库转储到磁盘并将这些数据作为“静止”的一种形式进行支持,但这不是唯一的方法。

  • 除非经过测试,否则备份毫无价值。每隔几个月,从档案中取出一个随机磁带,确保它实际上有数据,并且数据是一致的。

最重要的是......

选择你的失败模式,或者Murphy将......并且墨菲不会按照你的日程安排工作。

设计失败,记录每个系统的设计弱点,触发它们的原因以及如何恢复。当出现问题时,它会发挥重要作用。


44



+1这就像有人看着我的脑海 - 它很漂亮; p - Oskar Duveborn
“基准测试,监控和收集所有事情的指标。基准测试告诉你什么时候会发现什么东西会让魔法烟雾消失。监控会告诉你它什么时候出现。衡量标准和统计数据使得更容易获得新的工具包(带有新鲜的魔力)烟雾)通过管理。“  纯金 - T.J. Crowder


不要轻易放弃。我知道很多程序员认为只是因为他们可以在那里设置IIS或Apache,他们可以运行一个Web场。了解工作涉及的内容并进行研究和规划,不要只考虑系统管理员工作是您在10分钟内轻松完成部署应用程序的工作。


43



+1为此。这不是因为我们做到了 看 它确实很容易。 - Gert M
作为管理和编程工作的通才,我完全理解你的困境。 +1 - Avery Payne
当然,它是另一种方式,我发现了一些系统管理员类型,他们真的不理解脚本和小型实用程序之间的区别,我们都可以把它们和“真正的”编程理解。 - Rob Moir
+1 Robert:或者系统管理员说“这是一个简单的if语句”来解决设计糟糕的网络架构。相互尊重和理解是关键。 - Steven Evers


  • 意识到,无论好坏,许多服务器和/或网络设备往往非常像第二个家庭的孩子。 这些是他们的孩子。  他们倾向于他们,在他们生病时帮助他们,并警惕地监视他们的麻烦。这个 不能 这样,但多年后, 它经常是。当您向他们传达您对设备运行不正常或期望的担忧时,请记住这一点。如果你得到一个你不理解的回复,试着通过这个世界观来过滤它。
  • 保持良好的工作条件。听起来很狡猾,但它的价值在于黄金。有一天,你需要一些特别的好感。有一天,系统管理员会很乐意为你做一些让自己更轻松的生活,只有这一次。
  • 这种工作关系是双向的。如果系统管理员非常忙,你可以通过编写一个小脚本或程序让生活变得更轻松,那就去做吧!他们会比你知道的更欣赏它。
  • 要非常清楚。 “这很糟糕”并不像“断断续续的网络连接有点烦人,你有什么机会可以看看它”一样清晰吗?
  • 如果您认为您的应用会扩展,请先咨询管理员 假设 它会。他们可能“看到”你没有看到的东西,或者知道你要部署的设备的性能限制。
  • 如果您的应用需要调整,但似乎不是代码问题,请很好地询问服务器的运行情况。系统管理员倾向于对他们的机器进行爱护,并且当他们“生病”或“行为不端”时不高兴。要求很好的将周围的机器转动(或修理/更换)。
  • (如其他地方所述)记录您使用的设置,以及 为什么 你用它们。只是“设置复选框X”或“取消注释配置文件行Y”没有帮助。您可以设置选项,在您知道的所有内容中,在下次重新启动时删除所有数据。
  • 如果您没有时间在纸上记录设置,请尽可能在系统中记录。对于配置文件,这几乎应该是标准做法 - 每个设置更改都应该加上日期戳,带有首字母,该设置的预期效果以及原因 为什么 它被改变了(参见前面的要点)。这个小习惯在关键时刻不止一次拯救了我的培根。 “为什么我们这样做?” “因为我们强制执行政策X,而设置Y为我们提供了政策X所需的行为”。
  • 啤酒。或者可乐。甚至是水。饮料总是受欢迎。作为一个系统管理员是口渴的工作。

27



对于配置文件文档/更改问题,我建议将所有配置文件放在版本控制系统中。这对于程序员来说应该是非常容易的,因为他们希望已经将这样的系统用于他们的源代码。如果他们在提交更改时也添加评论,那么很容易回到历史记录中,看看在何时以及为什么会发生变化。 - Anders Sandvig
为此+1,因为它在变更管理上“关闭循环”。很棒的建议。 - Avery Payne
提供明确的错误报告的绝佳建议。没有什么比被告知存在问题更让我感到沮丧,并且知道它可能会影响很多人,我不得不从一个不感兴趣的程序员那里挑逗细节 - Dave Cheney


安全不是事后的想法。虽然被黑客攻击的应用程序可能会使程序员看起来无能,但它(至少)是一个丢失的周末,用于验证,清理和/或从系统管理员的备份恢复。

就此而言,不要将备份视为版本控制。它们用于灾难恢复,并不是真的旨在恢复您的代码,因为您忘记了您更改的内容。

并且不要盲目地指责Windows更新代码被破坏了。我不关心它是否有效,告诉我为什么它现在不起作用 - 然后我们可以看出它是谁的错。


23





如何调试网络问题并观察使用sysadmin工具运行的程序。作为一名开始从事系统管理的程序员,我很惊讶许多程序员在网络“停止”后变得多么无能为力。

  • Wireshark的,以逐包方式观看您的代码以黑盒方式运行
  • 直接连接到网络服务的工具:
    • Telnet,netcat或socat 用于TCP或UDP上的普通连接
    • OpenSSL的 与加密相同的事情(提示:试试 openssl s_client -connect target-host:port 有时),用于手动连接到网络服务
  • 挖(在BIND 9包中) 用于调试名称解析
  • 能够根据失败连接的时序和其他特征来判断网络堆栈的哪个部分出现故障
  • 或者 HTTPFox和/或Firebug

17



+1。任何编写依赖于可靠网络性能的应用程序的开发人员都应该在已经开始编码之前阅读已故伟大的W. Richard Stevens的“TCP / IP Illustrated v1”。 - Murali Suriar
感谢所有赞成的人。多年来,当基础网络失败时,程序员陷入无助的停顿状态,这让我感到很失望。而现在,几乎所有的编程都是网络编程。 - jhs


知道如何解决问题。

推卸责任非常容易(例如,您的网络正在与数据库进行通信)。这可能是网络的错误,但您应该有应用程序日志,其中包含使用Google或SO的错误,可能会在应用程序的配置中显示问题。

每个人都喜欢责怪硬件,操作系统或网络,所以如果你进行更多的尽职调查,你就会让系统管理员成为一个快乐的人。因为,如果没有别的,你可能能够指出他们可能出错的特定方向(而不是说“你的网络糟透了”或同样有用的东西)。


14



绝对。我无法开始计算我在错误的地方寻找问题的时间,因为有人指着我 错误 方向 - Gert M


记录你能做的一切。不能告诉你最后一次系统管理员认为不会为“工作保障”记录某些东西或者只是想要进入并离开的人是多么可爱。就像程序员应该留下好评,系统管理员应该记录。拓扑图也很好。


8





计划B.

在设计和开发解决方案时,始终要考虑灾难恢复计划。识别可能导致中断的单点故障。


7





文档:不需要疯狂,但是应用程序如何工作,一个图表显示了这些位是否适合以及在出现问题时测试每个组件的方法。样本数据和输出很好。

要求:它依赖哪些模块?版本? OS?

监控:理想情况下,开发人员会在应用程序中包含监控信息和测试。

说到包装,PACKAGING!没有比“部署”更糟糕的了,这意味着从VCS中检出文件的新版本并将其复制到一堆服务器。程序员常常不喜欢部署软件的复杂性:版本化的打包软件成为大多数操作系统的支柱。

如果开发人员带着一个RPM来找我,这个RPM首次安装了简洁,全面的文档和一些Nagios测试,他们将成为我最好的朋友。


6