資料庫副本佈局設計

 

適用版本: Exchange Server 2010 SP2, Exchange Server 2010 SP3

上次修改主題的時間: 2010-11-11

針對信箱伺服器設計高可用性解決方案時,您需要確保多項基礎結構元件的高可用性,包括:

  • 基礎結構服務,例如 Active Directory 和網域名稱系統 (DNS)

  • 資料庫可用性群組 (DAG) 成員伺服器

  • 個別儲存元件,例如磁碟、儲存控制器和儲存架

  • 個別網路元件,例如路由器、交換器和彙總工具

  • 伺服器和儲存機架

  • 電源匯流排

  • 資料中心

上述每個元件區域均代表可能的失敗點,這有時也稱為*「故障領域」*。因此,DAG 的可用性等級最終取決於您如何設計解決方案,以隔離並盡量減少其中一個領域發生故障對於 DAG 環境造成的負面影響。若要讓故障領域彼此獨立,每個故障領域都必須有一份資料庫副本。此外,由於發生故障會導致多個副本無法使用,因此每個故障領域需要的副本不超過一個。

例如,假設您有兩個資料庫副本。兩個副本各儲存在不同一組的磁碟上,但都位於相同的儲存陣列內。如果儲存陣列故障或因故無法使用,則兩個副本都將無法使用。在這個範例中,故障領域是儲存陣列。每個信箱資料庫在陣列中只能有一個副本。否則,如果陣列故障,多個 (或許全部) 資料庫副本將無法使用。

規劃信箱架構時,請考量下列額外的設計重點:

  • 您是否會部署多個資料庫副本?

  • 您將部署多少個資料庫副本?

  • 您是否會有站台復原架構?

  • 您將部署哪種類型的信箱伺服器復原模型?

  • 您將部署多少個信箱伺服器?

  • 您將採用哪種備份模型?

  • 您將採用哪種儲存架構?

如需如何針對這些問題進行規劃的相關資訊,請參閱瞭解高可用性的因素

目錄

不平衡的資料庫副本配置

設計平衡的資料庫副本配置

發生伺服器故障時,示範案例中的主動資料庫分配

設計案例

要尋找與高可用性和站台恢復相關的管理工作嗎?請參閱管理高可用性及站台恢復

不平衡的資料庫副本配置

為瞭解如何在 DAG 內分配資料庫副本,下面將以 Contoso, Ltd 針對其高可用性信箱伺服器解決方案規劃的 DAG 設計為例進行說明。Contoso 正在建立 DAG,其中包含:

  • 4 個信箱伺服器

  • 20 個信箱資料庫

  • 每個信箱資料庫的 2 個副本

所有伺服器都部署在單一資料中心裡,每個伺服器都有其專用的儲存設備,且每個伺服器都部署在其伺服器機架中。

Contoso 需要兩個高可用性資料庫副本 (例如非延遲) 隨時可用,而且解決方案能夠承受兩個 DAG 成員同時停機,而不會對資料庫的可用性造成負面影響。

根據這些需求,使用的資料庫副本配置顯示在下圖中。

初始資料庫副本配置

資料庫副本佈局表格 1

此設計一開始看起來很完善,因為它會將每個資料庫的主動副本散發到四個 DAG 成員。不過,此設計有其問題。這種配置從伺服器資源的角度來說不是很理想。例如,若有一部伺服器發生故障,就會導致資料庫的分配不均,如下圖所示。

一部伺服器故障後的資料庫副本配置

單一伺服器故障後的資料庫副本配置

Server4 故障會導致 Server1 上的資料庫 DB16 至 DB20 啟動,而不會分配到其餘三個伺服器。結果是啟動的信箱資料庫分配不均,而且伺服器資源的使用率也不均。相較於其餘兩個伺服器 (Server2 和 Server3),Server1 的使用率變成兩倍。

另一個問題是,DAG 沒有包含足夠的副本來應付兩部伺服器同時停機。若有另一部伺服器再發生故障,可能導致 50% 的資料庫無法使用。如果 Server1 和 Server4 同時故障或無法使用,則會有 10 個資料庫無法使用,如下圖所示。

