多服務商 DNS 冗餘:以 OpenResty Edge 為唯一資料來源,同步給多家 DNS 服務商
2016 年 10 月 21 日,DNS 服務商 Dyn 遭到 Mirai 殭屍網路的 DDoS 攻擊,Twitter、GitHub、Netflix 等大量網站一度無法訪問。問題並不出在這些網站本身,而是使用者解析不到它們的地址。只要權威 DNS 只託管在一處,不管這一處是某家服務商還是您自建的伺服器,它一旦不可用,所有依賴它的業務都會一起下線。
多服務商 DNS 冗餘,就是讓兩家以上的服務商同時對外應答同一個區域,一家宕機,其他家繼續應答。它的難點不在於多買一家服務商,而在於冗餘和智慧解析很難兼得:能在幾家之間原樣複製的只有靜態記錄,地域排程、健康檢查這類能力沒法跟著複製過去。OpenResty Edge 的做法是分工:OpenResty Edge 繼續做權威 DNS,負責智慧排程;其他 DNS 服務商作為從伺服器,透過 AXFR 區域傳輸同步同一份區域,和 OpenResty Edge 一起對外應答,負責兜底。
本文說明這套分工如何運作,以及哪些區域適合這樣做。具體配置步驟見 OpenResty Edge 文件:DNS 區域傳送與 TSIG。
多服務商 DNS 的行業難題:冗餘與智慧解析難以兼得
遞迴解析器會在域名委派的 NS 列表裡挑一臺伺服器查詢,通常偏向響應更快的那臺,查不通就換下一臺。所以當 NS 列表裡有兩家服務商時,一家宕機,解析器會轉向另一家,解析不中斷。這個機制有一個前提:兩家必須返回相同的記錄,否則同一個域名在不同時刻、對不同使用者會解析出不同的結果。
讓幾家服務商保持一致,常見的做法有兩種:
- 多主:每家服務商都作為主伺服器,透過各家的 API 或同步工具分別寫入同一份記錄。問題在於每家的記錄型別、私有功能和介面都不一樣,時間一長,各家的配置容易出現偏差;而且每多接入一家,就多一套介面要適配和維護。
- 一主多從:只在一處寫入,其他服務商作為從伺服器,透過區域傳輸(AXFR)定期拉取完整區域。只有一個寫入點,一致性由協議保證。
無論選哪種,能在幾家之間保持一致的,都只有各家都支援的標準靜態記錄。地域排程、健康檢查、流量排程這類能力,解析結果是伺服器在收到查詢時,按查詢來源和實時狀態當場算出來的;各家的實現互不相容,區域資料裡也裝不下"怎麼算"。以 IBM NS1 為例,它的文件寫明,Filter Chain 流量排程配置和 ALIAS 等私有記錄都不會出現在對外的區域傳輸裡。結果是,為了冗餘,往往只能退回各家共有的最小功能集,放棄智慧排程。
落到業務上,這是在兩種風險之間二選一:只用一家服務商,要承擔它宕機時解析全部中斷的風險;為了冗餘退回靜態記錄,又要放棄就近訪問和故障節點自動摘除,一部分使用者會被解析到更遠、甚至已經不可用的地址。
OpenResty Edge 的做法:主伺服器負責智慧排程,從服務商負責兜底
如果您已經在 OpenResty Edge 的內建權威 DNS 裡管理區域,開啟區域傳輸後,整體架構如下:
您(Edge Admin 控制檯:編輯 → 釋出)
│
OpenResty Edge(主伺服器,唯一資料來源)
│ │ AXFR over TCP + TSIG 簽名
│ ┌─────┴─────┐
│ 從服務商 A 從服務商 B
│ │ │
└──────────┬─────────┴───────────┘
公網 NS 委派同時列出 OpenResty Edge 和各家從服務商
│
遞迴解析器 / 使用者
- 您仍然只在 OpenResty Edge 上增刪改記錄,從服務商透過 AXFR 拉取整份區域,傳輸過程可以用 TSIG 金鑰鑑權。
- OpenResty Edge 繼續照常應答公網查詢,開啟區域傳輸不影響原有的解析。公網 NS 委派同時列出 OpenResty Edge 和各家從服務商:在註冊商處保留 OpenResty Edge 的 NS,再加入各家從服務商的 NS。
這樣分工之後:
- 智慧排程照常生效。 問到 OpenResty Edge 的查詢,仍按查詢來源和實時狀態得到地域線路、閘道器排程和健康檢查的結果:健康檢查失敗的節點會自動從解析中移除,GSLB 還能按機器負載、請求速率等業務指標在叢集之間調整流量。
- 靜態記錄獲得多服務商冗餘。 各家從服務商應答同一份靜態記錄,OpenResty Edge 或任何一家服務商不可用時,其他家繼續應答。
- 從服務商可以按需增減和更換。 同步只依賴 AXFR 區域傳輸這一標準協議,不依賴任何一家的私有介面;更換從服務商時,新服務商透過區域傳輸拉取整份區域即可。
- 地域線路記錄也有兜底。 為地域線路記錄配好預設線路,從服務商就能用預設線路的結果應答。
- 兜底時間充足。 OpenResty Edge 生成的 SOA 中,expire 預設為 604800 秒(7 天),可以按需調整。從伺服器每次成功重新整理後,在這段時間內都能用手上的副本繼續應答,即使 OpenResty Edge 暫時不可用。
落到業務上,冗餘不必再以犧牲訪問體驗為代價:平時使用者仍被引導到就近、健康的閘道器叢集;任何一家服務商出故障,都不會再像 Dyn 事件那樣讓業務整體下線;更換服務商不需要遷移或重新錄入記錄,業務也就不會被某一家服務商繫結;即使 OpenResty Edge 本身出現故障,團隊也有充足的時間排查和恢復,對外解析不會中斷。
把唯一資料來源放在 OpenResty Edge 上,還有四點好處:
- 所有改動都經過許可權控制。 DNS 應用按使用者組授權,可以把讀寫許可權分開;普通使用者預設看不到 DNS 功能,也看不到未授權給其使用者組的 DNS 應用,詳見在 OpenResty Edge 中管理 DNS 應用的訪問許可權。
- 改動有版本記錄,釋出後才生效。 OpenResty Edge 從 25.9.17 版開始對 DNS 配置做版本控制,區域傳輸配置也和記錄一樣,釋出後才下發到節點。
- serial 自動維護。 從伺服器透過比較 SOA 中的 serial 判斷區域有沒有更新。如果自建主伺服器,這個數字要由人或指令碼負責遞增,一旦漏掉,從伺服器就不會拉取新資料。OpenResty Edge 會自動維護 serial,並且只在可傳輸的內容確實變化時才在釋出時遞增,從伺服器因此能可靠地判斷需不需要重新拉取。
- 唯一資料來源本身也有保護。 DNS 應用和其他應用的配置一樣存放在 Edge Admin 資料庫中,OpenResty Edge 為它提供異機定時備份、主從流複製和自動故障轉移三層保護,詳見 OpenResty Edge 資料庫備份與故障轉移。
對團隊來說,這意味著 DNS 可以像其他生產配置一樣被治理:多個團隊共用一個平臺時各管各的區域,不會誤改別人的記錄;改動不會在編輯時就影響線上解析,事後也能追溯每一次變更;從服務商不會悄悄停在舊資料上,少了一類難以察覺的故障;而把資料集中到一處,也不等於把風險集中到一處。
哪些區域適合這樣做
- 需要應對整家 DNS 服務商宕機風險的區域;
- 以靜態記錄為主,或地域線路記錄都配有預設線路的區域。
結語:冗餘、智慧排程和治理,不必再三選二
DNS 是所有業務的第一跳。過去要在這一跳上做冗餘,就得在幾家服務商之間退回共有的最小功能集,智慧排程和統一治理都要讓步。以 OpenResty Edge 為唯一資料來源之後,這筆賬可以換一種演算法:
- 智慧排程只需要建設一處。 地域線路、健康檢查和 GSLB 都集中在 OpenResty Edge,從服務商只需提供標準的從伺服器能力,不必在每家重複採購、重複配置智慧 DNS。
- 不被任何一家服務商繫結。 從服務商透過標準協議同步,可以按需增減和更換,不需要遷移記錄。
- 治理成本不隨服務商數量增加。 不管接入幾家,改動都只在 OpenResty Edge 上經過同一套許可權、版本和釋出流程。
- DNS 和閘道器在同一個平臺。 記錄直接解析到閘道器叢集,節點健康狀態直接反映在解析結果裡,DNS Flood 防護也內建其中,不用在 DNS 和閘道器兩套系統之間來回對齊。
這套架構尤其適合以下場景:
- 解析中斷即營收中斷的線上業務,如電商、線上支付和遊戲:服務商級故障時其他家繼續應答,平時仍保留就近訪問。
- 多地域、多叢集部署的業務:地域排程和跨叢集容災是核心能力,不能為了冗餘而放棄。
- 自建私有 CDN 的企業:OpenResty Edge 作為權威 DNS 承接私有 CDN 的入口,多服務商冗餘保護的正是整張邊緣網路的第一跳。
- 多團隊共用、對變更審計有要求的組織,如金融和政企:每個團隊只管自己的區域,每一次改動都有記錄可追溯。
建議先挑一個靜態記錄為主、流量不大的區域,接入一家從服務商,按文件完成配置,用 dig 對比 OpenResty Edge 和從服務商的應答,確認一致後,再在註冊商處把從服務商加入 NS 委派。
常見問題
OpenResty Edge 可以作為 Cloudflare Secondary DNS 的主伺服器嗎?
可以。OpenResty Edge 26.9.1-1 起支援 AXFR 區域傳輸和 TSIG 鑑權,可以作為 Cloudflare Secondary DNS 等從服務商的主伺服器。Cloudflare 的區域傳輸功能只對 Enterprise 客戶開放。
接入從服務商後,OpenResty Edge 的地域解析和 GSLB 還能用嗎?
能。OpenResty Edge 仍在公網 NS 列表裡,照常按查詢來源和實時狀態應答地域線路、閘道器排程和健康檢查記錄。從服務商同步的是區域中的靜態記錄,負責在任何一家不可用時繼續應答。
接入從服務商後,需要把 OpenResty Edge 隱藏起來嗎?
不需要。智慧排程只在 OpenResty Edge 自己應答時生效,從服務商同步到的是靜態記錄和預設線路。讓 OpenResty Edge 和從服務商一起列在公網的 NS 委派裡,問到 OpenResty Edge 的查詢就能得到就近、健康的排程結果,任何一家不可用時再由其他家繼續應答。
關於 OpenResty Edge
OpenResty Edge 是一款專為微服務和分散式流量架構設計的全能型閘道器軟體,由我們自主研發。它集流量管理、私有 CDN 構建、API 閘道器、安全防護等功能於一體,幫助您輕鬆構建、管理和保護現代應用程式。OpenResty Edge 擁有業界領先的效能和可擴充套件性,能夠滿足高併發、高負載場景下的苛刻需求。它支援排程 K8s 等容器應用流量,並可管理海量域名,輕鬆滿足大型網站和複雜應用的需求。
→ 權威 DNS 只是 OpenResty Edge 的能力之一,其餘能力見甚麼是 OpenResty Edge。
關於作者
章亦春是開源 OpenResty® 專案創始人兼 OpenResty Inc. 公司 CEO 和創始人。
章亦春(Github ID: agentzh),生於中國江蘇,現定居美國灣區。他是中國早期開源技術和文化的倡導者和領軍人物,曾供職於多家國際知名的高科技企業,如 Cloudflare、雅虎、阿里巴巴, 是 “邊緣計算“、”動態追蹤 “和 “機器程式設計 “的先驅,擁有超過 22 年的程式設計及 16 年的開源經驗。作為擁有超過 4000 萬全球域名使用者的開源專案的領導者。他基於其 OpenResty® 開源專案打造的高科技企業 OpenResty Inc. 位於美國矽谷中心。其主打的兩個產品 OpenResty XRay(利用動態追蹤技術的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最適合微服務和分散式流量的全能型閘道器軟體),廣受全球眾多上市及大型企業青睞。在 OpenResty 以外,章亦春為多個開源專案貢獻了累計超過百萬行程式碼,其中包括,Linux 核心、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,並編寫過 60 多個開源軟體庫。
關注我們
如果您喜歡本文,歡迎關注我們 OpenResty Inc. 公司的部落格網站 。也歡迎掃碼關注我們的微信公眾號:
翻譯
我們提供了英文版和中文版(本文)。我們也歡迎讀者提供其他語言的翻譯版本,只要是全文翻譯不帶省略,我們都將會考慮採用,非常感謝!




















