zoukankan      html  css  js  c++  java
  • SQLServer 数据库镜像+复制切换方案

    http://www.cnblogs.com/fygh/archive/2012/05/25/2518416.html

    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!@#';
    CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
    CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
        
    CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#';
    CREATE USER HOST_W_user FOR LOGIN HOST_W_login;
    CREATE CERTIFICATE HOST_W_cert AUTHORIZATION HOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_W_login];
    复制代码

         08R205(Mirror) 上运行下面的脚本:

    复制代码
    --Mirror
    CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#';
    CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
    CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
        
    CREATE LOGIN HOST_W_login WITH PASSWORD = '123abc!@#';
    CREATE USER HOST_W_user FOR LOGIN HOST_W_login;
    CREATE CERTIFICATE HOST_W_cert AUTHORIZATION HOST_W_user FROM FILE = 'D:CertHOST_W_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_W_login];
    复制代码

         08R201(WITNESS) 上运行下面的脚本:

    复制代码
    --WITNESS
    CREATE LOGIN HOST_A_login WITH PASSWORD = '123abc!@#';
    CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
    CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:CertHOST_A_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
        
    CREATE LOGIN HOST_B_login WITH PASSWORD = '123abc!@#';
    CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
    CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:CertHOST_B_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
    复制代码
    1. 备份还原数据库

         08R202(Master) 上备份数据库:

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

         将备份文件拷贝到 08R205(Mirror) 上做还原(最好以SA帐号登录,使得数据库所有者为”SA“):

    复制代码
      --RESTORE 
    RESTORE DATABASE RepTest FROM  DISK = N'D:RepTest.bak' 
    WITH  FILE = 1,  
    MOVE N'RepTest' TO N'D:DataRepTest.mdf',  
    MOVE N'RepTest_log' TO N'D:DataRepTest_log.ldf',   
    NORECOVERY,  NOUNLOAD,  STATS = 10
    GO
    
    RESTORE 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';
    
    ALTER DATABASE RepTest SET WITNESS = 'TCP://192.168.56.101:5022';
    
    ALTER DATABASE 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):

    复制代码
        --配置复制故障转移参数
        --查看代理配置,在分发服务器运行
        exec sp_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)
        exec sp_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.  如果一起都正常,那恭喜啦,我们的测试成功。

  • 相关阅读:
    t
    bert4keras
    embeding应用-airbnb推荐
    The Neural Autoregressive Distribution Estimator
    3.redis desktop manager--redis 可视化工具安装及使用
    Day06作业(postman接口测试)
    DRF学习day01(web应用模式,api接口,RESTful API规范,序列化,Django Rest_Framework)
    restFul接口设计规范
    Vue学习之荏苒资讯项目(一)
    微信小程序开发四:Promise的使用,解决回调地狱
  • 原文地址:https://www.cnblogs.com/ifreesoft/p/4663629.html
Copyright © 2011-2022 走看看