雙伺服器故障後的資料庫副本配置

雙伺服器故障後的資料庫副本配置

這種設計無法滿足能夠承受雙伺服器故障的核心需求。為了承受雙伺服器故障並維護所有主動資料庫,必須部署第三個副本,而且必須設計新配置。

回到頁首

設計平衡的資料庫副本配置

為了設計平衡的資料庫副本配置,您可能需要回顧幾個設計決策,以產生最理想的設計。規劃資料庫副本配置時,請使用下列設計原則:

  • 確定將資料庫副本彼此隔離開來,而且放置在不同的故障領域中,儘可能減少信箱資料庫發生多個資料庫副本失敗。例如,請勿將特定信箱資料庫的多個資料庫副本放置在同一個伺服器機架內或相同的儲存陣列中。

  • 以一致的分配方式配置資料庫副本,確定在發生故障後,主動信箱資料庫能夠平均分配。在任何特定伺服器上,每個資料庫副本的啟動喜好設定總和應相等或接近相等。這樣一來,假設複寫狀況良好且為最新,則在發生故障後,就可以進行相當於平均的分配。

建置組塊

為遵守前述設計原則,建議您將資料庫副本進行特別編排,以確保所有主動副本都能平均分配到數量不限的伺服器上。這種資料庫副本編排是以*「建置組塊」*概念為基礎。

第一個建置組塊 (稱為第 1 層建置組塊) 以將主控主動資料庫副本的信箱伺服器數量為基礎。假設此數字是 NN 不只定義信箱伺服器的數量,還定義了該建置組塊內的資料庫數量。一個主動資料庫副本會分配到各伺服器上,形成對角線模式。前面的範例有 4 個信箱伺服器和 20 個信箱資料庫。第一個第 1 層建置組塊的大小是 4,如下圖所示。

第 1 層建置組塊

第 1 層建置組塊

其餘的第 1 層建置組塊集均會重複相同的模式。由於有 20 個資料庫,因此會有 5 個第 1 層建置組塊集,如下圖所示。

20 個資料庫分成五個第 1 層建置組塊

二十個資料庫分成五個第 1 層建置組塊

當您新增第二個資料庫副本時,會以不同的方式放置在每個建置組塊集中。由於已有一部伺服器主控主動副本,因此有 N – 1 部伺服器可供主控第二個資料庫副本。在使用這些 N – 1 部伺服器一輪後,就有了一套完整的平均分配方式,可形成更大的新建置組塊。因此,新的建置組塊 (稱為第 2 層建置組塊) 大小就變成 N × (N – 1) 個資料庫。這表示第一個資料庫的第二個資料庫副本會放在第二部伺服器上,爾後的每個第二個副本會在建置組塊內以對角線模式部署。在第一個第 1 層建置組塊集內的模式完成後,下一個組塊放置第二個副本的開始位置會往後推一個,因此第二個副本會從第三部伺服器開始放置。

在此範例中,建置組塊大小現在變成 4× (4 – 1) = 4× 3 = 12,這表示 12 個資料庫將組成各個第 2 層建置組塊集。針對第 1 層建置組塊集 1 (DB1 至 DB4),DB1 的第二個副本會放置在 Server2,而針對第 1 層建置組塊 2 (DB5 至 DB8),DB5 的第二個副本則會放置在 Server3。每個第 1 層建置組塊集開始放置的伺服器是比前一個第 1 層建置組塊集往後推一個的伺服器。以此類推,DB9 的第二個副本便是放置在 Server4。這可確保在 Server1 發生故障時,會啟動所有其餘三部伺服器上的第二個副本,而不是啟動同一部伺服器上的多個資料庫。

具有三個第 1 層建置組塊的第 2 層建置組塊

具有 3 個第 1 層組塊的一個第 2 層建置組塊

其餘的所有第二個建置組塊集均會重複此模式。由於有 20 個資料庫,因此在此範例中有兩個第 2 層建置組塊集。請注意,DB13 的第二個副本會放置在 Server2 上。

