在有意义和无意义的主机名之间进行选择

key*_*one 81 configuration-management best-practices

假设一个环境有一个由不同服务器组成的 puppet 管理集群——各种硬件、软件、操作系统、虚拟/专用等。

您会选择有意义的主机名(mysqlmaster01..99、mysqlslave001..999、vpnprimary、vpnbackup 等)还是更喜欢无意义的主机名,例如书籍或电影中的角色?

我看到有意义的主机名的问题是名称通常代表单个服务,如果服务器有多个用途,它会变得非常混乱(特别是如果服务器角色经常变化)。

难道不是将服务名称映射到 IP 地址并维护 DNS 应该做的映射吗?

这两种方法的优点和缺点是什么,你必须用你选择的方法解决哪些实际问题?

Mad*_*ter 99

曾几何时,我有机会决定命名方案。所以我四处询问我的开发人员,毕竟谁是每天必须使用这些名称的人,他们是否更喜欢功能名称(即,名称以某种编码形式表示机器的目的)或助记名称(即,从一些预先存在的人类命名方案中提取的名称,其中不包含有关机器目的的隐含内容)。

在 38 个开发人员中,有 37 个首选助记名称;只有一个首选的功能名称。所以我把它们都以河流命名(有很多可能的名字,其中许多都很简短,容易记住,而且输入很快)。

人类大脑经过精心设计,可以为名称赋予意义。如果您提供令人难忘的名称,人们会很快记住这些名称的用途并使用它们。如果您使用从一些常见背景中提取的名称(例如河流、元素、星星、县、饮料,您就会明白)它可以帮助人们在遇到公司主机名时立即识别它;否则像“所有电子邮件都结束了betelgeuse”这样的语句可能会有点混乱)。

相反,我的开发人员觉得他们在以前的工作中很难准确记住是什么pr1ms001

但我应该补充一点,我们在内部 DNS 中使用了 CNAME 来提供一个功能名称到助记符名称映射,所以如果你真的发现更容易记住 PR 站点第一个集群的主邮件服务器是pr1ms001,那么 DNS 将让你知道那是目前orwell。此外,这让我们每台机器都有许多功能名称,因此只要您始终使用与您正在处理的功能相关的功能名称,您就可以确定它pr1imap001始终指向 IMAP 服务器,即使我们移动了该功能从orwellrhine。并且当hudson死亡时,我们可以在不影响操作功能的情况下更改替换的名称,这样我们就不会出现“你是说新的hudson还是旧的hudson?”的问题。困惑。

  • 你应该以冰岛的火山命名它们。 (11认同)
  • 您可能会这么想,但我的开发人员说,无论是否传达任何其他信息,助记符方案都更好,因为他们都构建了自己的内部状态表,其中包含位置信息,并且这种记忆更容易建立在名称上人脑喜欢记忆。 (7认同)
  • +1 表示“河流池”;) (2认同)
  • 这是一个很棒的主意,我正在窃取它。 (2认同)

Tha*_*eli 93

这在很大程度上可以归结为你的服务器是否pets还是livestock

宠物有单独的名字。它们彼此不同,我们关心这些差异。当一个人生病时,我们通常会尝试护理它恢复健康。传统上,服务器一直是宠物。

牲畜得到数字。它们大多相同,有什么不同,我们不在乎,通常会尽量减少。当一个人生病时,我们把它放下,再换一个。完全虚拟化的服务器,尤其是像AWS这样的IaaS服务器,是家畜。

在大多数复杂的环境中,你有一个混合。例如,您的网络后端几乎肯定是牲畜。如果你需要更多,你可以使用标准配置再增加一些;如果你不需要那么多,你就关掉一些。在某些配置中,您的数据库服务器是宠物。每个可能有很多特殊的设置;你甚至可能在裸机上运行它们而不是虚拟化。

当然,在任一环境中,您都可以命名 SERVICES 并直接寻址它们。在任何情况下,这都是最佳实践;您的开发人员不需要知道或关心服务的实际主机名是什么。主机名应该是一个纯粹的操作细节。那么,想想在主机名中对您的运维人员有用的编码信息 - 例如,表示服务器位于哪个数据中心通常很有帮助。

  • 宠物或牲畜 - 这是一个很好的表达方式。 (22认同)
  • 我最近重新找到了我第一次看到这个概念的文章:http://www.gregarnette.com/blog/2012/05/cloud-servers-are-not-our-pets/ (5认同)

eww*_*ite 18

这已经在这里讨论过...

我的建议是功能名称和助记名称的组合......

如果您正在编写一个应用程序并且它需要 address ccts-logserver1,请始终使用该名称,但将其设为CNAME 或别名。真正的主机名可以是您想要的任何名称:水果或蔬菜、希腊神话或宋飞正传……但当您需要关联真正的功能名称时,它为您提供了一些灵活性,但要保留一些人们可以记住的东西。

想想这样的例子mango,数据库服务器失败了……但被其他东西取代,比如peach。也许现有的流程和应用程序需要看到cmt-prod-db1。您可以交换系统,在没有命名冲突的情况下构建它们并使应用程序(和开发人员)满意。