2012年1月2日 星期一

SQL Server - 如何建立 Database Mirroring

        在高可用性 (High Availability) 的架構上,Failover Clustering一直以來是大家的首選,但是在SQL Server 2005 SP1之後推出了  [資料庫鏡像 (Database Mirroring) ],也讓大家有更多的選擇,而其中與Failover Clustering有下列幾個差異,我在此列出。

Failover Clustering vs Database Mirrioring
  1. Failover Clustering 架構於作業系統上的容錯移轉。
  2. Failover Clustering 需要一組 Shared Disk進行。
  3. SQL Server Failover Clustering 是以一整個 Instance 為主,而 Database Mirrioring是以單一的Database為主進行控管。
  4. SQL Server Failover Clustering主要為AP (Active/Passive) Mode,所以另一台主機只能待命無法使用(如果您需要將Failover變成 A/A Mode的話,可以參考 [SQL Server - 雙主動模式叢集環境架設]),而Database Mirroring只有設定鏡像的資料庫不能讀取,但是可以透過資料庫快照來讓 Mirro 端的資料庫可以進行唯讀的動作。
  5. 如果 Database Mirrioring 要作到自動容錯移轉時,需要第三台主機進行監控,但只需 Windows XP 或 Windows 7的作業系統,而資料庫只需 Express 免費版即可。
PS:Failover Clustering對於硬體的支援較嚴格,所以在一開始的成本會較於明顯,而 Database Mirroring只要兩台單機的電腦即可輕易的進行架設,所以也較容易入門。

Database Mirroring 作業模式:
鏡像作業模式共有兩種,請參考下列說明。

第一種模式 (「High-Safety Mode」) 可支援同步作業。在高安全性模式下,當工作階段開始時,鏡像伺服器會儘快將鏡像資料庫與主體資料庫進行同步處理。一旦資料庫同步處理完成之後,交易將同時在兩個夥伴上進行認可,代價是會增加交易延遲性。 



第二種作業模式 (「High-Performance Mode」) 則以非同步方式執行。鏡像伺服器會盡量跟上主體伺服器所傳送的記錄。鏡像資料庫可能會稍微落後主體資料庫。然而,在資料庫之間的間距通常很小。但是,若主體伺服器的工作負載很大,或鏡像伺服器的系統超載時,此差距就會變大。



配備說明:
第一台
角色名稱:Principal
電腦名稱:WIN-2008R2-1
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise
說明:主要資料庫,資料庫復原模式(Recovery Mode)需設定成完整 (Full)。

第二台
角色名稱:Mirror
電腦名稱:WIN-2008R2-2
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise

說明:鏡射資料庫,接收從主要資料庫的交易資料,但還原的過程中無法使用,如果想要使用時,可以透過資料庫快照即可間接使用即可。

第三台
角色名稱:Witness
電腦名稱:WIN7-CARYHSU-PC
OS:Windows 7 Home
DB:Windows 2008R2 Express

說明:如果你的 Database Mirroring 想要擁有 Auto Failover 的功能時,就需要透過此台電腦的監控來進行,由於此台電腦只負責監控,所以可以只安裝 Express 的版本即可,而作業系統也需要一般的作業系統即可。

範例說明:
在下列的範例中,為了可以實現  Auto Failover ,所以我將以 [High-Safety Mode] 進行,資料庫將以 Northwind 為例。

建立 Database Mirroring
1、建立 Mirror端資料庫。

1-1 先將 Principal 端的 Northwind 資料庫最後的備份複製到 Mirror 電腦上,並進行還原,還原時,請記得選擇 [讓資料庫保持不運作,且不回復未認可的交易,可以還原其他交易記錄。(A)(RESTORE WHIT NORECOVERY)],這個步驟也是最容易疏忽的一部份,所以再請特別注意。

1-2 還原完成後,你可以看到資料庫的狀態會變成 [正在還原...]。

2、設定資料庫鏡像


2-1 選擇要設定鏡像的資料庫,然後點選滑鼠右鍵選擇屬性。
2-2 點選 [鏡像] -> [設定安全性]。


2-3 點選下一步。

2-4 由於是進行 [High-Safety Mode],所以請選擇 [是],然後選擇 [下一步]。

2-5 依照預設值,選擇 [下一步]。

2-6 由於 Database Mirroring 預設是透過 5022 的通訊埠,如果你希望更換成不同的通訊埠時,請記得在三台主機的通訊埠設定成相同,此處依照預設值,點選 [下一步]。

2-7 選擇第二台的主機 ,如通訊埠沒有更動時,此處依照預設值,點選 [下一步]。

2-8 選擇第三台的主機 ,如通訊埠沒有更動時,此處依照預設值,點選 [下一步]。

2-9 由於三台主機都有加入 Domain,所以請記得選擇一個網域帳號即可。
PS:如果你的主機沒有加入 Domain時,你有兩種方法可以進行,一種是三台的帳號密碼都相同,藉以矇過系統,另一種是透過憑證的方式進行,詳細的作法再請參考 [Setting Up Database Mirroring Using Certificates] 。