具有其餘兩個第 1 層建置組塊的第 2 層建置組塊

具有其餘 2 個組塊的第 2 層建置組塊

為了進一步瞭解此邏輯,請比較 DB1、DB5 和 DB9 的資料庫副本放置方式。這些資料庫在 Server1 均存放有一個主動副本。如果 Server1 故障,您希望在其餘的不同伺服器上啟動第二個資料庫副本,以達到平均負載分配。為達此目的,您可以將 DB1 的第二個資料庫副本放置在 Server2,DB5 的第二個資料庫副本放置在 Server3,以及 DB9 的第二個資料庫副本放置在 Server4。從 DB13 開始,只要重複此模式即可。其餘資料庫副本會以對角線模式新增,如下圖所示。

平均分配的資料庫副本放置方式

平均分配的資料庫副本放置方式

請注意,第二個建置組塊 (DB13 至 DB20) 只包含 8 個資料庫,而非 12 個。因此,如果發生單一故障,此設計並無法達到完全平均的狀態。為提供完全平均分配,規劃架構時,資料庫數量應為最大建置組塊大小的倍數 (在此範例中,理想的數目為 24、36、48 或 60 個資料庫,以此類推)。

當您新增第三個資料庫副本時,一樣必須以不同的方式放置在現在為 N × (N – 1) 個資料庫的每個群組。由於您現在只有 N – 2 個伺服器可供選取放置第三個資料庫副本,因此這會產生 N – 2 種變化方式。新的建置組塊 (稱為第 3 層建置組塊) 變成 N × (N – 1) × (N – 2) 個資料庫。因此,第一個資料庫的第三個資料庫副本會放置在第三部伺服器上,爾後的每個第三個副本會根據這個新的建置組塊內的開始位置,以對角線模式部署。在第一個第 1 層建置組塊集內的模式完成後,開始位置會往後推一個,因此第三個副本會放在第四個位置。

在此範例中,建置組塊現在變成 4 × (4 – 1) × (4 – 2) = 4 × 3 × 2 = 24,這表示 24 個資料庫將組成各個第 3 層建置組塊集。為產生對稱的資料庫放置模式,請將 DB1 的第三個資料庫副本放置在 Server3 上 (這是第一個可用的伺服器,因為 Server1 存放第一個副本,且 Server2 存放第二個副本),每增加一個副本就往後推一個伺服器,直到達到第 1 層建置組塊集 1 的結尾。針對下一個建置組塊集,同樣將第三個資料庫副本放置在下一個可用的伺服器 (Server4) 上,以此類推,直到達到 DB12,也就是第 2 層建置組塊集 1 的結尾。針對 DB13 至 DB20,請依相同模式操作,但將第三個資料庫副本放置的伺服器往後推一個,以免與 DB1 至 DB12 放置在相同的伺服器上。

具有三個資料庫副本和四個伺服器的平衡配置

具有三個副本和四個伺服器的平衡配置

同樣地,為進一步瞭解此邏輯,請比較資料庫 DB1 至 DB13 的資料庫副本放置。這些資料庫在 Server1 存放有主動資料庫副本,在 Server2 存放第二個資料庫副本。如果這些伺服器故障,您希望在其餘的不同伺服器上啟動第三個資料庫副本,以達到平均負載分配。為達此目的,您可以將 DB1 的第三個資料庫副本放置在 Server3,DB13 的第三個資料庫副本放置在 Server4。接著 DB2 和 DB14、DB3 和 DB15 以及後面的副本均比照相同模式放置。從 DB25 開始,只要重複上述模式即可 (此範例僅以有限的資料庫數量來說明)。

請注意,第三個建置組塊 (DB1 至 DB20) 只包含 20 個資料庫,而非 24 個資料庫。因此,如果發生雙故障,此設計並無法達到完全平均的狀態。同樣地,為提供完全平均分配,規劃架構時,資料庫數量應為最大建置組塊大小的倍數 (在此範例中,理想的數目為 24、48 或 72 個資料庫,以此類推)。

當您新增第四個資料庫副本時,一樣必須以不同的方式放置在現在為 N × (N – 1) × (N – 2) 個資料庫的每個群組。新的建置組塊變成 N × (N – 1) × (N – 2) × (N – 3) 個資料庫。這使用相同的邏輯方法,可確保在三部伺服器故障的情況下,新建置組塊內的資料庫分配平均。

在這個四部伺服器的範例中,只剩下一種變化方式來放置第四個資料庫副本 (只剩下一部伺服器可用)。因此,建置組塊大小實際上還是維持在 24。這也可以很明顯從使用建置組塊大小公式看出來:4 × 3 × 2 × (4 – 3) = 4 × 3 × 2 × 1 = 24。

當您繼續新增更多的資料庫副本時,建置組塊會持續成長,建置組塊大小的一般公式便成為 Perm(N,M) = N × (N – 1) … (NM + 1) = N!/(NM)!= CNMM!,其中 N = 伺服器數量,M = 資料庫副本數量。當您在 N 個可用伺服器上選取 M 個資料庫副本的所有可能排列組合,實現資料庫副本的完全平均分配時,這就變得很顯而易見。

使用此方法時,有幾點要注意:

  • 若部署的資料庫數量不是最大建置組塊大小的倍數,在發生故障事件時,會導致主動資料庫分配不均。

  • 若部署架構來減少多個領域故障,在發生故障事件時,可能會導致主動資料庫分配不均。這是因為故障領域定義會對資料庫副本放置方式造成限制,而破壞了模式的對稱性。

  • 若部署會產生站台外資料庫*移轉事件的站台復原解決方案,在發生主要資料中心伺服器故障事件時,次要資料中心中啟動的資料庫可能會出現分配不均的情況。

回到頁首

發生伺服器故障時,示範案例中的主動資料庫分配

以前面的範例為例,若發生單一伺服器故障 (例如 Server4 故障),主動信箱資料庫會依下圖所示分配。DB4、DB8、DB12、DB16 和 DB20 的第二個副本會啟用,以橘色字體標示為 Active。

單一伺服器故障後的主動資料庫副本分配

故障後的主動資料庫副本分配

如果發生雙伺服器故障 (多個資料庫的第三個副本會啟用,並以綠色字體標示為 Active),其餘兩部伺服器 Server1 和 Server3 會有相同數量的啟動信箱資料庫。

雙伺服器故障後的主動資料庫副本分配

雙故障後的主動副本分配

不過,由於這個範例中的資料庫數量不是最大建置組塊 (24 個資料庫) 的倍數,因此發生雙伺服器故障事件之後,不一定能夠形成平均分配。

不同的雙伺服器故障後的主動資料庫副本分配

不同故障後的主動副本分配

回到頁首

設計案例

為瞭解資料庫副本配置的設計原則,包括相關的數學公式,以下將以其他兩個架構配置為例。

設計案例:主動/被動使用者分配站台復原解決方案

在此案例中,Contoso 決定部署下列架構:

  • DAG 延伸到兩個資料中心,以主動/被動使用者分配模型運作。

  • 每部伺服器均部署在不同的伺服器機架中。

  • 每部伺服器的儲存設備與資料中心裡其他伺服器的儲存設備隔離。

  • 每個資料中心有四部信箱伺服器。

  • 總共有 24 個信箱資料庫。

  • 目的是有四個高可用性資料庫副本,並能承受雙伺服器故障或單一資料中心故障。

在此範例中,第 1 層建置組塊是 4,資料庫則分成四個一組,而主動副本會分配到建置組塊內的四部伺服器。

第一個副本平均分配到一個建置組塊

在建置組塊中平均分配資料庫

針對存放有主動副本的每部伺服器,第二個資料庫副本會繼續以對角線的模式 (因為每個副本均彼此隔離開來),儘可能平均分配到所有其餘的成員伺服器。在此範例中,第 2 層建置組塊變成 12,成為每 12 個資料庫重複一次的組合。

第二個副本平均分配到一個建置組塊

跨組塊平均分配第二個副本

