SQL Server

SQL Server 叢集的最佳提示

Tom Moreau,PhD

 

摘要:

  • 在叢集上執行 SQL Server
  • 硬體和軟體需求
  • 叢集一個節點
  • 合乎成本效益的選項

伺服器叢集可讓您連接互相做為容錯移轉夥伴的多部實體伺服器 (或節點)。叢集提供的重複性代表您的關鍵

作業可以更穩定的執行。我在使用 SQL Server™ 的 13 年當中實作過許多叢集,而每個叢集都有一些自身的問題。這方面的經驗讓我得以蒐集許多提示,可幫助您容易且順利地執行叢集工作。

伺服器叢集利用 Windows Server® 家族之 Enterprise Edition 的內建叢集功能。事實上,在叢集方面,Windows Server 2003 遠優於 Windows 2000 Advanced Server。為了能夠從叢集得到最大的好處,您需要有正確的硬體,而這又牽涉到一些費用。利用共用磁碟將幾部伺服器湊在一起是不夠的,而且光是個別硬體元件在 Windows® Catalog (以前稱為硬體相容性清單) 有列出也不足為憑。整個系統都必須在 Windows Catalog 中。但是不必擔心,還是有一些經過認可、成本較低的叢集解決方案可用。[圖 1] 顯示典型的叢集組態。

Figure 1 A typical cluster

Figure 1** A typical cluster **(按影像可放大)

當然,要叢集的不只是硬體,您必須選擇正確的 SQL Server 2005 版本。Enterprise Edition 能實作叢集和其他實用的功能,例如可以運用更多的 CPU、分散式與可更新的資料分割檢視、內建記錄傳送、自動使用索引檢視。如果您已經有 Enterprise Edition 授權,不論您是否有二到八部伺服器必須形成傳統的叢集,都應該考慮使用叢集 (我們很快會討論單節點叢集)。如果您有 SQL Server 2005 Standard Edition,則可以安裝雙節點叢集。

Windows Server 2003 Enterprise 和 Datacenter Edition 都內建了叢集。您只需要執行 [叢集系統管理員] 來設定叢集即可。您可以一次加入所有的節點,或一次加入一個節點。同樣地,當您安裝 SQL Server 時,可以選擇安裝在個別的非叢集伺服器上,或者在叢集上安裝虛擬執行個體。如果您選擇安裝虛擬執行個體,則可以安裝在叢集的所有節點上、只安裝在某些節點上,或者甚至只安裝在一個節點上。

最後,為了達到叢集的真正目的 (高可用性),您需要合格的人員和編排良好的程序,以便萬一發生問題時能適當地處理。雖然叢集是預防硬體失敗的良好措施,但是無法防止使用者錯誤,例如缺乏睡眠的 DBA 在半夜卸除重要的資料表。

單節點叢集

即使您目前只需要單一伺服器,也應考慮建立單節點叢集。這可以讓您以後選擇升級至叢集,以避免重建。只要確定您選擇的硬體有在 Windows Catalog 的叢集部分中即可。

您希望以後能夠選擇加入節點的著眼點,不只是高可用性而已。請設想一下,萬一您發現您的伺服器沒有足夠容量的話。這意味著您必須執行移轉,既耗時又費力。如果您有一個單節點叢集,停機時間將大為縮短,會比較容易移轉。您將新節點加入叢集,將 SQL Server 二進位編碼檔案與 Service Pack 加入新節點,再容錯移轉至新節點。然後您加入任何 Service Pack 後的更新,最後則收回舊節點。停機時間只有容錯移轉和加入更新 (如果有) 所花的時間。

加入節點

由於叢集中所有的節點都必須相同,因此您應盡早加入額外的節點。如果等得太久,節點可能無法實際執行。我曾經在某個專案中,必須重建 SQL Server 2000 叢集內的節點。基本的電腦建置是由作業系統/網路系統管理員處理,然後我再將其加入叢集,並準備好做為 SQL Server 節點提供服務。原本一切都很順利,直到我容錯移轉至新節點時,問題就出現了。它只是馬上容錯移轉回來,令我非常沮喪。長話短說,雖然我準備了建立新叢集的詳細文件,包括在兩個節點中加入叢集服務和 SQL Server 服務帳戶,但是相關人員並沒有明確地遵照文件執行。系統管理員並未將這些服務帳戶加入重建的節點,因此在重建前擁有權限已經不存在。

我花了很長的時間才找出這個問題。有一天我想到應檢查本機群組成員資格。等到我加入這兩個帳戶後,就能順利地容錯移轉。然後我開始思考。重建節點並不常發生,一旦發生,就是緊急情況。雖然我已準備好文件,但是並未使用到文件。我們只需要撰寫一段簡短的指令碼,以加入這兩個帳戶並執行其他任何必要的自訂,就能自動執行安全性的部分。不過情況在 SQL Server 2005 中已有改善。安裝程式會要求您必須為 SQL Server 服務帳戶設定網域層級群組。

