题 选择有意义和无意义的主机名[关闭]


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

你会选择有意义的主机名(mysqlmaster01..99,mysqlslave001..999,vpnprimary,vpnbackup等)还是你更喜欢无意义的主机名,比如书或电影中的人物?

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

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

这两种方法的优点和缺点是什么,以及您选择的方法需要解决的实际问题是什么?


74
2018-02-18 14:04




如果您控制DNS,您可以随时执行这两项操作。 - jscott
我会把它放在这里: RFC 1178 - gelraen
虽然表面上是一个基于意见的问题,但实际的答案是基于事实的民意调查,并基于人类的认知功能(人类大脑如何记住事物)。在我看来,这个问题应该重新开放。 - dotancohen


答案:


曾几何时,我有机会决定命名方案。所以我绕过去询问我的开发人员,他们毕竟是那些每天必须使用这些名字的人,他们是否愿意 实用 名称(即以某种编码形式表示机器用途的名称)或 助记符 名称(即从某些预先存在的人类命名方案中提取的名称,其中不包含有关机器用途的隐含内容)。

在38位开发人员中,有37位喜欢的助记名称;只有一个首选的功能名称。因此我将它们全部命名为河流(这里有一个非常大的可能名称池,其中许多都很简短,易于记忆,并且可以快速输入)。

人类的大脑设计得非常好,可以将意义附加到名称上。如果您提供令人难忘的名称,人们会很快记住这些名称的用途,并使用它们。如果您使用从一些常见背景中提取的名称(例如河流,元素,星星,县,饮料,您可以得到这个想法),它可以帮助人们在遇到公司主机名时立即识别它们;否则声明,如“所有电子邮件最终结束 betelgeuse“可能有点混乱)。

相反,我的开发人员觉得他们以前的工作很难记住究竟是什么 pr1ms001 是。

但我应该补充一点,我们在内部DNS中使用CNAME为助记名称映射提供了一个功能名称,所以如果你真的发现它更容易记住PR站点第一个集群的主邮件服务器是 pr1ms001,那么DNS会让你知道那是当前的 orwell。另外,我们每台机器都有许多功能名称,因此只要您始终使用与您正在使用的功能相关的功能名称,您就可以确定 pr1imap001 总是会指向IMAP服务器,即使我们移动了该功能 orwell 至 rhine。什么时候 hudson 死了,我们可以在不影响操作功能的情况下更改替换名称,这样我们就没有“你的意思是新的 hudson还是老的 hudson“混乱。


96
2018-02-18 14:10



您可能会想到这一点,但我的开发人员说,无论是否传达了其他任何内容,助记符方案都会更好,因为它们都构建了自己的内部状态表,这些内容状态表就在哪里,并且这种内存更容易构建在名称上人类的大脑喜欢记住。 - MadHatter
你应该在冰岛火山之后命名它们。 - Chloe
+1“河流池”;) - Konerak
这是一个很棒的主意,而且我正在窃取它。 - SpacemanSpiff
我同意以这种方式命名服务器更多的是使用autobuild系统,但我注意到构建它们的目的是让其他人使用它们 - 而上面的数据来自那些必须 使用 他们。可能他们想要的东西已经发生了变化,但我认为我们对服务器管理员的决定应该更多地取决于使我们的工作变得容易的事情。 - MadHatter


这在很大程度上取决于您的服务器是否正常 pets 要么 livestock

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

牲畜得到数字。它们大部分是相同的,有什么不同之处,我们并不关心并且通常会尽量减少。当一个人生病时,我们把它放下来再拿一个。完全虚拟化的服务器,尤其是AWS等IaaS服务器,都是牲畜。

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

当然,在任何一种环境中,您都可以命名服务并直接解决这些问题。无论如何,这是最佳做法;您的开发人员不应该知道或关心服务的实际主机名是什么。主机名应该是纯粹的操作细节。那么,请考虑编码对主机名中的操作员有用的信息 - 例如,表示服务器所在的数据中心通常很有帮助。


93
2018-02-18 18:16



宠物或牲畜 - 这是一个很好的方式。 - Michael Hampton♦
我最近重新找到了我第一次看到这个概念的文章: gregarnette.com/blog/2012/05/cloud-servers-are-not-our-pets - Ian
谢谢@Ian我一直在寻找那篇文章的最后一天,SEO失败了 - Rudolf Olah


这已经在这里介绍过......

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

