每个程序员都应该知道哪些sysadmin内容?


96

作为程序员,我们倾向于将sysadmins视为理所当然。几次我都没有好的系统管理员,确实让我很欣赏你们所做的事情。当我们进入没有系统管理员的环境时,您能为我们提供什么智慧的话?

Answers:


70

我将从以下内容开始:

  1. 始终拥有某种备份系统。如果有历史,那就更好了。
  2. 考虑单点故障,以及在单点故障时如何处理。
  3. 根据涉及的计算机数量,研究在计算机上创建和创建标准映像的某种方式将使每个人的生活更加轻松-不会“在我的系统上工作”,因为他们通常没有安装此类程序。
  4. 记录所有内容(如果仅仅是因为您忘记如何设置)。
  5. 及时了解安全更新。

11
记录所有步骤是我见过的优秀sysadmin管理员要做的事情,而我自己也开始这样做。确实非常有帮助。
内森·德威特2009年

2
考虑自我记录系统。例如,当注释良好的区域文件是规范信息源时,为什么要在文本文件或Wiki中的某个主机名列表中保留主机名列表。
戴夫·切尼

3
戴夫(Dave),所有人都可以访问该注释良好的区域文件吗?如果我是一个新手,那么被告知“所有答案都请访问此Wiki”,而不是“所有内容在各处都有记录。DNS记录在DNS设置中。whozit记录在whozit中”配置文件。数据库记录在数据库配置文件中。” 这对我来说似乎非常不友好。
内森·德威特2009年

5
Nathan,Dave:诀窍当然是使用脚本从规范来源更新Wiki。这对我来说是个奇迹,很抱歉我不能在现在的工作场所使用它。
2009年

6
我要补充一点:构建测试系统。您需要一个可以选择失败的环境。我有服务器上运行的VirtualBox对于这一点,但我用我个人的工作站,当服务器不可用
马克·波特

44

<在此处插入大文章免责声明>

其中一些已经说过了,但是值得重复。

说明文件:

  • 记录一切。如果您没有,请安装一个未公开的Wiki,但请确保备份它。从收集事实开始,有一天,将形成一幅大图。

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

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

  • 在构建系统时,请安装和配置应用程序,对其进行测试并执行基准测试。现在,擦拭磁盘。说真的 从磁盘正面的第一个兆字节“ dd”开始,否则会使该盒子无法启动。时间在流逝:证明您的文档可以从头开始重建(或者更好的是,证明您的同事可以仅凭文档就可以重建)。这将构成灾难恢复计划的一半。

  • 现在,您有了灾难恢复计划的前一半,将其余部分记录在案;如何恢复应用程序的状态(从磁带还原文件,从转储重新加载数据库),供应商/支持详细信息,网络要求,如何以及在何处获得替换硬件-您可以想到的任何方法都将帮助您恢复系统。

自动化:

  • 尽可能地自动化。如果您必须做三遍,请确保第二遍花在开发自动化上,因此第三遍是全自动的。如果无法自动化,请记录下来。那里有自动化套件-看看是否可以使它们适合您。

监控:

  • 应用程序工具是纯金。能够监视通过系统的事务使调试和故障排除变得非常容易。

  • 创建端到端测试,不仅可以证明应用程序还处于运行状态,而且可以真正实现其应有的功能。如果可以将其插入监视系统以进行警报,则说明您的要点。这具有双重职责;除了证明该应用程序可以正常工作之外,它还使系统升级变得更加容易(监控系统报告为绿色,升级工作正常,下班时间)。

  • 基准,监控和收集所有理智的指标。基准告诉您什么时候可以期待某些东西会散发出魔力。监视会告诉您什么时候有。度量标准和统计数据使通过管理更容易获得新套件(带有新鲜的魔术烟雾)。

  • 如果您没有监视系统,请实施一个。如果您确实将上述端到端测试纳入其中,则可获得加分。

安全:

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

  • 遵循“最少”原则;如果未在磁盘上安装,复制或以其他方式驻留它,则不会受到损害。在安装阶段安装“厨房水槽”操作系统和软件可能会使工作变得更轻松,但最终还是要为此付出代价。

  • 知道服务器上每个开放端口的用途。经常对其进行审核,以确保没有新的出现。

  • 不要尝试清理受损的服务器。它需要从头开始重建。使用最新下载的介质重建到备用服务器,仅从备份中还原数据(因为二进制文件可能会遭到破坏),或者将受到破坏的主机克隆到隔离的位置进行分析,以便您可以在同一套件上进行重建。这是整个法律的噩梦,因此在保存方面犯错,以防万一您需要寻求法律途径。(注意:IANAL)。

