假设一个环境中有一个由 Puppet 管理的不同服务器集群 - 各种硬件、软件、操作系统、虚拟/专用等。
您会选择有意义的主机名(mysqlmaster01..99、mysqlslave001..999、vpnprimary、vpnbackup 等)还是更喜欢无意义的主机名(例如书籍或电影中的人物)?
我认为有意义的主机名存在的问题是,名称通常代表单一服务,如果服务器有多个用途,它就会变得非常混乱(特别是如果服务器角色经常变化)。
将服务名称映射到 IP 地址并维护该映射不就是 DNS 应该做的事情吗?
这两种方法的优点和缺点是什么?使用您选择的方法时您必须解决哪些实际问题?
答案1
有一次,我有机会决定一个命名方案。于是我四处询问我的开发人员,毕竟他们是每天必须使用这些名称的人,他们是否更喜欢功能名称(即以某种编码形式表示机器用途的名称)或助记符名称(即从某些预先存在的人类命名方案中提取的名称,其中不包含有关机器用途的隐含内容)。
在 38 位开发人员中,有 37 位喜欢助记名称;只有一位喜欢功能名称。因此,我以河流来命名它们(可能的名称非常多,而且其中很多都很短、容易记住且输入速度快)。
人类的大脑非常善于为名称赋予意义。如果您提供的名称令人难忘,人们会很快记住这些名称的用途,并使用它们。如果您使用来自一些常见背景的名称(例如河流、元素、星星、县、饮料,您明白了),它可以帮助人们在遇到公司主机名时立即识别它;否则,像“所有电子邮件都发到了betelgeuse
”这样的陈述可能会有点令人困惑)。
相反,我的开发人员觉得他们在以前的工作中很难记住到底pr1ms001
是什么。
但我应该补充一点,我们在内部 DNS 中使用 CNAME 来提供功能名称到助记名称的映射,因此如果您真的觉得更容易记住 PR 站点第一个集群上的主要邮件服务器是pr1ms001
,那么 DNS 会让您知道它当前是orwell
。此外,这让我们每台机器都有多个功能名称,因此只要您始终使用与您正在处理的功能相关的功能名称,您就可以确保 始终pr1imap001
指向 IMAP 服务器,即使我们将该功能从 移动orwell
到rhine
。当hudson
它死机时,我们可以更改替代服务器的名称而不会影响操作功能,这样我们就永远不会出现“您是指新的hudson
还是旧的hudson
?”的困惑。
答案2
这在很大程度上取决于您的服务器是否pets
是livestock
。
宠物都有各自的名字。它们彼此不同,我们关心这些差异。当一只宠物生病时,我们通常会尽力照顾它恢复健康。传统上,服务员都是宠物。
牲畜有数字。它们大多相同,我们不在乎它们之间的差异,通常会尽量减少它们之间的差异。当一只牲畜生病时,我们会把它放下,再买一只。完全虚拟化的服务器,尤其是 AWS 等 IaaS 服务器,就是牲畜。
在大多数复杂环境中,您都会遇到这种情况。例如,您的 Web 后端几乎肯定是牲畜。如果您需要更多,您可以使用标准配置启动更多;如果您不需要那么多,您可以关闭一些。在某些配置中,您的数据库服务器是宠物。每个服务器可能都有很多特殊设置;您甚至可能在裸机上运行它们,而不是虚拟化。
当然,在任一环境中,您都可以命名服务并直接对其进行寻址。无论如何,这都是最佳实践;您的开发人员不需要知道或关心服务的实际主机名是什么。主机名应该是一个纯粹的操作细节。然后,考虑在主机名中编码对您的操作人员有用的信息 - 例如,指示服务器位于哪个数据中心通常很有帮助。
答案3
我的建议是功能名称和助记名称的组合......
如果您正在编写应用程序并且需要解决ccts-logserver1
,请始终使用该名称,但将其设为 CNAME 或别名。真正的主机名可以是您想要的任何名称:水果或蔬菜、希腊神话或 Seinfeld 角色……但当您需要关联真正的功能名称时,它会为您提供一些灵活性,但要保留一些人们可以记住的名称。
想想这个例子mango
,数据库服务器发生故障……但被其他东西替换,比如说peach
。也许现有的流程和应用程序需要看到cmt-prod-db1
。您可以交换系统,构建它们而不存在命名冲突,并让应用程序(和开发人员)满意。
答案4
唯一的要求主机名在网络上应该是唯一的。
含义并不一定只与服务器功能有关。如果您必须处理物理设备,位置可能非常有用。了解设备是虚拟的还是物理的也很有用。在确定使用什么工具登录时,能够区分网络设备、Linux 服务器或 Windows 机器非常方便。
我们的处理方式是尝试将此信息放入设备名称中,如下所示:
L 或 T - 实时或测试 P 或 V - 物理或虚拟 S 或 N - 服务器或网络(我们没有任何 Linux 服务器)一个连续的数字以确保唯一性ISO 3166-1 三字母国家代码指示设备所在的位置。
然后,我们使用 DNS 中的 CNAMES 将各种服务名称映射到主机名。
我对此有复杂的感受。它确实节省了查找某个设备位置的时间。另一方面,与我们之前使用宝石的系统相比,当显示主机名时,很难记住给定服务器的功能。宝石没有任何意义,但它们很容易记住,因为每个人都可以创建自己的连接。
我想唯一的建议就是确定一种模式,因为当我们从一个系统过渡到另一个系统时,最大的混乱就会出现。