如果你正在编写一个应用程序,它需要解决 ccts-logserver1,在整个过程中使用该名称,但将其作为CNAME或别名。真正的主机名可以是你想要的任何东西:水果或蔬菜,希腊神话或Seinfeld角色......但是当你需要关联真正的功能名称时,它会给你一些灵活性,但保留人们可以记住的东西。

想想这里的例子 mango,数据库服务器失败......但是被替换为其他东西,比方说 peach。也许现有的流程和应用程序需要看到 cmt-prod-db1。您可以交换系统,在没有命名冲突的情况下构建它们,并使应用程序(和开发人员)感到高兴。


18
2018-02-18 14:17





在我工作的地方,我们在多个城市管理多个站点,多个公司。对我们来说,助记符名称不起作用。相反,我们使用描述我们的服务器的简写形式。这在我们的案例中效果很好,因为我们有一些客户可能在不同的域上有多个办事处(或多个域上的单个办公室,或同一域上的多个办公室,或以上所有!)

对我们而言,信息包含公司/域名,城市,功能,号码。所以对于公司的域控制器,赛普拉斯在芝加哥说它将是:

CYPRCHDOM001(在谈话中我们称之为赛普拉斯的主要DOM)

CYPRCHSQL001将是它的SQL服务器,CYPRCHMGM001将是其管理(即防病毒,备份等),而CYPRCHAPP001将是混合应用程序服务器。易于记忆,易于分类,易于教学。


4
2018-02-18 18:31



那么你怎么记得在CYPRCHAPP001上运行的应用程序而不是CYPRCHAPP003?我承认这也是一个有关mnenomic名称的问题,但如果你想要某种功能名称,也可能是具体的。 - α CVn
@MichaelKjörling服务器上的内容的细粒度细节不属于名称,它们属于某种文档。如果有人需要知道CYPRCHAPP001上运行的是什么,他们会阅读文档。除了应用程序移动之外,当公司将其工资单软件移至托管解决方案时,CYPRCHAPP001_PointofSale_Payroll_HRSoftware等将是一个误称。 - Wulfhart
@Wulfhart我同意你的观点,但是有了CNAME的错误 pointofsale, payroll等等?这样,除了系统管理员之外,没有人需要关注薪资软件运行的确切位置;对于其他人来说,它只是有效。想要将内容移动到另一个数据中心?没问题。想将销售点系统数据库移动到自己的专用服务器上吗?只需更新 pointofsale-database CNAME指向新位置。等等。 - α CVn
假设您需要更换一台机器:一旦您构建了CYPRCHSQL002并对其进行了测试,您是否只取消名称CYPRCHSQL001(永远不会被替换),或者在删除旧001之后将002重命名为001,或者是什么其他? - nickgrim
@MichaelKjörling这对我来说似乎是一个好主意。 “具体不属于名称”我的意思是不在机器的主机名中。 - Wulfhart


唯一的 需求 对于主机名,它们应该在网络上是唯一的。

意义不仅仅与服务器功能有关。如果您必须处理物理设备,位置可能非常有用。了解设备是虚拟的还是物理的也是有用的。在确定用于登录的工具时,能够区分网络设备,Linux服务器或Windows框可以非常方便。

我们处理它的方法是尝试将此信息放入设备名称中,如下所示:

L或T - 生活或测试 P或V - 物理或虚拟 S或N - 服务器或网络(我们没有任何Linux服务器) 序号以确保唯一性 一个 ISO 3166-1三字母国家代码 指示设备的位置。

然后,我们在DNS中使用CNAMES将各种服务名称映射到主机名。

对此我五味杂陈。它肯定可以节省查找某个设备所在位置的时间。另一方面,与我们之前使用宝石的系统相比,更难以记住给定服务器在显示其主机名时所执行的操作。宝石并不意味着任何意义,但它们很容易记住,因为每个人都可以建立自己的联系。

我想唯一的建议是解决一个模式,因为当我们从一个系统转换到另一个系统时出现了最大的混乱。


2
2018-02-19 15:18



我不同意这一点:“知道设备是虚拟的还是物理的也可以是有用的” 命名 讨论。当然这是有用的信息,但是通过阅读其名称,您不需要了解服务器的第一件事。此外,P2V或V2P要么破坏您的方案,要么重命名服务器,这可能会打破其他事情。 - mfinni
根据我的经验,P2V或V2P打破了很多东西,应该尽可能避免 - 我们这样做,因此它不是我们的命名约定的问题。命名约定需要满足设计它的人的要求 - 在我工作的组织中,由管理所有服务器和网络设备的团队设计,他们希望能够告诉上述事情。它可能不适合你,但随后它可以辩论。唯一的技术要求是唯一性。 - dunxd