IDC 業務與選型

IDC 自動開通是怎麼實現的:從下單到交付的完整流程

IDC 自動開通的核心是一台訂單狀態機:付款事件觸發庫存匹配,然後按固定順序執行 IP 分配、交換器連接埠配置、透過 IPMI 設定 PXE 啟動並重灌系統,最後把 IP 和密碼回填給客戶。每一步都要能判斷成功與否,失敗時沿原路釋放資源,機器才不會卡在“半開通”狀態。

作者 頂聯產品團隊發布於 9 分鐘閱讀

自動開通是一條固定順序的流水線

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