2-10 設定完成後,即會秀出總結的資訊,再點選 [完成]。


2-11 精靈設定完成後,即時會提供你是否要立即啟動鏡像,可此時啟動,或是稍後再手動啟動即可。

2-12 設定完成後,你即會看到目前的 [作業模式] 會設定成 [具有自動容錯移轉的高安全性 (同步)]。

2-13 此時再切換到資料庫清單中,即可看到目前 Database Mirroring 的狀態。

3、系統測試與模擬 Failover

3-1 開啟資料庫屬性,點選 [容錯移轉],讓兩台主機的身份互換。

3-2 點選後,你就會看到 Failover 已完成,主體與鏡像的身份也已進行切換了。



參考連結:
Database Mirroring Overview
http://msdn.microsoft.com/en-us/library/ms189852.aspx
Example: Setting Up Database Mirroring Using Certificates (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms191140.aspx

關鍵字:Database MirroringSQL ServerPrincipalMirrorWitness

12 則留言:

  1. 請教一下應用程式在使用Database Mirroring的時候有兩個DB ip當一台掛掉另一台DB會起來沒錯,但似乎應用程式必須改IP才連的到DB?

    回覆刪除
    回覆
    1. 如你所說,當你使用的模式為 [High-Safety Mode],而且有Witness Server時,DB掛掉就會自動切到另一台,關於程式的部份,其實你可以在 Connection String中加入Failover_Partner的關鍵字,當第一台發生問題時,即會自動連線到第二台,相關參考如下:

      Making the Initial Connection to a Database Mirroring Session
      http://msdn.microsoft.com/en-us/library/ms366348(v=sql.105).aspx

      刪除
  2. 不好意思..請問 我在執行啟動鏡像的按紐時, 卻出現錯誤(端點組態中已停用資料庫鏡像傳輸)請問這部分該如何設定呢 感謝

    回覆刪除
    回覆
    1. 可否再詳細的描述一下你的OS與SQL的版本,另外請檢查一下SQL Server Error的錯誤訊息與代碼為何,是否為1486等,請提供多一點的訊息給我,我再協助你排除。

      刪除
    2. Sorry,後來發現是端點沒開啟
      使用這個之後才開啟
      ALTER ENDPOINT [Mirroring]
      STATE = STARTED
      AS TCP (LISTENER_PORT = 5023)
      FOR database_mirroring (ROLE = PARTNER);
      GO
      感謝您!

      刪除
  3. 請問,要做到High-Safety Mode 自動轉移,用2003 Server 和 SQL Server 2005 SP1 ,就可以做了嗎??

    回覆刪除
  4. Hello 你好:
    的確如你所說的環境即可達到,詳細的說明,你也可以參考下列的連結:

    Hardware and Software Requirements for Installing SQL Server 2005
    http://msdn.microsoft.com/en-us/library/ms143506(v=sql.90).aspx

    Database Mirroring in SQL Server 2005
    http://technet.microsoft.com/en-us/library/cc917680.aspx

    回覆刪除
  5. 請問, 我 3 台主機並未加入AD, administrator 帳密皆相同
    在步驟2-9您有提到可用3台帳號密碼都相同的方式處理,
    我使用Mirror1/administrator 填入主體/鏡像/見證欄位, 僅主體成功另2個顯示警告
    使用Mirror1/administrator, Mirror2/Administrator..填入, 3個都顯示警告
    請問, 我應該填入什麼樣的帳號型式呢? 謝謝.

    回覆刪除
    回覆
    1. 在主體/鏡像/見證服務帳戶內填入 administrator 一樣會出現警告訊息, 'administrator' 不是有效的 Windows NT 名稱。請提供完整的名稱: 。 (Microsoft SQL Server, 錯誤: 15407)

      刪除
  6. 您好, 我的問題已參考這篇文章順利解決, 謝謝. http://social.technet.microsoft.com/Forums/zh-TW/sqlservermanagementzhcht/thread/37dc5874-08c6-4b87-baf2-9e36a4d61868/

    回覆刪除
  7. 請教一下,執行啟動鏡像的按紐時,出現此錯誤訊息,"伺服器網路位址 "TCP://MIRRORING.teraxtal.com:5022" 無法連上或不存在。請檢查網路位址名稱,並檢查本機和遠端端點的通訊埠是否可正常運作。 (Microsoft SQL Server, 錯誤: 1418)",請問這該如何解決? 感謝

    回覆刪除
    回覆
    1. 詳細的情況可能要看你的環境而定或是有其他的資訊,你可以先參考下列的連結進行處理。

      MSSQLSERVER_1418
      https://msdn.microsoft.com/en-us/library/aa337361.aspx

      Database Mirroring Error 1418 Troubleshooter
      http://blogs.msdn.com/b/grahamk/archive/2008/12/08/database-mirroring-error-1418-troubleshooter.aspx

      刪除