這個故障轉移方案會起作用嗎?
我有兩個複制的 LAMP 伺服器,一個作為從屬伺服器,另一個作為主伺服器:
Master: Name = master.kimsufi.com - IP = 5.5.5.1 Slave: Name = slave.kimsufi.com - IP = 5.5.5.2
(如您所見,兩者都在 kimsufi 註冊)
有了這些伺服器並且沒有額外的 IP 地址,我的目的是託管一個帶有 Master 的www.domain.com,以防萬一它無法將控制權轉移到從屬伺服器(我知道有像 Heartbeat 這樣的軟體允許這樣做但需要一個虛擬 IP,它是一個額外的 IP 地址,而 Kimsufi 不允許這樣做)。
我正在考慮這個問題並“找到”了一個我確定無效的可能解決方案,因為我還沒有發現它在任何地方發布(而且我的網路知識很低)。也許你可以幫我看看問題。
想法是在每台伺服器中添加一個DNS伺服器,並將slave配置為備用伺服器,以防Master無法解析。或多或少的想法是在註冊domain.com中設置如下內容:
Primary DNS: Master (5.5.5.1) Secondary DNS: Slave (5.5.5.2)
然後,Master伺服器將照常配置,將他的bind9服務指向Master伺服器:
$TTL 86400 @ IN SOA master.kimsufi.com. user.gmail.com. ( 2014011302 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 604800 ; expire, seconds 86400 ) ; minimum, seconds ; domain.com. 86400 A 5.5.5.1 domain.com. NS master.kimsufi.com. domain.com. NS slave.kimsufi.com. www 86400 A 5.5.5.1
還有奴隸:
$TTL 86400 @ IN SOA slave.kimsufi.com. user.gmail.com. ( 2014011304 ; serial, todays date + todays serial # 28800 ; refresh, seconds 7200 ; retry, seconds 604800 ; expire, seconds 86400 ) ; minimum, seconds ; domain.com. 86400 A 5.5.5.2 domain.com. NS master.kimsufi.com. domain.com. NS slave.kimsufi.com. www 86400 A 5.5.5.2
因此,如果您嘗試對此進行探勘,您將得到如下資訊:
ivan@local:~$ dig domain.com NS ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> domain.com NS ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33268 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;domain.com. IN NS ;; ANSWER SECTION: domain.com. 86400 IN NS master.kimsufi.com. domain.com. 86400 IN NS slave.kimsufi.com. ;; Query time: 87 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Wed Jan 14 15:30:11 2015 ;; MSG SIZE rcvd: 78
這個想法是,由於Master是主名稱伺服器,它將處理對domain.com的任何查詢,但如果它處於離線狀態,則由 Slave完成這項工作。
我還沒有測試過,這只是一個想法(目前我只在 kimsufi 擁有一台伺服器)。是否可以?這個方案有哪些失敗之處?
首先,您需要正確設置您的 dns 伺服器。
您的設置有點不正統,它可能會在標準檢查中失敗(例如,您的 SOA 記錄在服務於該區域的所有名稱伺服器上必須相同)
設置主/從 DNS 伺服器的正確方法是設置主伺服器並將從伺服器配置為 AXFR,將區域從主伺服器傳輸到它。
因此**,兩台DNS 伺服器都將隨時為請求提供服務,並且對區域的任何更改都應僅**在主伺服器上完成。進行任何更改後,您只需在主伺服器上重新載入區域,它也會自動傳輸到從伺服器。
網上有很多關於如何使用主/從配置設置任何 DNS 伺服器的教程。
使用帶有區域傳輸的標準主/從配置,您不必擔心 DNS 級別的故障轉移。
這些由 DNS 協議本身自動處理。
因此,如果一個名稱伺服器出現故障,查詢您的域的 DNS 解析器將自動轉到下一個可用的名稱伺服器(在您的區域文件的 NS 記錄中定義)
現在要為您的 HTTP 流量提供服務,您只需添加 2 個 A 記錄,指向 2 個伺服器的 IP。
domain.com. 86400 A 5.5.5.1 domain.com. 86400 A 5.5.5.2 www 86400 A 5.5.5.1 www 86400 A 5.5.5.2
這樣,當瀏覽器想要連接到網站時,它會看到有 2 個 IP 服務於該網站,它會選擇 DNS 伺服器響應的第一個。如果該 IP 沒有響應任何請求,那麼它將自動嘗試下一個請求。
如果 IP 正在工作,然後突然停止響應請求,情況也是如此。瀏覽器會自動切換到下一個IP(當然第一次會有延遲)
本質上,擁有 2 A 記錄,您可以獲得高可用性/冗餘和負載平衡,因為 DNS 伺服器將以循環方式為客戶端提供 IP。
請記住,儘管上述設置要求兩個伺服器具有完全相同的內容來提供服務。
因此,如果您的網站是動態的,帶有數據庫後端,您可能必須配置數據庫主-主複製、複製會話的方式(如果這對網站很重要)以及復製文件的某種方式。
同樣,這高度依賴於您的網站,因此沒有萬能的解決方案