SQLServer 數據庫鏡像+復制切換方案


目標:

      主機做了MirrorReplication,當主機出現問題時,ReplicationMirror實現自動的故障轉移(Mirror Replication都切換到備機,而當主機

       重新啟動后,自動充當備機的角色)。

 

環境:

          五台虛擬機,配置均為Windows2008 Enterprise + SQLServer2008R2 Enterprise

          08R201Mirror 見證機(WITNESS)           IP:192.168.56.101

          08R202:主機(Rep+Mirror                  IP:192.168.56.102

          08R203Rep分發機                               IP:192.168.56.103

          08R204Rep訂閱機                               IP:192.168.56.104

          08R205:鏡像機(Mirror                       IP:192.168.56.105

步驟:

配置有見證服務器的鏡像

  1. 創建證書和Endpoint

     08R202(Master) 上運行下面的腳本:

--主機執行: USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --主機執行: CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); --主機執行: BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:HOST_A_cert.cer';

      08R205(Mirror) 上運行下面的腳本:

--備機執行: USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate', START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --備機執行: CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); --備機執行: BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:HOST_B_cert.cer';

      08R201(WITNESS上運行下面的腳本:

--見證機執行 USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456abc'; CREATE CERTIFICATE HOST_W_cert WITH SUBJECT = 'HOST_W certificate', START_DATE = '11/08/2010',EXPIRY_DATE = '10/31/2099'; --見證機執行 CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_W_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ); --見證機執行 BACKUP CERTIFICATE HOST_W_cert TO FILE = 'D:HOST_W_cert.cer';
  1. 交換證書

     將HOST_B_cert.cerHOST_W_cert.cer拷貝到 08R202 機器的”D:Cert目錄;

     將HOST_A_cert.cerHOST_W_cert.cer拷貝到 08R205 機器的”D:Cert目錄;

     將HOST_A_cert.cerHOST_B_cert.cer拷貝到 08R201 機器的”D:Cert目錄;

 

     08R202(Master) 上運行下面的腳本:

--Master CREATE LOGIN HOST_B_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_B_user FOR LOGIN HOST_B_login; CREATE CERTIFICATE HOST_B_certAUTHORIZATION HOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_W_user FORLOGIN HOST_W_login; CREATE CERTIFICATE HOST_W_cert AUTHORIZATIONHOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_W_login];

     08R205(Mirror) 上運行下面的腳本:

--Mirror CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_A_user FOR LOGIN HOST_A_login; CREATE CERTIFICATE HOST_A_certAUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_W_user FORLOGIN HOST_W_login; CREATE CERTIFICATE HOST_W_cert AUTHORIZATIONHOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_W_login];

     08R201(WITNESS上運行下面的腳本:

--WITNESS CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#'; CREATEUSER HOST_A_user FOR LOGIN HOST_A_login; CREATE CERTIFICATE HOST_A_certAUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer'; GRANTCONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login]; CREATE LOGIN HOST_B_login WITH PASSWORD = '123abc!@#'; CREATE USER HOST_B_user FORLOGIN HOST_B_login; CREATE CERTIFICATE HOST_B_cert AUTHORIZATIONHOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer'; GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
  1. 備份還原數據庫

     08R202(Master) 上備份數據庫:

BACKUP DATABASE RepTest TO DISK='D:tempRepTest.bak' BACKUP LOG RepTestTO DISK='D:tempRepTest.trn'

     將備份文件拷貝到 08R205(Mirror) 上做還原(最好以SA帳號登錄,使得數據庫所有者為”SA“):

--RESTORE RESTORE DATABASE RepTest FROM DISK = N'D:RepTest.bak' WITHFILE = 1, MOVE N'RepTest' TO N'D:DataRepTest.mdf', MOVE N'RepTest_log'TO N'D:DataRepTest_log.ldf', NORECOVERY, NOUNLOAD, STATS = 10 GORESTORE LOG RepTest FROM DISK ='D:RepTest.trn' WITH NORECOVERY
  1. 建立鏡像

      08R205(Mirror) 上執行:

--Mirror ALTER DATABASE RepTest SET PARTNER ='TCP://192.168.56.102:5022';

     在 08R202(Master)上執行:

ALTER DATABASE RepTest SET PARTNER = 'TCP://192.168.56.105:5022'; ALTERDATABASE RepTest SET WITNESS = 'TCP://192.168.56.101:5022'; ALTERDATABASE RepTest SET SAFETY FULL

到此,鏡像已經建立完成。

 

配置Replication(事務型復制)

     Replicaiton不做具體的搭建過程,只做幾點說明:

     1.  08R20208R205都需要搭建到08R203Distribution

      

     2.  08R20208R205上的發布庫的所有者必須為“SA,否則切換會出現如下錯誤:The process could not execute ‘sp_replcmds’ on ‘WIN-08R205′.

     3.  08R203分發機上配置文件需要做如下修改(配置故障轉移Partner):

--配置復制故障轉移參數 --查看代理配置,在分發服務器運行 execsp_help_agent_profile --Agent_Type含義 --1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; --4 = Merge Agent; 9 = Queue Reader Agent. --對於事務復制,需查看Agent_Type=1,2的Profile_id --對於事務復制,需要配置快照代理(Snapshot Agent)和日志讀取代理(Log Reader Agent) execsp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'WIN-08R205'--鏡像服務器名稱 exec sp_add_agent_parameter @profile_id = 2, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'WIN-08R205'--鏡像服務器名稱

修改完成后,記得重啟Agent服務,使之生效。

      4.  08R202創建到08R204的同步鏈。

 

模擬故障轉移並觀察結果

     1.  暫停08R202SQLServer服務;

     2.  到08R205上觀察鏡像和同步鏈是否轉移過去了;

      

      3.  如果同步鏈正常,修改某個表中的數據,看是否能同步到08R204上;

      4.  重新啟動08R202SQLServer服務,看其是否成為了鏡像機;

      

       5.  如果一起都正常,那恭喜啦,我們的測試成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM