SQLServer 數據庫鏡像+複製方案

目標:數據庫

      主機作了Mirror和Replication,當主機出現問題時,Replication和Mirror實現自動的故障轉移(Mirror 和Replication都切換到備機,而當主機服務器

       從新啓動後,自動充當備機的角色)。測試

 

環境:代理

          五臺虛擬機,配置均爲Windows2008 Enterprise + SQLServer2008R2 Enterprise日誌

          08R201:Mirror 見證機(WITNESS)           IP:192.168.56.101xml

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

          08R203:Rep分發機                               IP:192.168.56.103事務

          08R204:Rep訂閱機                               IP:192.168.56.104cmd

          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_certTO 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_certTO 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_certTO FILE = 'D:HOST_W_cert.cer';
  1. 交換證書

     將HOST_B_cert.cer和HOST_W_cert.cer拷貝到 08R202 機器的」D:Cert「目錄;

     將HOST_A_cert.cer和HOST_W_cert.cer拷貝到 08R205 機器的」D:Cert「目錄;

     將HOST_A_cert.cer和HOST_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.  08R202和08R205都須要搭建到08R203的Distribution;

      

     2.  08R202和08R205上的發佈庫的全部者必須爲「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.  暫停08R202的SQLServer服務;

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

      

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

      4.  從新啓動08R202的SQLServer服務,看其是否成爲了鏡像機;

      

       5.  若是一塊兒都正常,那恭喜啦,咱們的測試成功。

相關文章
相關標籤/搜索