IDC 业务与选型

IDC 自动开通是怎么实现的:从下单到交付的完整流程

IDC 自动开通的核心是一台订单状态机:付款事件触发库存匹配,然后按固定顺序执行 IP 分配、交换机端口配置、通过 IPMI 设置 PXE 启动并重装系统,最后把 IP 和密码回填给客户。每一步都要能判断成功与否,失败时沿原路释放资源,机器才不会卡在“半开通”状态。

作者 顶联产品团队发布于 8 分钟阅读

自动开通是一条固定顺序的流水线

IDC 自动开通(也叫服务器自动开通、自动化交付)解决的问题只有一个:客户付款后,不需要任何人登录后台,机器就能装好系统、配好网络、把登录信息送到客户手里。实现方式是把交付拆成固定顺序的步骤,每一步有明确的输入、输出和成功判断,由一台订单状态机驱动着往下走。

以独立服务器为例,一笔订单从付款到交付要经过这些步骤:

步骤 输入 输出 由谁执行 怎么判断成功
1. 付款确认 支付网关回调 订单状态变为“已支付” 财务系统 回调签名校验通过,金额与订单一致
2. 库存匹配 套餐(机房、线路、CPU、内存、硬盘) 一台被预占的空闲服务器 机房管理系统 查到满足条件且 BMC 可达的机器并锁定
3. IP 分配 机房、线路、IP 数量 主 IP、网关、掩码、DNS,可选附加 IP 与 IPv6 段 IP 地址管理模块 从地址段取到未占用、未锁定的地址并标记占用
4. 交换机端口配置 服务器所接端口、VLAN、带宽 端口打开、VLAN 正确、限速生效 交换机管理模块 命令下发后回读端口状态一致
5. 装系统 镜像、分区方案、root 密码、网络参数 可登录的操作系统 装机服务 + BMC 收到装机完成回调,SSH 或 RDP 端口可连
6. 账号下发 IP、密码、主机名 客户收到交付信息,自助端能看到机器 财务系统 回填成功,通知发送成功
7. 收尾 实际 MAC、端口 ARP 绑定完成,流量计费开始 交换机与计费模块 绑定成功,流量池开始计数

每一步失败都要有对应的回退动作,否则机器会卡在“IP 分了但系统没装”“端口开了但没人用”的中间态。本文后半部分专门讲回退怎么设计。

云主机的流程有什么不同

云主机的开通不涉及 BMC 和交换机端口,流程短得多:财务系统调用虚拟化平台的 API,从模板克隆磁盘,创建虚拟网卡并挂到对应的网桥或 VLAN,把 IP、密码、SSH 公钥通过 cloud-init 的元数据注入,启动后几十秒内即可登录。

差别主要在三点:

维度 独立服务器 云主机
库存 一台物理机对应一笔订单,匹配靠硬件条件 看宿主机剩余 CPU、内存、存储,由调度器选宿主
网络 真实交换机端口,要下发 VLAN 和限速 虚拟网卡,安全组或流表控制,限速在宿主机上做
失败处理 要逐步回退,机器可能需要人工检查 直接销毁重建,代价很低

正因为云主机失败重建的代价低,很多团队把独立服务器的交付也往这个方向靠:装机前自动清盘、自动重置 BMC,让“重跑一次”尽可能可靠。

订单状态机:状态、事件与幂等

状态机是自动开通的骨架。订单只能处于有限的几个状态,只有特定事件能触发状态变化,每次变化伴随固定动作:

当前状态 事件 下一状态 触发的动作
待支付 支付成功回调 已支付 创建开通任务
已支付 开通任务开始 开通中 库存匹配、IP、端口、装机
开通中 全部步骤成功 使用中 回填信息、通知客户、开始计费周期
开通中 某步骤失败且重试用尽 开通失败 执行补偿动作,告警给运维
使用中 账单逾期 已暂停 关闭交换机端口或关机
已暂停 续费成功 使用中 恢复端口、开机
使用中 / 已暂停 退订或到期未续 已释放 解绑服务器、回收 IP、端口回到隔离 VLAN

