zoukankan      html  css  js  c++  java
  • 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    本文为非域环境搭建镜像演示,对于域环境搭建。可參照上文:http://blog.csdn.net/dba_huangzj/article/details/28904503 
    原文出处:http://blog.csdn.net/dba_huangzj/article/details/27652857

    前面已经演示了域环境下的镜像搭建。本文将使用非域环境来搭建镜像。同样,先依照不带见证server的高安全模式(同步)的方式搭建,然后 演示异步模式,最后会演示带有见证server的高安全模式。

    准备条件

    server

    server角色 机器名/实例名 版本号 IP
    主体server RepA Windows Server 2008R2 英文x64 192.168.1.2
    镜像server RepB Windows Server 2008R2 英文x64 192.168.1.3
    见证server Win7 Win7 企业版 192.168.1.4

    注:Rep是Replication(复制)的缩写,RepA和RepB一開始是搭建来做复制演示。本文借用这3台server。

    SQL Server

    均使用SQL Server 2008 R2 企业版 英文 X64

    演示数据库

    AdventureWorks2008R2

    第一步:检查环境

    因为在非域环境内,所以须要做的检查相对来说多非常多,以下依照演示环境。逐个測试以下的条件:

    1. Windows 账号。

    2. 网络能否联通,而且port可用。

    3. 主体server和镜像server的磁盘配置是否正确。
    4. SQL Server版本号、补丁是否满足镜像要求。
    5. SQL Server数据库的恢复模式、兼容级别。
    6. SQL Server上是否有常规的备份作业,特别是日志备份。
    7. 主体server和镜像server的SQL Server能否互通。
    8. 主体server和镜像server中是否有共享目录。

    Windows账号:

    搭建镜像中,涉及Windows账号的主要是在共享目录中,非域环境下须要证书来搭建镜像,另外对于小库。一般使用备份还原的方式,也就是说,须要把主体数据库上的备份文件传输到镜像server上,这些都须要用到Windows账号操作共享目录。本文为了演示方便,使用了Administrator作为Windows的账号。作为最佳实践。建议真正搭建时使用专用的Windows账号,而且保证有足够的权限。

    网络是否联通。而且port可用:

    非单机下的高可用都严重依赖网络,网络不通,一切都白搭。所以首先要确保网络是能互訪的。以下測试一下本例中使用的主体server和镜像server能否互訪:

    在RepA上ping RepB(本例IP地址192.168.1.3)

     image

    在RepB上ping RepA(本例IP地址192.168.1.2)

     image

    可见是能ping通的,为了方便,本例已关闭防火墙。所以port问题不须要检查,假设在生产环境,就须要和网络管理员确认port是否已经开启。检查port能够用Telnet命令。假设输入Telnet后出现以下的错误:
    英文:‘telnet’ is not recognized as an internal or external command, operable program or batch file.

    中文:'telnet' 不是内部或外部命令。也不是可运行的程序或批处理文件。

    能够在“開始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows功能”进入Windows 功能设置对话框。找到并勾选“Telnetclient”和“Telnetserver”,最后“确定”。

    依据版本号不同,开启方式也会不同,详细版本号请自行查找搜索引擎的方案。

    主体server和镜像server的磁盘配置是否正确:

    在正式环境中,往往不会仅仅有一个磁盘,本例因为实体机的资源限制。所以仅仅保留系统盘,即C盘做演示。以下先检查主体server(RepA)上演示库(AdventureWorks2008R2)的数据文件和日志文件所在的盘符和目录:

    USE master 
    go 
    SELECT  physical_name--物理文件路径 
    FROM    sys.master_files 
    WHERE   database_id = DB_ID('AdventureWorks2008R2')


    本例结果例如以下:


    image


    接下来到镜像server,也就是RepB上检查是否存在这个盘符和目录,假设不存在。要手动创建。以下是手动创建后的目录:


    image


    要注意。兴许还原的时候。要检查还原时文件路径是否也指向同样的目录。文件名称也要一致。

    SQL Server版本号、补丁是否满足镜像要求:


    本例使用同样的安装文件,且均为2008R2(OS和SQL),而且没有联网更新,所以基本上能够确保版本号和补丁一致。假设是正式环境,须要考虑。尽管从2005 SP1開始就支持镜像,可是真正完整支持镜像功能的还是从2005 SP2開始。另外除了SQL Server版本号之外。Windows 的版本号、补丁也要检查,尽管没有非常确切指定OS也必须全然一致,可是一致的版本号会比較少异常。


    SQL Server数据库的恢复模式、兼容级别:

    检查恢复模式和兼容级别,能够使用以下的语句实现:

    USE master 
    go 
    SELECT  name [数据库名] , 
            recovery_model_desc [恢复模式] , 
            CASE WHEN [compatibility_level] = 90 THEN '2005' 
                 WHEN [compatibility_level] = 100 THEN '2008' 
                 WHEN [compatibility_level] > 100 THEN '2008+' 
                 ELSE '2000 or lower version' 
            END [兼容级别] 
    FROM    sys.databases 
    WHERE   name = 'AdventureWorks2008R2'


    image


    在本例中,演示库为简单模式,所以用SSMS或者命令改动:

    SSMS改动:


    image


    T-SQL改动:

    USE [master] 
    GO 
    ALTER DATABASE [AdventureWorks2008R2] SET RECOVERY FULL WITH NO_WAIT 
    GO


    本人建议使用T-SQL改动。因为在server比較繁忙的时候,使用图形化界面操作会非常慢甚至超时。而且一个DBA应该会使用这些T-SQL命令。否则就太不专业了。

    再次运行检查脚本,可见恢复模式已经变回了Full:


    image

    SQL Server上是否有常规的备份作业,特别是日志备份:

    这一步就不做演示了,打开SQL Server Agent就可以检查,另外搭建镜像的人应该具有会看是否有常规备份的能力。

    主体server和镜像server的SQL Server能否互通:

    在前面的第二步中,主要是检查OS的网络,可是OS能连通不代表SQL Server能连通。所以有必要检查SQL Server能否互联。

    方法非常easy。分别打开SSMS。而且输入伙伴server的SQL Server IP/实例名。本例先使用SA来检查:

    在RepA上连接RepB:

    image


    在RepB上连接RepA:

    image

    主体server和镜像server中是否有共享目录:

    前面说过,对非域环境下,须要使用证书来搭建镜像,另外须要对备份文件进行传输,这些都会使用到共享目录,当然能够用别的方式实现,只是共享目录可能是最为简单的方式。本例中,我将在主体server(RepA)上建立一个共享目录。以便RepB能訪问。只是假设条件同意,我更建议在有容错能力的磁盘上(比方RAID、SAN等)创建共享目录。这样即使主体server崩溃,也不至于影响镜像server对共享目录的操作。

    如今来简单操作一下:

    创建目录:

    image


    授予Everyone读写权限:

    再次提醒,针对正式环境,强烈建议使用专用账号,而且适当控制权限,比方对目录在搭建过程中同意全然控制。可是在正式运行时仅仅同意“读”操作等。


    image

    搭建成功:

    image

    检查能否訪问:

    这一步能够在RepB中,输入UNC路径,如本例的:\RepAShareFolders


    image

    到眼下为止。准备工作已经完成。

    以下開始第二步。

    第二步:使用证书配置镜像,并备份还原数据库

    在这一步中,我们将做两件事。第一件是使用证书来配置镜像,第二件是备份还原数据库。在非域环境下。必须使用证书来搭建镜像,所以我把搭建证书放在第一步。有些资料上会把备份还原操作放在证书搭建之前,可是依据个人经验。当磁盘IO、网络性能不佳的时候,备份、传输、还原都会浪费大量的时间(个人操作过2个小时),而且期间server差点儿不能操作。这样的时候,我会选择先搭建好。再还原。然后立即进行同步。

    创建证书:

    假设server使用Local System作为SQL Server服务账号,就须要使用证书授权。证书授权同一时候也能够在你的server不能通过其它server的账号訪问对方server或者你不想授权给Windows登录时使用。

    使用证书搭建镜像的过程例如以下:

    1. 创建数据库主密钥(假设主密钥不存在)。
    2. 在Master数据库中创建证书并用主密钥加密。
    3. 使用证书授权创建端点(endpoint)。
    4. 备份证书成为证书文件。

    5. 在server上创建登录账号,用于提供其它实例訪问。
    6. 在master库中创建用户。并映射到上一步的登录账号中。
    7. 把证书授权给这些用户。
    8. 在端点上授权。
    9. 设置主体server的镜像伙伴。

    10. 设置镜像server的主体伙伴。
    11. 配置见证server。

    Step 1:创建数据库主密钥

    主密钥的用处在这里是用于加密证书,当然主密钥不仅仅仅仅有这个作用。对数据库主密钥的password及存储保护要小心,这是实力级别的对象,影响面非常广。能够使用以下语句来创建:

    USE master 
    GO 
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';
     
    /*
    --删除主密钥
    USE master;
    DROP MASTER KEY
    */


    使用同样方式在镜像server创建数据库主密钥。

    Step 2:创建证书,并用主密钥加密

    创建证书时。默认在创建日期開始一年后过期,所以针对证书的创建,要注意其过期时间。以下是在“主体server”上创建HOST_A_cert证书的创建

    USE master 
    GO 
    CREATE CERTIFICATE Host_A_Cert  
    WITH Subject = 'Host_A Certificate', 
    Expiry_Date = '2015-1-1'; --过期日期
     
    /*
    --删除证书
    USE master;
    DROP CERTIFICATE HOST_A_cert
    */


    使用同样的方法在镜像server上实现对HOST_B_cert证书的创建

    Step 3:创建端点

    能够使用以下的代码在主体server中创建端点,而且指定使用5022,port,port在镜像配置过程中不强制使用特定port(被占用或者特定port如1433除外)。

    --使用Host_A_Cert证书创建端点 
    IF NOT EXISTS ( SELECT  1 
                    FROM    sys.database_mirroring_endpoints ) 
        BEGIN 
            CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022, 
                LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = 
                CERTIFICATE Host_A_Cert, ENCRYPTION = REQUIRED Algorithm AES, ROLE = 
                ALL ); 
        END


    在镜像server对证书名稍作改动。创建镜像server的端点。

    Step 4:备份证书

    备份证书的目的是发送到别的server并导入证书,以便别的server能通过证书訪问这台server(主体server)。

    BACKUP CERTIFICATE Host_A_Cert 
    TO FILE = 'C:ShareFoldersHost_A_Cert.cer';

     

    同理。在镜像server上反复一次。注意证书名和路径。备份之后能够在目标目录上看到有一个cer文件:


    image


    这里有个建议,分别在RepA和RepB本地创建一个单独的目录Certifications。然后用来存储本server和伙伴server的证书。证书一直存放在共享目录并不合理。

    本例分别在本机的C盘上创建一个Certifications的目录并存放全部的证书,如图:


    image

    Step 5:创建登录账号

    针对每一个server单独创建一个server登录账号。这里仅仅须要创建一个登录给镜像server就可以:

    CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';

    同理,在镜像server上创建Host_A_Login给主体server。

    Step 6:创建用户,并映射到Step 5中创建的登录账号中

    在主体server上运行:

    CREATE USER Host_B_User For Login Host_B_Login;

    同理在镜像server也创建。

    Step 7:使用证书授权用户

    创建一个新的证书,并使用从伙伴server中复制过来的证书导入,然后映射step 6中的账号到这个新证书上。

    CREATE CERTIFICATE Host_B_Cert 
    AUTHORIZATION Host_B_User 
    FROM FILE = 'C:CertificationsHost_B_Cert.cer';

    注意镜像server上也同样。

    Step 8:把Step 5中的登录账号授权訪问port

    GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];

    镜像server也一样。

    到此为止。配置镜像的步骤已经完成,兴许会给出尽可能自己主动化的配置脚本。


    备份还原数据库:

    这一步,把主体server(RepA)上的演示数据库备份并还原到RepB上进行初始化操作:

    1. 完整备份AdventureWork2008R2到共享目录C:ShareFolders
    2. 复制备份文件到镜像server(假设权限足够,直接使用共享路径来还原就可以)
    3. 以Nonrecovery选项还原AdventureWork2008R2到镜像server(RepB)
    4. 日志备份AdventureWork2008R2,并同样方式还原到RepB

    Step 1:完整备份:

    image


    Step 2:在镜像server(RepB)上还原数据库,并使用Nonrecovery方式:

    注意路径和还原的文件名称:

    image


    Step 3:备份及还原日志:

    同样以Nonrecovery方式还原:

    image

    第三步:启动镜像

    前面两步主要是对镜像的配置准备。以下開始正式启动镜像:

    Step 1:右键主体server的主体数据库,选择【镜像】

    image


    Step 2:选择【配置镜像】:这一步我们主要是获取主体server的网络地址。看下图的红框部分

    image

    Step 3:在镜像server(RepB)上运行以下脚本:

    注意顺序,先要在RepB上运行

    ALTER DATABASE AdventureWorks2008R2 
        SET PARTNER = 'TCP://RepA:5022';
    GO


    Step 4:在主体server(RepA)运行以下脚本。把RepB增加成RepA的伙伴

    ALTER DATABASE AdventureWorks2008R2 
        SET PARTNER = 'TCP://RepB:5022';
    GO


    	运行后。能够看到RepA上的镜像配置:
    image 

    Step 5:切换模式

    Step 3~4中的搭建是使用高安全模式搭建,假设希望使用高性能模式(再次提醒。本例没有使用见证server,所以不能使用自己主动故障转移的高安全模式)。能够使用以下脚本在RepA上实现:

    ALTER DATABASE AdventureWorks2008R2 
        SET PARTNER SAFETY OFF
    GO


    再次打开,可见运行模式已经是高性能模式:


    image

    Step 6:验证故障转移

    以下再用语句来试一下能否故障转移,先检查两个库的状态,这里用个小技巧,使用 【注冊server】。如图:


    image


    然后新建注冊:

    image

    image 

    同理把RepB也加进去:

    image 

    然后打开一个查询窗体,用于一次性查询两个server。前提是要有足够的权限。本例用sa来连接:

    image 

    注意下图的粉红色的部分。假设出现(1/2)这样的情况,表示有一台server不能连接成功:

    image 

    结果例如以下:我们仅仅关注一小部分内容:

    image 

    如今切换回RepA的查询窗体,然后输入:

    ALTER DATABASE AdventureWorks2008R2 SET PARTNER FAILOVER;--在主体server上运行


    然后到【注冊管理器】中再查询。能够看到如今RepB已经是Principal。也就是主体server了:


    image 

    读者能够用GUI界面操作,这里就不做过多演示。


    带有见证server的非域环境镜像配置


    以下演示怎样把见证server加进镜像环境中,首先,我们保持前面的配置,即搭建好主体和镜像server,然后我们使用一个Win7的系统来做见证server,上面装有SQL Server 2008 R2企业版,能够使用Express或者工作组版来做见证server。


    Step 1:验证三台server的网络互通。这里就不做累赘,读者能够參考前面的方法检查。

    Step 2:依据前面的步骤。在见证server上创建主密钥、证书等:

    --创建主密钥 
    USE master; 
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd'; --演示所需。否则不要设置这么简单的password 
    GO
    /* 
    --删除主密钥 
    USE master; 
    DROP  MASTER KEY 
    */ 
    USE master; 
    CREATE CERTIFICATE HOST_C_cert 
       WITH SUBJECT = 'HOST_C certificate'--在Winess实例上创建证书。命名为HOST_C_cert,这个选项是描写叙述证书 
       ,EXPIRY_DATE ='2015-6-5' ;--证书过期时间,能够适当设置长一点。详细按实际须要设置 
    GO
    /* 
    --删除证书 
    USE master; 
    DROP CERTIFICATE HOST_C_cert 
    */ 
    CREATE ENDPOINT Endpoint_Mirroring 
       STATE = STARTED 
       AS TCP ( 
          LISTENER_PORT=5022                        --使用5022port,这个port能够改成未被使用的port,可是镜像过程中的全部合作者都应该使用同样的port 
          , LISTENER_IP = ALL 
       ) 
       FOR DATABASE_MIRRORING ( 
          AUTHENTICATION = CERTIFICATE HOST_C_cert    --使用证书来授权端点 
          , ENCRYPTION = REQUIRED ALGORITHM AES 
          , ROLE = ALL                                --表示这个端点能够作为不论什么角色,包含主server、镜像server、见证server。详细可看联机丛书。 
       ); 
    GO
    /* 
    --删除镜像端点 
    IF  EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'Endpoint_Mirroring') 
    DROP ENDPOINT [Endpoint_Mirroring] 
    GO 
    */ 
    BACKUP CERTIFICATE HOST_C_cert TO FILE = 'C:CertificationsHOST_C_cert.cer'; 
    GO


    确保RepA、RepB、Win7这三台机上都有主体、镜像和见证所产生的3个证书。

    在见证server上为主体、镜像server创建以证书为验证的账号、username及端点。

    --在Witness实例上创建一个登录名给Principal实例 
    USE master; 
    CREATE LOGIN HOST_A_login WITH PASSWORD = 'Pa$$w0rd'; 
    GO 
    --创建一个用于给这个登录名 
    CREATE USER HOST_A_user FOR LOGIN HOST_A_login; 
    GO 
    --让该帐号使用证书授权 
    CREATE CERTIFICATE HOST_A_cert 
       AUTHORIZATION HOST_A_user 
       FROM FILE = 'C:CertificationsHOST_A_cert.cer' 
    GO 
    --授予这个新账号连接端点的权限 
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_A_login; 
    GO
    /* 
    --删除账号 
    DROP LOGIN HOST_A_user 
    */ 
    --在Witness实例上创建一个登录名给Mirror实例 
    USE master; 
    CREATE LOGIN HOST_B_login WITH PASSWORD = 'Pa$$w0rd'; 
    GO 
    --创建一个用于给这个登录名 
    CREATE USER HOST_B_user FOR LOGIN HOST_B_login; 
    GO 
    --让该帐号使用证书授权 
    CREATE CERTIFICATE HOST_B_cert 
       AUTHORIZATION HOST_B_user 
       FROM FILE = 'C:CertificationsHOST_B_cert.cer' 
    GO 
    --授予这个新账号连接端点的权限 
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_B_login; 
    GO
    /* 
    --删除账号 
    DROP LOGIN HOST_B_user 
    */


    分别在RepA和RepB中运行以下语句,为见证server创建连接端点的权限:

    USE master; 
    CREATE LOGIN HOST_C_login WITH PASSWORD = 'Pa$$w0rd'; 
    GO 
    --创建一个用于给这个登录名 
    CREATE USER HOST_C_user FOR LOGIN HOST_C_login; 
    GO 
    --让该帐号使用证书授权 
    CREATE CERTIFICATE HOST_C_cert 
       AUTHORIZATION HOST_C_user 
       FROM FILE = 'C:CertificationsHOST_C_cert.cer' 
    GO 
    --授予这个新账号连接端点的权限 
    GRANT CONNECT ON ENDPOINT::DatabaseMirroring TO HOST_C_login; 
    GO


    在RepB中应该存在这两个登录。而在RepA中应该存在Host_B_Login和Host_C_Login两个账户:


    image


    然后在主体server上运行以下语句,增加见证server:

    ALTER DATABASE AdventureWorks2008R2   SET WITNESS = 'TCP://win7:5022'


    完成之后,打开RepA的镜像配置。能够见到见证server已经增加:


    image


    我们能够測试一下,把RepA的SQL Server服务关闭。实现主体server的“故障”。看是否RepB能自己主动切换:

    第一步,检查RepB的状态:

    image


    第二步,关闭RepA的服务:

    image

    第三步,刷新RepB的状态:

    image


    可见已经切换过去,而且状态为Disconnected,注意,即使此时RepA再次联机,也不会自己主动切换成为主体server。须要手动切换,这部分读者能够自行測试。把RepA再次启动之后,能够对照镜像的状态。从Disconnected变成了Synchronized。


    image


    到处为止。非域环境下的镜像配置已经完成。

  • 相关阅读:
    MyBatis学习总结_17_Mybatis分页插件PageHelper
    MyBatis学习总结_16_Mybatis使用的几个建议
    MyBatis学习总结_15_定制Mybatis自动代码生成的maven插件
    MyBatis学习总结_14_Mybatis使用技巧总结
    MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别
    Git实战之Git创建版本库
    Oracle数据库之日期函数
    Oracle数据库之单表查询
    版本发布后测试人员需要做的工作
    oracle数据库之数据插入、修改和删除
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6713322.html
Copyright © 2011-2022 走看看