硬件:

  • 永远不要假设任何事情都会像盒子上所说的那样做。证明它可以满足您的需求,以防万一。您会发现自己说“几乎有效”的频率比预期的要多。

  • 不要跳过远程硬件管理。串行控制台和灯光管理应视为强制性的。当您无法选择时,远程控制配电盘的奖励积分。

(另外:凌晨3点有两种解决问题的方法,一种涉及保暖,通过睡衣中的VPN在笔记本电脑上工作,另一种涉及厚外套和到数据中心/办公室的驱动器。我知道哪一个喜欢)。

项目管理:

  • 从项目生命周期的第一天起就需要维护系统的人员参与。试剂盒的交货时间和大脑时间可以而且将会令人惊讶,毫无疑问,它们(应该吗?)将具有成为项目依赖项的标准或要求。

  • 文档是项目的一部分。在项目关闭并且系统已移至维护阶段之后,您将永远没有时间来编写整个内容,因此请确保在开始时就将其包括在计划中。

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

适用于生产的服务器具有定义的生存期。使用寿命的终止通常被定义为每当供应商开始收取的年度维护费用超过更新套件所需的费用时,或三年左右,以较短者为准。在这段时间之后,它们非常适合开发/测试环境,但是您不应该依赖它们来经营业务。在2 1/2年的时间里重新审视环境,可以为您提供足够的时间来跳过必要的管理和财务工作,以订购新套件,并在将旧套件发送到空中大供应商之前实现平稳迁移。

发展:

  • 确保您的开发和登台系统与生产相似。虚拟机或其他虚拟化技术(区域,LDOM,虚拟服务器)使在现实中千篇一律但有性能的生产克隆变得容易。

后备

  • 您不备份的数据就是您不需要的数据。这是一成不变的法律。确保您的现实与此相符。

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

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

最重要的是...

选择您的故障模式,否则墨菲会...而墨菲无法按照您的计划工作。

针对故障进行设计,记录每个系统的设计弱点,触发它们的原因以及如何恢复。出现问题时,一切都会有所不同。


1
+1就像是有人看着我的脑海-这很美; p
Oskar Duveborn

3
“对所有明智的操作进行基准测试,监视和收集度量标准。基准测试告诉您什么时候可以期望某些东西会散发出魔幻的烟雾。监视告诉您什么时候可以散发出魔幻的烟雾。度量标准和统计信息使获取新工具包(使用新鲜的魔术更容易)吸烟)。” 纯金
TJ Crowder

43

不要以为它很容易。我认识许多程序员,他们认为这是因为他们可以在开发箱上安装IIS或Apache,从而可以运行Web场。了解工作涉及的内容并进行研究和计划,不要仅仅认为sysadmin工作是您在10分钟之内即可完成的部署应用程序的简单操作。


7
为此+1。这并不是因为我们使事情看起来简单而已。
Gert M

作为兼职管理和编程工作的通才,我完全理解您的困境。+1
艾利·佩恩

4
当然,这是另一回事,我发现一些sysadmin类型的人真的不理解脚本和小型实用程序之间的区别,我们都可以敲打它们并进行“真实的”编程。
罗布·摩尔

2
+1罗伯特:或者系统管理员说“这是一个简单的if语句”,以解决设计不良的网络体系结构。相互尊重和理解是关键。
史蒂文·埃弗斯

27
  • 意识到无论好坏,他们倾向于使用的许多服务器和/或网络设备都非常像第二个家庭的孩子。 这些是他们的孩子。 他们照顾他们,生病时帮助他们,并警惕地监视他们的麻烦。这不应该是这种方式,但是经过很多年,它通常是这样。当您与他们交流您对设备运行不正常或期望的问题时,请记住这一点。而且,如果收到您不理解的答复,请尝试通过这种世界观对其进行过滤。
  • 保持良好的工作条件。听起来俗气,但值得在黄金中重压。有一天,您需要一些特别的帮助。有一天,这一次,系统管理员将很乐意竭尽全力,让您的生活更加轻松。
  • 这种工作关系是双向的。如果系统管理员很忙,您可以编写一个小的脚本或程序来使生活更轻松一些,那就去做吧!他们将不胜感激。
  • 要非常清楚。“糟透了”并不像“具有间歇性的网络连接有点烦人,您有机会看到它吗?”那样不清楚。
  • 如果您认为自己的应用可以扩展,请先询问管理员,然后再假设会扩展。他们可能会“看到”您不了解的东西,或者对您将要部署的设备的性能极限有所了解。
  • 如果您的应用程序需要调优,但似乎不是代码问题,请很好地询问服务器的性能。系统管理员会非常谨慎地照看他们的机器,当他们“生病”或“行为不当”时,他们会感到不满意。好好问一下会把一台生病的机器转过来(或修理/更换它)。
  • (如其他地方提到)文件使用的设置,以及为什么使用它们。仅具有“设置复选框X”或“取消注释配置文件行Y”无济于事。您可能会设置一个选项,该选项将在您下次重启时清除所有数据。
  • 如果您没有时间在纸上记录设置,请尽可能在系统中进行记录。随着配置文件,这应该几乎可以说是标准的做法-每一个设置发生变化,应盖销,包括缩写,即设定的预期效果,原因为什么它被改变(见之前的子弹点)。这个小习惯在紧缩期间为我的腊肉节省了不止一次。“我们为什么要这么做?” “因为我们强制执行策略X,而设置Y赋予了我们执行策略X所需的行为”。
  • 啤酒。或可乐。甚至水。饮料始终受到欢迎。成为系统管理员是一项口渴的工作。