两条工程上的硬规则:

  • 事件必须幂等。支付网关的回调可能重复到达,用订单号做唯一键,第二次回调直接返回成功而不重复创建任务。装机完成回调同理。
  • 状态变化先落库再执行动作。先把订单置为“开通中”并写入任务记录,再去碰 BMC 和交换机。进程中途崩溃后,重启的工作进程能从任务记录里知道做到了哪一步。

库存匹配:怎么找到合适的空闲机器

套餐定义的是一组条件:机房、线路、CPU 型号或核数、内存容量、硬盘数量与类型、带宽、IP 数量。匹配时按条件筛选,再加三条过滤:

  1. 服务器状态为“空闲”,且没有被其他正在执行的订单预占;
  2. BMC 地址可达,最近一次电源状态查询成功;
  3. 硬件自动采集的结果与套餐一致。人工录入的配置和实际硬件对不上,是交付后客户投诉“配置不符”的主要来源。

并发是这一步的难点:两笔订单同时付款,不能分到同一台机器。常见做法是在数据库里用行锁完成“查找并预占”:

BEGIN;
SELECT id FROM servers
 WHERE datacenter_id = 3 AND plan_id = 17 AND status = 'idle'
 ORDER BY id LIMIT 1
 FOR UPDATE SKIP LOCKED;
-- 假设上一条查询返回的 id 是 1024
UPDATE servers SET status = 'reserved', order_id = 'ORD-20261003-0001' WHERE id = 1024;
COMMIT;

FOR UPDATE SKIP LOCKED 让并发的事务跳过已被锁住的行,各自拿到不同的机器。没有空闲机器时,订单停在“已支付”并通知运维补货,而不是报错给客户。

网络准备:IP 分配与交换机端口

IP 分配

地址段要预先按机房、线路、类型(公网、IPMI、内网)登记,并标记哪些段参与自动分配、哪些段锁定保留。分配时从匹配机房和线路的可用段里取第一个空闲地址,同时记录该段的网关、掩码和 DNS,这些参数后面会写进装机应答文件。附加 IP 和 IPv6 子段按套餐数量一并取出。

分配动作同样要幂等:以订单号为键记录“这笔订单已分到哪些地址”,重试时直接复用,不会一次失败多占几个 IP。取址之前做一次 ARP 或 ping 探测,有响应说明地址被残留配置占着,跳过它并标记冲突。

交换机端口

服务器接在哪台交换机的哪个端口,是上架时登记的。开通时要下发三类配置:VLAN、速率上限、端口开启。装机阶段还有一个 DHCP 的问题:PXE 需要 DHCP,而生产 VLAN 里通常不放 DHCP 服务。两种常见设计:

设计 做法 优点 代价
装机 VLAN 切换 开通时端口先切到装机 VLAN(内有 DHCP、TFTP 和 HTTP 镜像源),装完切回业务 VLAN 生产网里不需要 DHCP,镜像源隔离 多一次 VLAN 切换,装机完成的判断必须准确
业务 VLAN 内中继 业务 VLAN 上配置 DHCP 中继到装机服务器,应答文件里写静态 IP 端口配置一次到位 DHCP 服务暴露在客户网段,要按 MAC 严格限制应答

以华为 S 系列为例,把端口放进 VLAN 100、双向限速 100 Mbps(cir 的单位是 kbit/s)并打开端口的配置如下。部分型号的入方向不支持 qos lr,要改用 qos car,以型号手册为准;思科设备用 switchport access vlan 100 配置 VLAN,限速通过 policy-map 实现:

interface GigabitEthernet0/0/12
 port link-type access
 port default vlan 100
 qos lr inbound cir 100000
 qos lr outbound cir 100000
 undo shutdown

下发后要回读确认:display interface GigabitEthernet0/0/12 看端口状态,display port vlan GigabitEthernet0/0/12 看 VLAN,与期望一致再进入装机。只发不读,是“端口配置成功了但机器不通网”的常见原因。

