服务器的系统命名法

Tue 24 February 2015

计算机科学的两个难题是缓存的失效 (cache invalidation)、命名事物以及偏差一错误 (off-by-one error)。本文旨在为第二个(或者是第一个,取决于你如何数数)难题提供一个较为通用的解决方案。

一般的,服务器命名有两种模式——或是直接对服务器取名,或是对服务器进行系统的编号。显然,前者在服务器数量较小时可以使用,但它并不能 scale。因此,必须有一种方式可以将服务器的命名可以 scale。

命名的要点

让我们思考服务器的命名有哪些要点。为了支持日渐流行的 IaaS 服务同时兼容传统的数据中心,同时可以快速解读出服务器主机名所包含的信息,命名中应该至少包含有以下信息:

  • 服务器的地理位置
  • 服务器的 colocation 提供商

这对于网络追踪时解读 traceroute 信息是格外有帮助的。

Bare metal machine 除了以上的信息之外,还有下列信息是固定不变的:

  • 机柜的位置
  • 服务器在机柜中的位置

以上信息在需要 colocation 服务人员协助操作硬件时格外有用。

除此之外,有一些常被认为是不变信息的信息其实可能是有所变化的:

  • 服务器的硬件配置
  • 服务器的角色

对于这些有可能会变化的信息,不应编码到主机名中。为了满足以上的需求,提出的主机命名法如下。

主机名的组件

  • Colocation 服务商,或 IaaS 服务提供商
  • 服务器的地理位置代码
  • 机柜编码
  • 服务器在机柜中的位置

假设在为 Contoso 公司(域名为 contoso.com)命名生产服务器,并决定使用 pro.contoso.com 域名。则 Contoso 在 Seattle 的所有服务器域名均为 sea.prod.contoso.com ;其中 SEA 为 Seattle 机场之机场代码。

假设 Contoso 在 Seattle 使用了两家 colocation 服务商, The Phone Company 以及 A Datum Corp。将这两家公司分别简化为 pc (as in Phone Company) 以及 dc (as in Datum Corp)。将 colocation 的机柜从 AA 开始序列编号 (aa, ab, ... , az, ba, ... ) 进行扩展。注意机柜编号时不使用数字。

假设使用标准 42U 机柜,则服务器的命名将采用机器最顶处的机位进行编码。例如一台 4U 服务器占用了 20, 21, 22, 23 机位,此服务器的上沿处编码为 20, 则服务器编码即为 20。

到此处,一台 20 号机位、机柜编码为 AB、数据中心为 PC、地理位置为 SEA 的服务器,主机名将是 abpc20.sea.pro.contoso.com

dcname      = 2*LOALPHA
rackname    = 2*LOALPHA
rackpos     = 2*DIGIT
geoloc      = 3*LOALPHA

hostname = dcname rackname rackpos "." geoloc "." pro.contoso.com

对于使用 IaaS 的公司,同一数据中心多可用区的部署可视为同地理位置不同 colocation 服务商的情况。 rackname 以及 rackpos 可以使用顺序编号。

Comments