3
对于配置文件文档/更改问题,建议将所有配置文件放入版本控制系统中。对于程序员而言,这应该非常容易,因为他们希望已经将这样的系统用于其源代码。如果他们在每次进行更改时也添加评论,则很容易回顾历史并查看更改的时间和原因。
安德斯·桑德维格

+1,因为它在变更管理中“闭环”。很棒的建议。
艾利·佩恩

2
提供清晰的错误报告的绝佳建议。没有什么让我很沮丧超过被告知有一个问题,并且知道它可能会影响到很多人之后,我不得不从一个无私的程序员逗细节
戴夫·切尼

23

安全不是事后的想法。虽然被黑的应用程序会使程序员看起来不称职,但(至少)这是浪费一个周末来花费时间来验证,清理和/或从系统管理员的备份中恢复。

因此,请勿将备份视为版本控制。它们是用于灾难恢复的,实际上并不是为了还原代码而设计的,因为您忘记了更改。

并不要一味地指责Windows Update破坏了代码。我不在乎它是否会一直起作用,请告诉我为什么它现在不起作用-然后我们可以看到它是谁的错。


17

如何调试网络问题并使用sysadmin工具监视程序运行。作为开始从事系统管理的程序员,我对网络“停止”后许多程序员变得无能为力感到惊讶。

  • Wireshark,观看您的代码以黑匣子的方式逐包运行
  • 直接连接到网络服务的工具:
    • Telnet,netcat或socat,用于通过TCP或UDP进行纯连接
    • OpenSSL具有加密功能(提示:请尝试openssl s_client -connect target-host:port一些时间),用于手动连接到网络服务
  • dig(在BIND 9程序包中)以调试名称解析
  • 能够根据连接失败的时间和其他特征来判断网络堆栈的哪个部分失败
  • 可能是HTTPFox和/或Firebug

3
+1。任何编写依赖于可靠网络性能的应用程序的开发人员,在开始编写代码之前,应阅读已故的W. Richard Stevens撰写的“ TCP / IP Illustrated v1”。
Murali Suriar,2009年

1
感谢所有支持者。多年来,当底层网络出现故障时,看到程序员陷入无助的停滞状态使我感到沮丧。如今,几乎所有编程都是网络编程。
jhs

14

知道如何解决问题。

推卸责任非常容易(例如,您的网络正在使我与数据库的通信中断)。可能是网络故障,但是您应该拥有带有错误的应用程序日志,而使用Google或SO可能会显示出应用程序配置中的问题。

每个人都喜欢责怪硬件,操作系统或网络,因此,如果您进行更多的尽职调查,您将使sysadmin成为一个快乐的人。因为,如果没有别的什么,您也许可以将它们指出可能出问题的特定方向(而不是说“您的网络很烂”或同样有用的东西)。


1
绝对。我无法开始计算我在错误的地方搜索问题所花费的时间,因为人们将我指向错误的方向
Gert M

8

记录一切。无法告诉您最后一个系统管理员认为不为“工作安全性”记录某些东西或某人只是想进出就很可爱。就像程序员应该留下好的评论一样,系统管理员也应该记录文档。拓扑图也很好。


7

计划B。

设计和开发解决方案时,请始终牢记灾难恢复计划。识别可能导致故障的单点故障。


6

文档:无需费劲,但可以了解应用程序的工作原理,该图显示了各个位的安装方式以及在所有组件出现问题时如何测试每个组件。样本数据和输出很好。

要求:它依赖什么模块?版本?操作系统?

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

说到包装,包装!没有什么比“部署”更糟糕的了,这意味着从VCS中检出文件的新修订并将其复制到一堆服务器中。程序员常常不理解部署软件的复杂性:版本化,打包的软件构成了大多数OS的骨干,这是有原因的。