當然,這令我想得更多。您可以建立指令碼,以叫用 CLUSTER.EXE 將節點加入您的 Microsoft® Cluster Server (MSCS) 叢集。您只需要提供節點名稱給指令碼,指令碼就能處理其餘的工作。在緊急情況下,自動化真的很好用。

N+1 叢集

有時候,並不是為了取代節點而將某個節點加入叢集。您可能是要將更多的 SQL Server 執行個體加入叢集,而每個執行個體需要個別的磁碟資源。雖然多個執行個體可以在單一節點上執行,不過這些執行個體將共用 CPU 和記憶體,而這意味著效能不彰。理想的情況是,單一節點上只應執行單一執行個體。您在容錯移轉時要如何確保此情況?簡單:答案就是要有一個節點不執行服務,而其他節點每個都執行一個 SQL Server 執行個體。事實上,這就是 N+1 叢集的定義:N 個執行個體在 N+1 個節點上執行。多出來的節點是備份節點。

升級 SQL Server

SQL Server 叢集執行個體的升級,絕對不能隨心所欲:當初建置叢集的理由,就是為了要穩定性。但是 SQL Server 2005 提供了許多您可以利用的增強功能,當您確定要升級時,可以讓您在過程中盡量縮減停機時間。

您的選擇是什麼?先來看看最昂貴的解決方案:建立全新的叢集,這表示需要新的伺服器,甚至是新的存放區域網路 (SAN)。您可能可以保留現有的網路交換器,不過也只能保留這部分了。這種方法顯然並不便宜,但是有其優點。新硬體的執行情況通常會比舊硬體好,因為磁碟容量和速度永遠不斷在提升。因此,純綷使用新硬體可以加強效能。您甚至可以租用設備,以保有更新的彈性。

準備好硬體後,您就可以建立新的虛擬 SQL Server、複製您的實際執行資料庫,然後完成新系統的測試,以便在截止日期之前完成所有除錯作業。只要記得從現有的伺服器編寫登入的指令碼 (請參閱 support.microsoft.com/kb/246133。如果發生重大失敗,更新您的登入組建指令碼也是很好的做法)。

為了減少停機時間,您可能必須使用記錄傳送,除非您的資料庫非常小,而且有一段時間不會有任何使用者連接到資料庫。您可以傳送記錄,直到移轉的前一刻為止。然後強迫使用者離線、複製並傳送最後的記錄,再將應用程式指向新執行個體 (請參考下面的資料庫鏡像區段,以了解記錄傳送的替代方案,滿有趣的)。如果您使用 DNS 別名,可能甚至不必將應用程式指向新執行個體。只需要更新 DNS 別名即可。這種方法的優點在於,如果您移轉到一半,卻必須還原至原始執行個體,至少您還有原始執行個體。

您可以使用較便宜的方法,不過這種方法需要較多的事先規劃。一個叢集可以支援多個 SQL Server 執行個體,但是每個執行個體都必須有其自己的磁碟資源。因此當您建立 SAN 時,請多設定一個 LUN,以便未來升級。若要執行升級,請在此磁碟資源上安裝 SQL Server 二進位編碼檔案。您可以讓系統運行,等您準備好之後,關閉目前的 SQL Server,從舊的 SQL Server 群組移動磁碟資源,更新相依性,再讓新的 SQL Server 執行個體上線。從舊執行個體附加資料庫,就可以啟動及執行 (您在事前已完成所有備份,對吧?)

這是較便宜的方法,但是會有一點風險。萬一出錯,您無法從新執行個體卸離資料庫,然後將該資料庫放回舊執行個體。您必須從備份還原,這表示需要很長的停機時間。

替代方法是在您的 SAN 上設定兩個 SQL Server 執行個體,前提是您要有足夠的空間。先將實際執行備份 (和記錄傳送) 還原至新執行個體,然後執行我前面所述的步驟。如此一來,就變成有了後援系統。一旦您完成移轉後,就可以從舊執行個體釋放 SAN 資源。這樣所花費的成本只有額外的磁碟空間。

負載平衡

我們先從破除常見的誤解開始。您使用 MSCS 叢集的目的是獲得高可用性,而非負載平衡。另外,SQL Server 並沒有任何內建的自動負載平衡功能。您必須透過應用程式的實體設計取得負載平衡。這是什麼意思呢?

隨著資料表成長,您一定會發現效能有所降低,尤其是牽涉到資料表掃描時。當您的資料列達到數百萬或數十億個時,傳統的解決方案是使用資料分割檢視,這種檢視是由具有相同結構描述,並利用 UNION ALL 連結在一起的一些資料表構成。此外,也利用 CHECK 條件約束區別成員資料表,而這可防止資料分割檢視中的資料重複。如果 CHECK 條件約束中使用的資料行也是主索引鍵的一部分,檢視就可以更新。

如果成員資料表是在自己的檔案群組中,而這些檔案群組是位於不同的實體磁碟機上,就會有較佳的磁碟效能。資料表甚至可以放在不同的資料庫中。不過在 SQL Server 2005 中,只要所有資料都在同一個資料庫中,您就可以使用資料表資料分割,這種資料分割的實作容易多了。

但是假設您已盡量使用資料表資料分割或 (本機) 資料分割檢視,而執行速度還是很慢。如果您是使用 SQL Server 2000 或 SQL Server 2005,就可以使用分散式資料分割檢視。主要差異在於成員資料表可以位於不同的 SQL Server 執行個體上,而這些執行個體可以安裝在 N+1 叢集上。這種做法好在哪裡?如果任一個成員資料表在資料分割檢視中離線,則整個檢視都會離線。將這些成員設定為叢集的一部分可提供您支援效能所需的可靠性,並且提供負載平衡。

您真的需要叢集嗎?

您或許有一些閒置的備用伺服器,但是這些伺服器並不在 Windows Catalog 的叢集清單中。放著現成的伺服器不用,只為了支援叢集而購買新伺服器是不符合經濟效益的做法。

資料庫鏡像可能是具有吸引力的叢集替代方法。鏡像牽涉到三個元素:裝載鏡像資料庫的執行個體稱為主體、備份伺服器稱為鏡像,而您若想要自動容錯移轉,則需要第三部伺服器 (稱為見證)。簡單地說,主體上資料庫中的交易會在鏡像中再執行一次。如果主體停機,而您有見證,資料庫就可以自動容錯移轉至鏡像。您必須為每個應用程式資料庫設定鏡像,但是不能鏡像系統資料庫。

鏡像系統完全是另一個 SQL Server 執行個體,與叢集不同,且可位於幾千英里以外。從主體複製交易會引發更新活動,而此活動會擴展鏡像的快取。當然,假設鏡像除了從主體接收鏡像交易之外,沒有其他任何活動。其容錯移轉速度通常會比叢集快,因為鏡像中已有 SQL Server 在執行中。由於快取至少已部分初始化,因此初始效能不會像叢集狀況中一樣差。而且要注意,當鏡像資料庫容錯移轉時,主體和鏡像的角色會對調。

資料庫鏡像的缺點,是所需要的總磁碟容量為叢集的兩倍。如果想使用無資料遺失的同步模式,您還需要更強的 CPU 運算動力。我說過,高可用性的代價並不便宜。

結合的方法

因為鏡像的位置可以離主體很遠,所以這是嚴重損壞修復 (DR) 計劃的理想選擇。您的叢集可做為第一道防線,但是如果您同時使用叢集和鏡像,會有什麼情況?在叢集容錯移轉中,如果您的鏡像組態中有見證,則在叢集 SQL Server 上線時,鏡像會成為主體。但是要注意,從新主體容錯移轉回 (叢集) 新鏡像並不會自動執行。因此,當您同時使用鏡像與叢集時,最好不要啟用鏡像資料庫的自動容錯移轉功能。

DR 不是您使用鏡像的唯一理由。如果您必須套用 Service Pack 或 Hotfix 至主體,這也很有用,如此便可以手動容錯移轉至鏡像。在套用 Service Pack 或 Hotfix 時,舊的主體伺服器會暫時離線,而在新主體發生的認可交易會佇列起來,等待傳回新的鏡像 (舊的主體)。一旦 Service Pack 或 Hotfix 安裝完成之後,就會進行同步處理,最終兩部伺服器將會完全同步。如此一來,您就可以交換主體和鏡像的角色。停機時間只有容錯移轉和轉回的幾秒鐘而已。您可以使用此方法將 SQL Server 移轉至另一部電腦。但請不要再移轉回來。

虛擬伺服器增加彈性

虛擬化可以讓您在單一實體伺服器上同時執行一個或多個作業系統。虛擬化軟體可為叢集概念增加另一層功能,因為您可以將軟體叢集化。因此,如果執行主機的伺服器失敗,則它和它的虛擬作業系統都會容錯移轉至備份節點。這是很容易移轉虛擬伺服器的方式。此外,虛擬作業系統不一定要具備叢集功能。因此,您可以在位於叢集上之 Microsoft Virtual Server 2005 中執行的虛擬 Windows Server 2003 內,執行 SQL Server Workgroup Edition。您實際上是間接擁有叢集 Workgroup Edition (請參閱 [圖 2])。

Figure 2 Using a virtual server

Figure 2** Using a virtual server **(按影像可放大)

掌握控制

如果您負責 SQL Server 實作,就需要確保您的伺服器保持可用狀態。伺服器叢集有助於保證維持這種狀態。本文提供辛苦得來的教訓以幫助您有個順暢的開始,您可以在<叢集資源>資訊看板中找到更多有用的資訊。

叢集資源

如需本文使用的方法以及您設定 SQL Server 叢集所需之各種產品的詳細資訊,請參閱下列文章:

Tom Moreau,PhD、BSc、PhD、MCSE、MCDBA,是專精於 SQL Server 資料庫管理、設計及實作的獨立顧問,且居住在多倫多地區。Tom 自 1993 年起就已使用 SQL Server,並且從 2001 年開始就一直是 MVP。他寫過 100 多篇文章,並且與人合著過 SQL Server 的書。感謝 SQL Server MVP Geoff Hiten 提供實用的資訊。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.