第三篇——第二部分——第四文 配置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


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

原文地址:https://www.cnblogs.com/cynchanpin/p/6713322.html