B站装机系统实践:从初创到规模化的演进

01背景

随着B站用户数量的迅速增长和业务的不断扩展,数据中心的规模和复杂性也在不断增加。为了满足新服务器上架交付、系统安装和服务器初始化配置等新交付装机需求,早期采用了传统的PXE装机方案。然而随着IDC和边缘服务器的规模持续增长,以及业务场景的多样化,传统的装机方案逐渐暴露出灵活性不足和效率低下的问题。

在这种背景下,我们开始探讨如何构建一个能够满足多样化需求的装机系统,以应对大量新交付装机、重装机、机房搬迁、CDN服务器装机等各类复杂场景。本文将详细介绍B站装机系统的演进过程,以新交付装机和复杂网络装机两个装机场景为例,重点探讨我们在装机实践中面临的挑战和提出的解决方案。

场景1: 新交付装机

在新交付装机的场景下,整个流程大体分为三个步骤:上架,装机,环境配置(如下图)。

首先,在服务器上架阶段,服务器上架后需要初始化服务器的带外信息。这一过程早期依赖于现场运维人员的手动部署,不仅效率低而且容易出错。每台新服务器都需要单独配置,对于大规模的数据中心来说,这是一项艰巨的任务。

此外,由于业务需求的差异,不同的服务器需要定制化安装操作系统和内核,这就要求我们有一个能够识别服务器并引导安装不同操作系统的装机系统。在使用IPv4的DHCP服务和PXE网络引导的情况下,默认通过服务器的MAC地址进行识别。新交付服务器的MAC地址获取以及在更换网卡等场景导致MAC地址变化,会导致运维团队在维护服务器的MAC地址上需要投入大量的时间和精力。如果维护不准确,服务器可能无法被正确识别,从而导致装机失败甚至错误装机,影响装机效率和稳定性。

最后,装机完成后,为满足业务的定制化交付需求,新交付的服务器还需要根据业务需求进行一系列定制化的环境配置,例如带内的内核参数、系统服务等配置、带外管理的BIOS参数。其中带内配置通过shell脚本实现逻辑复杂,带外配置需要根据不同厂商型号进行不同的配置操作,操作成本高,难以保证配置一致性。

综上所述,对于新交付装机,我们主要面临以下挑战:

  1. 如何提高服务器上架效率,减少运维手动配置,能够处理大规模数据中心的服务器新交付上架需求;

  2. 如何维护服务器信息,准确识别或者维护MAC地址,确保不同服务器能够定制化安装操作系统和内核;

  3. 如何初始化服务器环境,维护简单,并确保初始化能有效回滚或者重试;

场景2: 复杂网络装机

由于IDC网络结构在不断的优化和改造中,历史上形成了多种网络架构,导致不同机房,不同包间的网络环境不一致。在这种情况下,存在一些包间必须操作交换机才能使服务器正常PXE启动引导安装系统。最终导致重装机的过程较为复杂且风险较高。

例如接入层和核心层均采用堆叠组网,网关配置在Spine设备,部分旧包间网络处于一个大型的二层广播域。当一个设备需要DHCP获取IP地址时,它会在网络上广播一个DHCP DISCOVER消息,DHCP服务器会响应这个消息,提供一个可用的IP地址。整个网络处于一个大型的二层广播域下,当一个设备广播DHCP DISCOVER消息时,这个消息会被发送到网络的所有设备,所以为了避免DHCP请求广播到整个网络,需要划分DHCP VLAN,将DHCP服务限制在特定的VLAN中,不影响其他设备。而且交换机厂商众多,适配的难度较大,操作交换机存在较大的系统稳定性风险。同时,也会存在交换机配置异常以及服务器的网卡驱动、网卡不轮询等问题,也会导致PXE引导失败,需要等待网络运维排查解决,耗时较多,不能及时响应解决。除此之外,对于CDN边缘节点装机场景,CDN网络与内网环境的不通,PXE引导装机无法进行。

对于PXE无法成功引导的场景,我们需要寻找其他有效的替代方法,以解决CDN网络与内网环境不通的问题,以及如何在多种网络结构中有效地配置和适配各种交换机,从而提高装机的成功率。

02 目标

因此我们需要的不仅仅是一个能够进行基础装机的系统,而是一个能够适应各种场景,提高装机质量和效率的系统。装机系统具体目标如下:

  1. 覆盖多种装机场景:满足新服务器交付、重装、CDN装机以及机房搬迁等场景;

  2. 定制化装机需求:根据业务需求,支持安装不同系统版本以及定制化初始化需求;

  3. 保障装机效率和质量:提高装机的自动化覆盖率和成功率,来保障装机的效率和质量;

03 装机系统的演进过程

在明确具体目标后,接下来我们将详细探讨装机系统的演进过程:从传统的PXE 装机方式开始,通过引入新的技术和方法,构建一个能够适应多样化需求的装机系统。

传统PXE装机

