假定一个由不同服务器组成的木偶pipe理集群的环境 – 各种硬件,软件,操作系统,虚拟/专用等。
你会select有意义的主机名(mysqlmaster01..99,mysqlslave001..999,vpnprimary,vpnbackup等),还是更喜欢毫无意义的主机名称,例如书籍或电影中的字符?
我用有意义的主机名看到的问题是,名称通常代表单个服务,如果服务器具有多个目的,则会变得非常混乱(尤其是如果服务器angular色经常更改)。
是不是将一个服务名称映射到一个IP地址,并保持这个映射什么DNS应该做的?
这两种方法的优点和缺点是什么?您select的方法需要解决哪些实际问题?
曾几何时,我有机会决定一个命名scheme。 于是我转过身去问我的开发者,他们毕竟是那些每天都要用这些名字工作的人,他们是否喜欢function性名称(也就是说,以某种编码forms表示机器的目的)或助记名称(即,从一些预先存在的人类命名scheme中抽取的名称,其不包含关于机器目的的隐含内容)。
在38位开发人员中,有37位首选助记名; 只有一个首选的function名称。 所以我把它们全部命名为河stream(有很多可能的名字,其中很多是简短的,容易记住的,而且很快打字)。
人类大脑的devise是为了给名字附加意义。 如果您提供令人难忘的名字,人们会很快记住这些名字的用法,并使用它们。 如果您使用从一些共同背景(例如河stream,元素,星星,县,饮料等)中抽取的名称,则可以帮助人们在遇到公司主机名时立即识别这些名称; 否则像“所有的电子邮件结束在betelgeuse
”的betelgeuse
可能有点混乱)。
相反,我的开发人员觉得他们以前的工作真的很难记得pr1ms001
是什么。
但是我应该补充一点,我们在内部DNS中使用CNAME来提供助记名称映射的function名称,所以如果你真的发现记住PR站点上第一个集群的主邮件服务器是pr1ms001
,那么DNS会让你知道那是当前的orwell
。 而且,这让我们在每台机器上都有许多function名称,所以只要您始终使用与您正在使用的function相关的function名称,您可以确定pr1imap001
将始终指向IMAP服务器,即使我们移动来自rhine
function。 而当hudson
去世的时候,我们可以在不影响运作function的情况下更换替代者的名字,以至于我们从来没有“你是指新hudson
还是老hudson
? 混乱。
这很大程度上取决于您的服务器是pets
还是livestock
。
宠物得到个人的名字。 他们彼此不同,我们关心这些差异。 当生病时,我们通常会努力护理它。 传统上,服务器一直是宠物。
家畜获得数字。 他们大多是相同的,有什么区别,我们不关心,通常尽量减less。 当生病的时候,我们把它放下来,换一个。 完全虚拟化的服务器,尤其是AWS等IaaS服务器是家畜。
在最复杂的环境中,你有一个混合。 例如,你的networking后端几乎可以肯定是家畜。 如果你需要更多的东西,你可以使用标准的configuration再旋转几个; 如果你不需要那么多的话,你可以把一些关掉。 您的数据库服务器在某些configuration中是宠物。 每个可能有很多特殊的设置; 你甚至可以用裸机而不是虚拟化来运行它们。
当然,在任何一种环境下,您都可以命名“服务”并直接对其进行处理。 无论如何,这是最好的做法。 您的开发人员不需要知道或关心服务的实际主机名是什么。 主机名应该是一个纯粹的操作细节。 那么,请考虑对主机名中的操作人员有用的信息进行编码 – 例如,指出服务器位于哪个数据中心通常很有帮助。
这已经在这里覆盖了…
我的build议是function名称和助记名称的组合
如果你正在编写一个应用程序,并且需要解决ccts-logserver1
,那么你可以使用这个名字,但是要使用CNAME或者别名。 真正的主机名可以是任何你想要的:水果或者蔬菜,希腊神话或者Seinfeldangular色……但是当你需要关联真正的function名称时,它会给你一些灵活性,但是保留一些人们可以记住的东西。
想想mango
,数据库服务器失败的例子,但是用别的东西代替,比如说peach
。 也许现有的进程和应用程序需要看到cmt-prod-db1
。 您可以交换系统,构build它们而不用命名冲突,并保持应用程序(和开发人员)的快乐。
在我工作的地方,我们在多个城市pipe理多个网站,多家公司。 对于我们来说,助记名称是行不通的。 相反,我们使用描述我们的服务器的速记forms。 这在我们的案例中运行得很好,因为我们有一些客户可能在不同的领域有多个办事处(或者多个领域的单个办事处,或者同一个领域的多个办事处,或者上述所有领域)。
对于我们来说,这些信息包含公司/域名,城市,function,号码。 因此,对于公司的域控制器来说,在芝加哥的赛普拉斯将是:
CYPRCHDOM001(我们将此称为赛普拉斯主DOM在对话中)
CYPRCHSQL001就是SQL服务器,CYPRCHMGM001就是它的pipe理(即反病毒,备份等),而CYPRCHAPP001就是一个混合的应用服务器。 易于记忆,易于分类,易于教学。
主机名的唯一要求是它们在networking上应该是唯一的。
意思并不一定只与服务器function有关。 如果您必须处理物理设备,位置可能非常有用。 知道设备是虚拟的还是物理的也是有用的。 能够分辨networking设备,Linux服务器或Windows机器之间的区别,可以非常方便地找出用什么工具来login。
我们处理的方式是尝试将这些信息放入设备名称中,如下所示:
L或T – Live或Test P或V – 物理或虚拟S或N – 服务器或networking(我们没有任何Linux服务器)序列号,以确保唯一性ISO 3166-1三字母国家代码,指示设备位于。
然后,我们使用DNS中的CNAMES将各种服务名称映射到主机名。
对此我有种复杂的感觉。 这肯定节省了查找某个设备所在位置的时间。 另一方面,与我们之前使用gem的系统相比,记住给定主机名时给定服务器的function要困难得多。 gem并不意味着任何意义,但很容易记住,因为每个人都可以build立自己的联系。
我想唯一的build议就是解决一个模式,因为当我们从一个系统转换到另一个时,最大的混乱就出现了。