使用 SQL Server 資料庫鏡像設定單一伺服器陣列的可用性
本文說明如何使用高可用性資料庫鏡像來設定 Microsoft Office SharePoint Server 2007 之伺服器陣列內的可用性。本文假設您熟悉<規劃可用性 (Office SharePoint Server)>所述的概念及術語。
Microsoft SQL Server 2005 資料庫鏡像之所以能夠提供可用性支援,是因為每當主體資料庫的交易記錄檔緩衝區寫入磁碟,資料庫鏡像就會將交易直接從主體資料庫與伺服器傳送至鏡像資料庫與伺服器。若要在 Office SharePoint Server 2007 伺服器陣列內享有可用性,建議您使用高可用性資料庫鏡像 (也稱為使用自動容錯移轉的高安全性模式)。高可用性資料庫鏡像涉及三個伺服器執行個體:一個主體、一個鏡像及一個見證。見證伺服器可讓 SQL Server 從主體伺服器自動容錯移轉至鏡像伺服器。從主體資料庫容錯移轉至鏡像資料庫一般需要幾秒鐘。
在 SharePoint 伺服器陣列內,鏡像可以提供所有資料庫備援 (前提是我們假設容錯移轉資料庫時,您的前端網頁伺服器仍保持可用狀態)。下圖顯示如何設定鏡像以提供伺服器陣列內的高可用性。
Office SharePoint Server 2007 不是鏡像感知的。若要使用鏡像做為可用性解決方案,建議您設定資料庫以使用 SQL Server 用戶端別名,並在容錯移轉時執行指令碼,以變更 SQL Server 用戶端別名。
資料庫鏡像需求
在您設定資料庫鏡像之前,請確定資料庫和系統符合下列需求:
建議系統的延遲不超過 1 毫秒。
系統頻寬最好應該是每秒 1 GB。
記錄檔是在主體與鏡像伺服器之間即時複製,而且複製可能會影響效能。請確定您的主體和鏡像伺服器具有足夠的記憶體和頻寬。
主體伺服器和鏡像伺服器必須執行相同版本的 Microsoft SQL Server 2005 (含 Service Pack 1 (SP1))。資料庫鏡像僅適用於 Standard、Developer 和 Enterprise 版本。見證伺服器可以執行任何版本的 SQL Server 2005 (包含 SQL Server 2005 Express Edition)。
鏡像只適用於使用完整復原模式的資料庫。
Office SharePoint Server 2007 SSP 資料庫預設會設定為使用簡單復原模式。若要設定資料庫鏡像,則資料庫的復原模式必須設定為 [完整]。如需如何設定資料庫復原模式的相關資訊,請參閱如何:檢視或變更資料庫的復原模式 (SQL Server Management Studio) (https://go.microsoft.com/fwlink/?linkid=132075&clcid=0x404)。
如果您打算鏡像 SSP 資料庫,請考慮這些資料庫的交易記錄檔大小可能會變得很大。若要解決這個問題,請視需要考慮使用截斷交易記錄檔的復原計劃。如需詳細資訊,請參閱 Microsoft 知識庫中的下列文章:如何避免 SQL Server 資料庫的交易記錄檔超出預期大小 (https://go.microsoft.com/fwlink/?linkid=111458&clcid=0x404)。
每個資料庫鏡像工作階段至少會為每個資料庫建立兩個執行緒。請確定資料庫伺服器具有足夠的執行緒可配置,以鏡像所有支援的資料庫。如果您的執行緒不足,則將更多資料庫新增至工作階段時,效能可能會明顯變差。
在 Microsoft 的主控環境中,來自主控 SharePoint 產品及技術之單一 SQL Server 執行個體的實用鏡像資料庫上限為 50 個資料庫。此最大值是根據鏡像耗用的資源多寡 (每個主體執行個體和鏡像執行個體都需要專用的執行緒) 和測試結果。根據下列因素,您的結果可能會不同:
主體和鏡像執行個體的記憶體
主體和鏡像執行個體的處理能力
主體和鏡像執行個體之 I/O 子系統的頻寬
每個資料庫之工作負載所產生的交易記錄檔數量
主體和鏡像執行個體之間的網路頻寬
如需資料庫鏡像之效能和規模的詳細資訊,請參閱 SQL Server 2005 中的資料庫鏡像 (英文) (https://go.microsoft.com/fwlink/?linkid=83566&clcid=0x404)。
與資料庫鏡像相關聯的安全性
資料庫鏡像使用 TCP 工作階段,在不同伺服器之間傳輸交易記錄檔,並監視系統的目前狀況以進行自動容錯移轉。開啟連接埠進行連線時,會在工作階段層級執行驗證。
Windows 驗證 (NTLM 或 Kerberos)
憑證
本文件說明如何搭配使用資料庫鏡像與憑證。如需如何搭配使用 Windows 驗證與資料庫鏡像的相關資訊,請參閱範例:使用 Windows 驗證設定資料庫鏡像 (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=83567&clcid=0x404)。
除非網路安全,否則應該加密在工作階段期間傳輸的資料。本文件概述如何使用 RC4 設定透過網路傳輸之資料的加密,但是資料庫鏡像同時支援 AES 和 RC4 加密演算法。如需與資料庫鏡像相關聯之安全性的詳細資訊,請參閱資料庫鏡像傳輸安全性 (https://go.microsoft.com/fwlink/?linkid=83569&clcid=0x404)。
SharePoint 安全性和鏡像的伺服器
當您設定鏡像資料庫時,要與 SharePoint 伺服器陣列搭配使用之資料庫的 SQL Server 登入和權限不會在鏡像的 master 和 msdb 資料庫中自動設定。而是您必須設定必要登入的權限。這些包括但不限於下列各項:
管理中心應用程式集區帳戶應該是 dbcreator 和 securityadmin 固定伺服器角色的成員。
雖然所有應用程式集區帳戶以及搜尋服務和預設內容存取帳戶都未指派給 SQL Server 固定伺服器或固定資料庫角色,但是這些帳戶應具有 SQL Server 登入。
「SharePoint 伺服器陣列管理員」群組成員也應具有 SQL Server 登入,且應是與管理中心應用程式集區帳戶相同角色的成員。
建議您執行指令碼,將登入和權限從主體伺服器傳送至鏡像伺服器。知識庫文章 918992:如何在 SQL Server 2005 的執行個體之間傳送登入和密碼 (https://go.microsoft.com/fwlink/?linkid=122053&clcid=0x404) 提供指令碼範例。如需更多有關如何在執行個體之間傳送 SQL Server 中繼資料的一般資訊,請參閱《SQL Server 線上叢書》中的文章:在另一個伺服器執行個體上提供可用的資料庫時,管理中繼資料 (https://go.microsoft.com/fwlink/?linkid=122055&clcid=0x404)。
建議的拓撲
建議您讓主體伺服器與鏡像伺服器保持一對一的對應關係,以確保能與 SharePoint 產品及技術相容。
支援的拓撲包括鏡像所有內容資料庫、設定資料庫及管理中心內容資料庫。此外,您可以在 Office SharePoint Server 上鏡像 SSP 資料庫、SSP 搜尋資料庫及 SSP 內容資料庫。
下圖示範一些支援的拓撲。
請避免使用主體與鏡像伺服器不對稱的拓撲。此外,請將設定資料庫和管理內容資料庫保留在同一部伺服器上。下圖說明不支援的拓撲。
設定 SQL Server 連線別名
SQL Server 連線別名是可用來連線至 SQL Server 執行個體的已定義替代名稱。如果是 SharePoint 產品及技術,則可以建立所有伺服器 (包括前端網頁伺服器) 用來連線至 SQL Server 執行個體的 SQL Server 別名。容錯移轉鏡像資料庫伺服器時,請調整前端網頁伺服器的別名,使其指向鏡像伺服器,而非主體伺服器。建議您先設定 SQL Server 連線別名,再實作鏡像。
注意
如果您是設定現有伺服器陣列的別名,請使用與主體伺服器同名的別名,如此一來,即不需要對前端網頁伺服器進行任何變更,便能開始使用別名。
請在「每部前端網頁伺服器」和每部連線至 SQL Server 的伺服器上完成下列步驟。
啟動 SQL Server Native Client 網路公用程式 (%SYSTEM%\cliconfg.exe)。
按一下 [Alias]**** 索引標籤,然後按一下 [Add]。
[Add Network Library Configuration] 對話方塊隨即出現。
選取 TCP/IP,並依序輸入別名以及與別名相關聯的伺服器名稱,然後按一下 [OK]****。
請針對所有連線至 SQL Server 的伺服器重複執行。
設定資料庫鏡像
本節說明如何使用 Transact-SQL 來設定 SQL Server 資料庫的高可用性模式資料庫鏡像。
若要使用 SharePoint 產品及技術來設定資料庫鏡像,則必須個別處理每個需要鏡像的資料庫。
下節中的步驟與下列伺服器陣列拓撲相關:
一或多部前端網頁伺服器
三部執行 SQL Server 2005 的伺服器:主體伺服器、鏡像伺服器和見證伺服器
一個設定資料庫
多個內容資料庫
一或多個 SSP 資料庫
使用憑證和完整復原來設定資料庫鏡像
每個步驟都會列出應執行的目標伺服器。請使用 Transact-SQL 將這些命令傳送至 SQL Server。預留位置資訊會以角括弧 (<>) 表示,且應取代成與您部署相關的特定資訊。
設定輸出連線的主體伺服器
在主體伺服器上建立憑證,並開啟連接埠進行鏡像。
--On master database, create the database Master Key, if needed CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<test1234->'; GO -- Make a certificate for this server instance. USE master; CREATE CERTIFICATE <MASTER_HostA_cert> WITH SUBJECT = '<Master_HostA certificate>'; GO --Create mirroring endpoint for server instance using the certificate CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5024 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE <MASTER_HostA_cert> , ENCRYPTION = REQUIRED ALGORITHM RC4 , ROLE = ALL ); GO
在主體伺服器上備份憑證。
--Back up HOST_A certificate. BACKUP CERTIFICATE MASTER_HostA_cert TO FILE = '<c:\MASTER_HostA_cert.cer>'; GO
在主體伺服器上備份資料庫。此範例使用設定資料庫。請針對所有資料庫重複執行。
USE master; --Ensure that SharePoint_Config uses the full recovery model. ALTER DATABASE SharePoint_Config SET RECOVERY FULL; GO USE SharePoint_Config BACKUP DATABASE SharePoint_Config TO DISK = '<c:\SharePoint_Config.bak>' WITH FORMAT GO BACKUP Log SharePoint_Config TO DISK = '<c:\SharePoint_Config_log.bak>' WITH FORMAT GO
將備份檔案複製到鏡像伺服器。請針對所有資料庫重複執行。
使用任何一種安全的複製方法,將備份憑證檔案 (例如,C:\HOST_HostA_cert.cer) 複製到鏡像伺服器。
在主體伺服器上,為鏡像伺服器建立登入和使用者、將該憑證與該使用者產生關聯,然後授與合作關係的登入連接權限。
--Create a login on HOST_A for HOST_B USE master; CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>'; GO --Create a user for that login. CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <HOST_HostB_cert> AUTHORIZATION <HOST_HostB_user> FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>]; GO
設定輸出連線的鏡像伺服器
在鏡像伺服器上建立憑證,並開啟連接埠進行鏡像。
--On master database, create the database Master Key, if needed. USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1234-test>'; GO -- Make a certificate on the HOST_B server instance. CREATE CERTIFICATE <HOST_HostB> WITH SUBJECT = '<HOST_HostB certificate for database mirroring>'; GO --Create a mirroring endpoint for the server instance on HOST_B. CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5024 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE <HOST_HostB> , ENCRYPTION = REQUIRED ALGORITHM RC4 , ROLE = ALL ); GO
在鏡像伺服器上備份憑證。
--Back up HOST_B certificate. BACKUP CERTIFICATE <HOST_HostB> TO FILE = '<C:\HOST_HostB_cert.cer>'; GO
使用任何一種安全的複製方法,將備份憑證檔案 (例如,C:\HOST_HostB_cert.cer) 複製到主體伺服器。
在鏡像伺服器上,從備份檔案還原資料庫。此範例使用設定資料庫。請針對所有資料庫重複執行。
RESTORE DATABASE SharePoint_Config FROM DISK = '<c:\SharePoint_Config.bak>' WITH NORECOVERY GO RESTORE log SharePoint_Config FROM DISK = '<c:\SharePoint_Config_log.bak>' WITH NORECOVERY GO
設定輸入連線的鏡像伺服器
在鏡像伺服器上,為主體伺服器建立登入和使用者、將該憑證與該使用者產生關聯,然後授與合作關係的登入連接權限。
--Create a login on HOST_B for HOST_A USE master; CREATE LOGIN <MASTER_HostA_login> WITH PASSWORD = '<test1234->'; GO --Create a user for that login. CREATE USER <MASTER_HostA_user> FOR LOGIN <MASTER_HostA_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <MASTER_HostA_cert> AUTHORIZATION <MASTER_HostA_user> FROM FILE = '<c:\MASTER_HostA_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<MASTER_HostA_login>]; GO
設定輸入連線的主體伺服器
在主體伺服器上,為鏡像伺服器建立登入和使用者、將該憑證與該使用者產生關聯,然後授與合作關係的登入連接權限。
--Create a login on HOST_A for HOST_B USE master; CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>'; GO --Create a user for that login. CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <HOST_HostB_cert> AUTHORIZATION <HOST_HostB_user> FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>]; GO
設定鏡像夥伴
在主體伺服器上設定鏡像合作關係。此範例使用設定資料庫。請針對所有資料庫重複執行。
--At HOST_A, set server instance on HOST_B as partner (mirror server). ALTER DATABASE SharePoint_Config SET PARTNER = '<TCP://databasemirror.adatum.com:5024>'; GO
在鏡像伺服器上設定鏡像合作關係。此範例使用設定資料庫。請針對所有資料庫重複執行。
--At HOST_B, set server instance on HOST_A as partner (principal server): ALTER DATABASE SharePoint_Config SET PARTNER = '<TCP://databasemaster.adatum.com:5024>'; GO
設定見證伺服器
每個步驟都會列出應執行的目標伺服器。請使用 Transact-SQL 將這些命令傳送至 SQL Server。預留位置資訊會以角括弧 (<>) 表示,且應取代成與您部署相關的特定資訊。
在見證伺服器上設定憑證,並開啟連接埠。
--On master database, create the database Master Key, if needed CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1234test->'; GO -- Make a certificate for this server instance. USE master; CREATE CERTIFICATE <WITNESS_HostC_cert> WITH SUBJECT = '<Witness_HostC certificate>'; GO --Create mirroring endpoint for server instance using the certificate CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5024 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE <WITNESS_HostC_cert , ENCRYPTION = REQUIRED ALGORITHM RC4 , ROLE = ALL ); GO
在主體伺服器上備份憑證。
--Back up HOST_C certificate BACKUP CERTIFICATE <WITNESS_HostC_cert> TO FILE = '<c:\ WITNESS_HostC_cert.cer>'; GO
使用任何一種安全的複製方法,將備份憑證檔案 (例如,C:\WITNESS_HOSTC_cert.cer) 複製到主體伺服器和鏡像伺服器。
使用任何一種安全的複製方法,將備份憑證檔案 (例如,C:\WITNESS_HOSTC_cert.cer) 複製到主體伺服器和鏡像伺服器。
--Create a login on Witness HOST_C for Principal HOST_A USE master; CREATE LOGIN <MASTER_HostA_login> WITH PASSWORD = '<test1234->'; GO --Create a user for that login. CREATE USER <MASTER_HostA_user> FOR LOGIN <MASTER_HostA_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <MASTER_HostA_cert> AUTHORIZATION <MASTER_HostA_user> FROM FILE = '<c:\MASTER_HostA_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<MASTER_HostA_login>]; GO --Create Login for Mirror Host B CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>'; GO --Create a user for that login. CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <HOST_HostB_cert> AUTHORIZATION <HOST_HostB_user> FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>]; GO
在主體伺服器上,為見證伺服器建立登入和使用者、將該憑證與該使用者產生關聯,然後授與合作關係的登入連接權限。請針對鏡像伺服器重複執行。
--Create a login on Master HostA for Witness HostC USE master; CREATE LOGIN <WITNESS_HostC_login> WITH PASSWORD = '<1234test->'; GO --Create a user for that login. CREATE USER <WITNESS_HostC_user> FOR LOGIN <WITNESS_HostC_login>; GO --Associate the certificate with the user CREATE CERTIFICATE <WITNESS_HostC_cert> AUTHORIZATION <WITNESS_HostC_user> FROM FILE = '<c:\WITNESS_HostC_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid GO --Grant CONNECT permission on the login for the remote mirroring endpoint. GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<WITNESS_HostC_login>]; GO
在主體伺服器上附加見證伺服器。此範例使用設定資料庫。請針對所有資料庫重複執行。
--Setup the Witness Server ALTER DATABASE SharePoint_Config SET WITNESS = '<TCP://databasewitness.adatum.com:5024>' GO
將權限傳送至鏡像伺服器
當您設定鏡像資料庫時,要與 SharePoint 伺服器陣列搭配使用之資料庫的 SQL Server 登入和權限不會在鏡像的 master 和 msdb 資料庫中自動設定。而是您必須設定必要登入的權限。
建議您執行指令碼,將登入和權限從主體伺服器傳送至鏡像伺服器。知識庫文章 918992:如何在 SQL Server 2005 的執行個體之間傳送登入和密碼 (https://go.microsoft.com/fwlink/?linkid=122053&clcid=0x404) 提供建議您使用的指令碼。
監視鏡像狀態
在見證伺服器上,您可以使用下列 Transact-SQL 陳述式來監視目前鏡像狀態。
SELECT mirroring_role FROM sys.database_mirroring WHERE mirroring_role is not null --If returns a 1, principal, if 2: mirror
您可能希望建立一系列 SQL Server 工作和警示,以判斷哪個是主體伺服器,或是建立執行此命令的 Windows 服務,以判斷哪個是主體伺服器。
後續步驟
在您設定鏡像之後,必須建立指令碼,讓您能容錯移轉至伺服器陣列中的資料庫。如需詳細資訊,請參閱<單一伺服器陣列中鏡像資料庫的容錯移轉及復原>。
SELECT mirroring_role FROM sys.database_mirroring WHERE mirroring_role is not null --If returns a 1, principal, if 2: mirror
您可能希望建立一系列 SQL Server 工作和警示,以判斷哪個是主體伺服器,或是建立執行此命令的 Windows 服務,以判斷哪個是主體伺服器。