如果开发人员带着RPM来到我这里,该RPM首次安装了简洁,全面的文档和一些Nagios测试,它们将是我的新好朋友。


6

令我惊讶的是,到目前为止,这里给出的17个答案中没有一个包含任何有关确保以标准用户身份登录时运行应用程序的信息。

除了安装过程之外,使用标准用户帐户登录时,应用程序应该可以正常运行。



4

这可能仅适用于初级程序员,但是我在每个项目中都与一些程序员打交道。

  1. “它可以在我的机器上工作”永远不是有效的说法。创建安装程序以供在服务器上使用是程序员的责任,或者至少记录了服务器上所需的每个连接以及dll和加载项。

  2. (我已经多次听到这个消息,所以请不要笑)我从我的机器上的服务器上运行exe,它可以工作。但是,当我在服务器(Citrix,终端服务器等)上运行它时,它不起作用。请了解dll和ocx以及程序所需要的其他内容,以及在何处以及如何注册它们以及您的程序如何使用它们。

这些看似简单,但我一直在处理。

布赖恩


4
  • 与您的管理员正式和非正式地讨论您的工作。他们通常会感兴趣,并且可以在早期表达对生产的可能影响。您不必同意,但是它可以帮助您确定问题点。
  • 不,您无法拥有整个服务器……如果需要,这是一项政治决定,无论其技术听起来如何。如果您想从事政治工作,请继续前进。
  • 生产硬件通常看起来与开发服务器不同,甚至在服务器场中,计算机的规格也不同。
  • 了解如何设置生产,因为您可能无法在桌面上复制它,这样做可以防止您做出错误的假设。
  • 仅仅因为您可以在内存中缓存内容并不意味着您应该先等待瓶颈(在单元测试或生产前性能测试中)
  • 如果要将数据保留在数据库中,请考虑如何将数据拆分为只读数据(可以水平缩放)和读写数据(通常仅垂直缩放)。
  • 如果要将数据粘贴到数据库中,一定是真的RDBMS吗?还有其他可扩展性更好的键值对系统(netcache)。
  • 不要以为AJAX是最终解决方案,它看起来很酷,但是它限制了监视和自动化的可能性。我并不是说不要使用它,只是三思而后行。

4

好的,这有点,但是:

a)进行编码时,请假设基础基础架构可能会失败,并且不会来自永远幸福的土地。或谷歌。

b)我们可能没有足够的资源来实现您所了解的基础架构之类的功能,因此当出现问题时,请对我们放轻松。很可能我们知道需要做什么,但是由于某种原因,它还没有发生。我们是您的合作伙伴!

c)就像上面提到的jhs一样,如果您对工具进行基础设施故障排除,如ping,traceroute(或结合使用-mtr),dig等,对您确实很有帮助。即使知道Wireshark,也可以获得大量积分。

d)如果您对计算机进行编程,则您确实应该知道计算机如何连接到网络以及基本知识,例如能够解析ipconfig / all或ifconfig的输出。您应该可以在最少的帮助下启动并运行Internet。

否则,我认为Avery几乎钉牢了它。进行系统管理员一点的开发人员是值得的!但是同样,了解当今开发人员如何处理事物(包括版本控制等)的系统管理员在当今时代至关重要。

目前,这种情况似乎尚未解决,我注意到博客中有关dev / ops关系的更多讨论-查看

保持Twitter Twittering

分区与战争

运营中首先测试


3

没有一个团体或职能比另一个团体“好”,也没有一个比另一个需要“更大的头脑”。我已经看到双方都在对方的公司中得到了最初的认可-你们都在努力实现相同的目标-专注于这些相似之处,而不是您使用了不同的工具这一事实。


2

基础架构设计师转为程序员,但将来可能希望回滚该事务:)

  1. 尽早和经常互相交谈。与将管理应用程序基础结构的人员一起审查设计(如果您知道将是谁)。
  2. 零数据丢失是可能的,但这是开发人员和sysadmins共同承担的责任。同样,在这里互相交谈可能会有所帮助。
  3. 您的基础架构人员应该参与确定非功能性需求。
  4. 安排啤酒(完成工作时)和披萨(工作时)。不知何故,这种食物的存在会影响我们使精美的32个cpu小盒子做您想让他们做的任何事情的能力:)

2

作为开发人员的系统管理员以及我自己的开发人员,此处提供的建议不仅是金,而且应成为整个公司新开发人员的招聘文档的一部分。

我还没有看到(尚未)解释的一点是,开发人员确实应该知道他们将用来创建付费程序的产品。我不得不解释和配置apache服务器,eclipse和Visual Studio安装以及开发人员机器上的数据库的时间有点令人担忧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.