AWS Route 53 別名記錄更改耗時過長
我在 AWS Cloudformation 中設置了一個堆棧,該堆棧已啟動並正在執行。該堆棧包含一個 ELB(負載均衡器)和一些 EC2 實例。當我們對應用程序進行新部署時,我們會建構一個新環境並刪除舊環境。因此,我們必須更新 Route 53 中的 DNS 記錄。我想知道舊堆棧應該存活多久。
我已按照AWS 文件使用子域而不遷移父域。父域 NS 記錄(朝向 AWS DNS)的 TTL 為
3600
. 在 Route 53 中,我設置了一個 A 記錄,其中包含堆棧中負載均衡器的別名(我無法在此處設置 TTL)。我無法從 AWS 控制台輸入別名記錄的 TTL。然而,一些消息來源稱,更改可能需要長達60 秒。
我只是在本地做了一些測試,以檢查 DNS 獲取新堆棧需要多長時間。這是更新 Route 53 中的別名 DNS 記錄和能夠在我的瀏覽器中訪問新堆棧之間的時間:
- 嘗試#1:~4 分鐘
- 嘗試#2:~9 分鐘
- 嘗試#3:~7 分鐘
- 嘗試#4:~15 分鐘
這不應該在60秒以下嗎?對所有客戶來說,這可以花費的最長時間是多少?可以減少這個時間嗎?什麼是刪除舊堆棧的安全時間?
首先,重要的是要認識到記憶體在客戶端或其 DNS 解析器上的 DNS 記錄都不受您的控制(請注意,我指的是 DNS 記錄而不是您的權威名稱伺服器)。因此,由客戶端及其 DNS 解析器來尊重您的 TTL。
如果新訪問者以前從未訪問過您的站點,並且其 DNS 解析器沒有記憶體您的記錄(或訪問時間足夠長以至於記憶體已過期),他們將立即看到新記錄。
這不應該在60秒以下嗎?
應該,但前提是您的客戶遵守 TTL。一些客戶端有最小的 TTL,一些網路也有一個 DNS 解析器,它可能會記憶體結果。
可以減少這個時間嗎?
您必須記住,您的大多數訪問者(假設這是一個公共站點)不會像您那樣每隔幾秒鐘就坐在那裡載入您的站點。您的大多數訪問者最近可能不會訪問該站點,並且他們的 DNS 解析器可能沒有記憶體中的記錄。大多數 DNS 解析器應該尊重您的 TTL,但您不能保證這一點。
什麼是刪除舊堆棧的安全時間?
您最好根據舊堆棧仍在提供哪些流量而不是 DNS TTL 來判斷這一點。如果您使用的是 ELB,您應該能夠在 cloudwatch 中查看舊 ELB 每秒處理的請求數。等到它低於可接受的水平,然後將其刪除。
為了在切換後立即查看新堆棧,我建議您手動刷新本地 DNS 記憶體。讓您自己的客戶自然地使記錄過期以查看需要多長時間可能並不表示其他客戶需要多長時間。
編輯,我注意到Google的公共 DNS 有一個工具可以讓你刷新記憶體:
https://developers.google.com/speed/public-dns/cache
這可能會加快速度,因為很大一部分客戶可能會使用它。