装系统与账号下发:IPMI、PXE 与应答文件

设启动项并从 PXE 引导

独立服务器的装机依赖 BMC:先把下一次启动设为 PXE,再重启。用 ipmitool 表达就是两条命令:

# 设置下一次启动从 PXE(UEFI 机器加 options=efiboot)
ipmitool -I lanplus -H 10.20.0.15 -U admin -P '密码' chassis bootdev pxe options=efiboot
# 断电重启,服务器会从 PXE 启动
ipmitool -I lanplus -H 10.20.0.15 -U admin -P '密码' chassis power cycle

PXE 侧由 DHCP 告诉网卡去哪里取引导程序。dnsmasq 的典型配置是按客户端架构区分 BIOS 和 UEFI 引导文件:

# /etc/dnsmasq.d/pxe.conf
dhcp-range=10.30.0.100,10.30.0.200,255.255.255.0,10m
# 客户端架构 7(EFI BC)和 9(EFI x86-64)都按 UEFI 处理
dhcp-match=set:efi,option:client-arch,7
dhcp-match=set:efi,option:client-arch,9
dhcp-boot=tag:efi,grubx64.efi
dhcp-boot=tag:!efi,pxelinux.0
enable-tftp
tftp-root=/srv/tftp

应答文件与完成判断

应答文件决定装机能否无人值守:RHEL 系用 Kickstart,Debian 用 preseed,Ubuntu 用 autoinstall,Windows 用 autounattend.xml。应答文件由开通流程按订单动态生成,把前面分配的 IP、网关、DNS、主机名和密码写进去,并在安装结束时回调开通服务:

# kickstart 片段(按订单生成)
network --bootproto=static --device=link --ip=103.45.12.37 --netmask=255.255.255.0 --gateway=103.45.12.1 --nameserver=103.45.0.53 --hostname=srv-0001
# 密码只写 SHA-512 哈希,不写明文
rootpw --iscrypted $6$<salt>$<hash>
# --nochroot:在安装环境里执行回调,不依赖新系统是否装了 curl
%post --nochroot
curl -fsS -X POST https://provision.example.com/callback/ORD-20261003-0001 -d status=installed
%end

装机完成的判断不要只靠一个信号。稳妥的组合是:收到 %post 回调,然后探测 SSH(Linux)或 RDP(Windows)端口可连,再用下发的密码登录一次执行 hostname。三项都过,才把订单推进到下一步。超过预设时限没有回调,就取一张 BMC 控制台截图,判断是否卡在引导菜单或磁盘错误,再决定重试还是转人工。

另一种装机路径是通过 BMC 挂载 ISO(虚拟介质)并自动应答,适合没有 PXE 环境的小机房;缺点是镜像通过 BMC 网口传输,速度通常明显低于 PXE 走业务网口。

账号下发与收尾

系统装好后,开通服务做四件事:

  1. 回填:把 IP、主机名、初始密码写回订单,财务系统的会员中心据此显示服务器信息;密码只在交付时展示一次,之后由客户自己修改。
  2. 通知:邮件或短信发送交付信息,内容不含明文密码,让客户登录会员中心查看。
  3. 绑定:从交换机学到服务器网卡的实际 MAC,做 ARP 绑定和源地址校验,防止 IP 被冒用;装机 VLAN 方案在这一步把端口切回业务 VLAN。
  4. 开始计量:把端口加入流量池,按套餐的带宽或流量口径开始计费;计费周期从交付成功的时间起算比从付款时间起算更合理,客户不会为等待装机的时间付费。

到这里订单进入“使用中”,之后的重启、重装、救援、改密码由客户在自助端完成,不再经过开通流程。

哪些环节容易失败,怎么设计回退

自动开通的难点不在正常路径,而在失败路径。下表是独立服务器交付里常见的故障点:

