Linux

這個故障轉移方案會起作用嗎?

  • January 14, 2015

我有兩個複制的 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。

請記住,儘管上述設置要求兩個伺服器具有完全相同的內容來提供服務。

因此,如果您的網站是動態的,帶有數據庫後端,您可能必須配置數據庫主-主複製、複製會話的方式(如果這對網站很重要)以及復製文件的某種方式。

同樣,這高度依賴於您的網站,因此沒有萬能的解決方案

引用自:https://serverfault.com/questions/659451