由於這個站台復原解決方案是針對主動/被動使用者分配模型所設,而且兩個資料中心的伺服器和資料庫副本數量相同,因此會使用第 1 層建置組塊值 4,將第三個資料庫副本以對角線模式放置到 Server5 和 Server6。這可確保 Server5 和 Server6 鏡像複製 Server1 至 Server4 上的第一個資料庫副本放置方式。

第三個副本平均分配到第二個建置組塊

跨組塊平均分配第三個副本

由於這個站台復原解決方案是針對主動/被動使用者分配模型所設,而且兩個資料中心的伺服器和資料庫副本數量相同,因此會使用第 2 層建置組塊值 12,將第四個資料庫副本以對角線模式放置到 Server5 和 Server6。這可確保 Server5 和 Server6 鏡像複製 Server1 至 Server4 上的第二個資料庫副本放置方式。

第四個副本平均分配到第二個建置組塊

跨組塊平均分配第四個副本

如果發生單一伺服器故障,主要資料中心的其餘三部伺服器會有相同數量的啟動信箱資料庫 (每部伺服器 8 個)。

單一伺服器故障後的主動資料庫副本分配

伺服器故障後的主動副本分配

如果兩部伺服器同時故障,主要資料庫中心的其餘兩部伺服器會有相同數量的啟用信箱資料庫 (每部伺服器 10 個),而且次要資料中心將啟動 4 個資料庫。

雙伺服器故障後的主動資料庫副本分配

雙故障後的主動副本分配

設計案例:多個失敗網域

在此範例中,Wingtip Toys 決定部署下列架構:

  • 所有伺服器均部署在單一資料中心裡。

  • 伺服器分成三個一組。

  • 每組三部伺服器連同儲存設備放置在相同的機架中。

  • 總共有 3 個機架和 9 部伺服器。

  • 總共有 18 個信箱資料庫。

  • 目的是有三個高可用性資料庫副本,並能承受兩部成員伺服器故障或一個機架故障。

在此範例中,第 1 層建置組塊是 6,資料庫則分成 6 個一組,而主動副本會分配到建置組塊內的六部伺服器。

第 1 層建置組塊的資料庫副本配置

第 1 層建置組塊的資料庫副本配置

針對存放有主動副本的每部伺服器,第二個資料庫副本會儘可能分散到所有其餘成員伺服器,同時確保相同資料庫的兩個副本不會放置到相同的機架中。此範例不會使用第 2 層建置組塊公式 N × (N – 1),而是使用 N × (N – 2) 公式來確保相同資料庫的兩個副本不會放置到相同的機架中。這表示第 2 層建置組塊是 6 × 4 = 24。

第一個和第二個副本的資料庫副本配置

第一個和第二個副本的資料庫副本配置

第三個資料庫副本會以對角線模式放置在伺服器上,一樣是確保相同資料庫的多個副本不會放置在相同的機架中。此範例不會使用第 3 層建置組塊公式 N × (N – 2),而是使用 N × (N – 2) × (N – 4) 公式來確保相同資料庫的兩個副本不會放置到相同的機架中。這表示第 3 層建置組塊是 6 × 4 × 2 = 48。

第一個、第二個和第三個副本的資料庫副本配置

三個副本的資料庫副本佈局

如果發生單一伺服器故障,主要資料中心的其餘五部伺服器會有數量幾乎相同的啟動信箱資料庫。四部伺服器將各有 10 個啟動的資料庫,而一部伺服器 (機架夥伴) 將會有 8 個啟動的資料庫。

單一伺服器故障後的主動資料庫計數和配置

故障後的主動資料庫計數和配置

如果兩部伺服器同時故障 (不同機架),其餘四部伺服器會有數量幾乎相同的啟動信箱資料庫。

雙伺服器故障後的主動資料庫計數和配置 (不同機架)

雙故障後的主動資料庫計數和配置

如果兩部伺服器同時故障 (相同機架),其餘四部伺服器會有相同數量的啟用信箱資料庫。

雙伺服器故障後的主動資料庫計數和配置 (相同機架)

雙故障後的主動資料庫計數和配置

回到頁首

 © 2010 Microsoft Corporation. 著作權所有,並保留一切權利。