环节 典型失败 怎么发现 回退动作
库存匹配 没有空闲机器;机器状态是空闲但 BMC 不通 查询结果为空;电源状态查询超时 订单停在“已支付”并通知补货;BMC 不通的机器标记“待检查”,移出空闲池
IP 分配 地址段用尽;取到的地址实际在线 无可用地址;分配前探测有响应 换下一段;有响应的地址标记冲突并换一个
交换机配置 SSH 登录失败;命令在该型号上语法不同;回读不一致 下发超时或回显报错 重试一次;仍失败则端口置于隔离 VLAN 并关闭,释放 IP,机器回“待检查”
装机 PXE 没拿到 DHCP;镜像源超时;磁盘有旧 RAID 元数据;卡在引导菜单 规定时间内无回调;控制台截图 自动重试一次(先清磁盘元数据),再失败转人工,保留 IP 和端口配置以便人工接手
回填通知 财务系统接口超时 HTTP 返回非 2xx 只重试回填,不重跑装机

设计回退时遵守几条原则:

  • 补偿动作按相反顺序执行:装机失败先回收端口配置,再释放 IP,再标记机器状态。顺序反了,会出现 IP 已释放、端口还通着的窗口。
  • 不要盲目把机器放回空闲池:装机失败的机器可能有硬件问题,放回去只会让下一笔订单再失败一次。标记为“待检查”,由人确认后再放回。
  • 客户拿到信息之后不再自动回收:回填成功后发现某个后续步骤失败(例如 ARP 绑定),只告警不回滚,否则客户正在登录的机器会被收走。
  • 每步设超时,但超时后先看现场:装机耗时随镜像大小、网速和硬件自检时间变化很大,超时后先取控制台截图判断,而不是直接判定失败。
  • 多机房要有执行节点冗余:装机、采集这类任务由各机房的本地节点就近执行,某个节点离线时要能自动换节点,否则整个机房的开通都会停。

在管理系统里怎么落地

上面的流程需要财务系统和机房管理系统两端配合。Toplink 的做法是:CloudFinance 用订单状态机驱动开通、暂停与释放,付款后由专用配置模块把订单同步到 DCIM;DCIM 按套餐定义的 CPU、内存、硬盘、IP、带宽组合匹配空闲服务器,从开启了自动分配的地址段取 IP,按交换机厂商指令集下发端口配置,再通过 IPMI 重装系统,可选镜像覆盖 CentOS、AlmaLinux、Rocky、Ubuntu、Debian、Windows、ESXi 等。各机房部署从节点就近执行重装和采集,某个从节点不可用时自动挑选其他节点;重装进度在任务队列里可见。细节见 计费与自动开通、IP 地址管理 和 IPMI 远程管理。已经在用魔方财务、魔方 V10 或 WHMCS 的服务商,可以通过对接插件走同一条链路:付款即开通、回填 IP 和密码、逾期自动关机断网、续费自动恢复、退订自动解绑并释放 IP。

常见问题

独立服务器自动开通一般需要多长时间?

付款到开始装机通常只要几十秒到几分钟,主要耗时在系统安装本身,取决于镜像大小、镜像源是否在本机房以及服务器自检时间;Windows 通常比 Linux 慢。把镜像源放在机房内网、提前清理磁盘上的旧 RAID 元数据,能明显缩短时间。

没有 IPMI 的服务器能自动开通吗?

能装机但做不到全自动:没有带外管理就无法远程设置启动项和重启,失败后也看不到屏幕,只能人工到机房处理。用于自动交付的机器应当都配 BMC 并接入管理网。

云主机和独立服务器的自动开通有什么区别?

云主机由虚拟化平台的 API 克隆模板、cloud-init 注入网络和密码,几十秒完成,失败直接销毁重建;独立服务器要操作真实的 BMC、交换机和装机流程,耗时长、失败点多,回退时必须释放 IP 和端口配置。

自动开通失败时客户会看到什么?

合理的设计是订单停在“开通中”并立即通知运维,而不是把报错直接抛给客户;超过预设时限仍未成功时转人工处理,并告知客户预计交付时间。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88