PXE(Preboot eXecution Environment)是一种广泛应用于数据中心和大规模部署环境的技术,它可以让计算机在还没有硬盘操作系统的情况下,通过网络启动。通过PXE可以极大简化和自动化安装操作系统的过程。

当计算机启动时,如果设置了从网络启动,那么它会发送一个DHCP请求,寻找一个可以提供启动服务的服务器。这个服务器会返回一个包含启动信息的DHCP响应,其中包括TFTP服务器的地址和要加载的启动文件的名称。然后,计算机会连接到TFTP服务器,下载并执行启动文件。这个启动文件通常是一个轻量级的操作系统,如Linux的内核和初始文件系统。这个轻量级的操作系统会启动并运行一个安装程序,这个安装程序可以从网络上下载并安装完整的操作系统。

PXE装机的优点是可以大规模、自动化地安装操作系统,而且不需要在每台计算机上插入安装介质。尽管PXE装机方式在一定程度上实现了自动化,但它在面对大规模和复杂场景时暴露出了一些问题:

  • 灵活性不足:定制化需求难以满足,不同的服务器可能需要不同的操作系统版本、内核参数和软件包配置。传统的PXE装机方式通常依赖于静态配置文件,难以灵活地根据不同需求进行定制化安装。
  • 配置复杂: 维护PXE服务器和相关配置文件需要投入大量时间和精力,特别是在频繁更新和变更的环境中。
  • 可靠性问题: PXE装机高度依赖网络连接,任何网络故障或中断都可能导致装机失败。

为了应对这些问题,我们提出了以下解决方案,涵盖了装机流程的前、中、后期,确保整个装机过程的高效和可靠。

整体架构

装机系统的整体架构如下图所示,其中蓝色部分是新引入的功能模块。****

BiliOS 内存系统

为了解决新交付场景下服务器带外信息配置困难以及服务器信息的维护困难的问题,引入了BiliOS内存系统。BiliOS是一个基于内存的操作系统,系统PXE启动后加载到内存使用,不依赖磁盘的设备。BiliOS内置Agent可以启动后采集服务器的信息,支持通过装机系统管理平台下发命令对硬件进行操作,如升级BIOS,修改RAID,配置带外等,以及提供一个基本的操作环境,用于故障诊断和恢复。Agent主要功能:

  1. Agent随BiliOS系统启动和管理平台建立通讯;
  2. Agent自动采集服务器信息上报管理平台,如MAC地址,序列号,DHCP IP等;
  3. Agent从管理平台获取硬件配置模版执行命令;

初次装机时,网卡启动加载BiliOS,通过BiliOS内存系统,自动配置新服务器的带外信息如BMC IP、网关等信息,不需要现场运维手动配置服务器带外信息,可以支持服务器自由上架。然后通过上报的MAC地址,生成对应服务器的PXE配置文件,安装目标系统。

所以通过BiliOS装机需要两次PXE启动,首次PXE进入BiliOS获取配置信息,第二次PXE启动安装目标系统。为了提高装机的效率,重装场景下会优先使用Server Agent带内查询服务器的MAC地址,成功查询到MAC地址就直接生成配置文件,一次PXE重启可以完成系统装机。如果Server Agent查询MAC地址失败,则使用PXE默认加载BiliOS,由BiliOS Agent上报MAC地址等服务器信息,再生成配置文件装机。

iPXE 替换 PXE

在PXE引导时,服务器会连接到TFTP服务器,通过下载并执行启动文件来完成引导。TFTP是一个基于UDP的简单文件传输协议,下载容易因文件大小和网络波动导致加载引导文件失败。iPXE是PXE的一个开源实现,它提供了比原生PXE更多的特性。以下是PXE和iPXE的对比:

iPXE支持更多的网络协议,可以从任何地方加载引导映像,iPXE还支持脚本,使得网络引导过程可以更加灵活和可定制。由于iPXE支持HTTP和HTTPS,因此在下载大文件时,iPXE的速度通常会比PXE快。iPXE还支持错误恢复,如果在下载过程中发生错误,iPXE可以从错误点继续下载,而不是重新开始。

在PXE引导下载installer-initrd过程中,initrd文件较大且基于UDP传输的,当装机服务器网络出现波动,容易导致加载映像中断,从而导致装机失败。为了解决下载引导文件容易失败的场景,引入iPXE应对传输不稳定的问题。在网络引导过程中,DHCP服务加载iPXE的引导文件,通过HTTP加载安装映像。这样可以利用HTTP协议的可靠性和速度,减少由于网络波动导致的下载中断问题。

带外装机

为了解决复杂网络以及CDN网络等一些PXE无法引导成功的场景,装机系统引入带外装机。

服务器的带外管理是一种远程管理和监控服务器硬件的方法。带外管理允许管理员在操作系统崩溃或网络中断的情况下,仍然可以访问和控制服务器。带外管理通常通过一个专用的管理端口(如 IPMI、iLO、DRAC 等)或者一个专用的管理网络来实现。这个管理通口或网络与服务器的主网络接口是隔离的,因此即使主网络接口出现问题,管理员仍然可以通过带外管理接口访问服务器。

