利用DNS服務平滑切換網路服務

假設服務域名為example.domain, 原伺服器 IP 位址為A, 由於伺服器遷移或 IP 更換, 新伺服器 IP 位址為B, 為了保證使用者無感知, 可以透過 DNS 服務平滑切換網路服務.

  1. 原服務狀態, example.domain 解析到 IP 位址A
  2. 過渡狀態, example.domain 解析到 IP 位址AB
  3. 新服務狀態, example.domain 解析到 IP 位址B, 移除 IP 位址A

說明: 當使用者獲得兩個解析位址時, 客戶端會選擇其中一個位址進行連線, 當連線失敗時, 會嘗試其它位址, 以此保證服務的可用性.

由於 DNS 解析存在快取, 為了保證平滑切換, 需要在過渡狀態保持一段時間, 以確保所有快取失效.

我這裡需要遷移的是 dns 服務, 可以在過渡狀態中設定DNS重寫, 加快遷移過程.

A 服務重寫規則:

A服務重寫

B 服務重寫規則:

B服務重寫

原遷移過程拓展為:

  1. 原服務狀態, example.domain 解析到 IP 位址A
  2. 過渡狀態, example.domaindns A服務中重寫到AB, 在dns B服務中重寫到B
  3. 新服務狀態, example.domain 解析到 IP 位址B, 移除 IP 位址A

當使用者仍在使用dns A服務時, 可以獲得兩個位址, 有一半的機率會選擇dns A服務.
另外一半的機率會切換到dns B服務, dns B服務故障時切換回dns A. dns B服務未故障時, 將只會獲得一個位址, 因而使用者會停留在dns B服務中.
這樣我們可以逐步的減少dns A服務的資源消耗, 而不是直接停止, 實現更平滑的遷移.