服务器的带外网络简单,不存在链路配置、设置vlan等操作。同时,带外装机不依赖DHCP分配IP以及PXE引导过程就可以完成系统安装。可以覆盖PXE无法成功引导的场景,例如复杂网络、服务器网卡问题、以及CDN服务器装机等。所以通过引入带外装机方案,当PXE引导装机失败后,自动流转进行带外装机。

为了保证在带外安装过程中,完全不依赖生产网络,提前将服务器的名称、IP、网关、掩码信息写入镜像,将定制化的镜像通过管理卡挂载到服务器的CD/DVD上,然后配置CD启动来引导安装系统。

定制化交付

在装机完成后,需要进行服务器的初始化配置,初始化配置包括带内和带外两部分,带内主要是因为业务差异涉及到的系统环境不同,带外是因为服务器厂商、代次不同,配置存在差异。

带内配置主要是涉及到内核参数、系统服务配置、软件包安装等操作,通过系统环境基线配置管理替代之前的shell脚本,采用声明式配置方法,定义简单且基于目标状态的系统环境配置,确保配置的准确性和一致性,灵活支持多种操作系统和内核版本,能够适应不同业务部门的多样化需求;通过分组管理,可以根据不同业务部门的需求进行差异化配置,每个分组可以应用不同的配置模板,满足多样化的系统环境需求;并引入了灰度发布机制,有效降低配置变更带来的风险。此外,配置管理系统具备监控功能,能够实时监控服务器的配置状态,并在发现异常时及时通知运维人员或自动进行修复,确保系统环境的稳定和安全。具体可参考[3]:B站系统环境基线管理实践。

带外配置主要是涉及到BIOS和BMC设置等操作,由于服务器的厂商和代次较多,带外基线涉及几十项,直接通过现有的Redfish接口适配十分困难。带外管理通过集成厂商工具,运维配合进行模块配置,录入不同厂商、代次的设置命令,采用先检查后设置进行带外基线维护。通过带外管理,用户可以忽略底层服务器差异,专注服务器功能设置。

整体装机流程

新交付装机和复杂网络装机的装机步骤节点如下(蓝色为差异步骤):

04总结和展望

通过引入BiliOS内存系统,我们成功解决了新服务器交付过程中定制化装机的需求。BiliOS提供了一个灵活且高效的解决方案,使得服务器信息的配置和维护变得更加自动化和可靠。通过自动采集服务器信息和执行硬件配置模板,BiliOS大大减少了手动操作的错误率,提高了整体装机效率。使用iPXE替换传统的PXE,我们能够更稳定地下载引导文件,避免了由于网络波动导致的下载中断问题,从而保障了装机过程的顺利进行。此外,带外装机的引入解决了PXE无法引导的场景。

目前,装机系统已经被广泛应用于新服务器交付、重装机、机房搬迁等多种场景。装机系统的自动化覆盖率和成功率得到了显著提升,极大地提高了装机效率和质量。

展望未来,我们将持续优化装机系统,以满足更多无法覆盖的边缘场景需求。目前,采用的是Legacy模式,新服务器未来将逐步升级到UEFI模式,并结合LinuxBoot来提供更快速、稳定的引导,进一步提升装机的性能和可靠性。同时,我们将加强对新技术和新方法的研究和应用,确保装机系统能够应对不断变化的业务需求和技术挑战。

参考文献:

1.ipxe.org/

2.wiki.syslinux.org/wiki/index....

3.mp.weixin.qq.com/s/1GriX3i7n...

4.redfish.dmtf.org/

SYS平台

B站系统部平台团队,负责全站基础设施管理平台化和自动化、混合云IaC、资源运营CMDB等业务系统研发

-End-

作者丨 SYS平台

相关推荐
桃园码工1 小时前
4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅]
前端·html5·canvas
桃园码工1 小时前
9_HTML5 SVG (5) --[HTML5 API 学习之旅]
前端·html5·svg
人才程序员2 小时前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
m0_548514772 小时前
前端三大主流框架:React、Vue、Angular
前端·vue.js·react.js
m0_748232392 小时前
单页面应用 (SPA):现代 Web 开发的全新视角
前端
孤留光乩2 小时前
从零搭建纯前端飞机大战游戏(附源码)
前端·javascript·游戏·html·css3
伊泽瑞尔.2 小时前
el-tabs标签过多
前端·javascript·vue.js
2401_854391083 小时前
智能挂号系统设计典范:SSM 结合 Vue 在医院的应用实现
前端·javascript·vue.js
觉醒的程序猿3 小时前
vue2设置拖拽选中时间区域
开发语言·前端·javascript
m0_748241124 小时前
前端监控之sourcemap精准定位和还原错误源码
前端·状态模式