第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

原文: 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

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

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

准备条件

服务器

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

 

注:Rep是Replication(复制)的缩写,RepA和RepB一开始是搭建来作复制演示,本文借用这3台服务器。数据库

SQL Server

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

演示数据库

AdventureWorks2008R2服务器

 

第一步:检查环境

 

因为在非域环境内,因此须要作的检查相对来讲多不少,下面按照演示环境,逐个测试下面的条件:网络

  1. Windows 帐号。
  2. 网络是否能联通,而且端口可用。
  3. 主体服务器和镜像服务器的磁盘配置是否正确。
  4. SQL Server版本、补丁是否知足镜像要求。
  5. SQL Server数据库的恢复模式、兼容级别。
  6. SQL Server上是否有常规的备份做业,特别是日志备份。
  7. 主体服务器和镜像服务器的SQL Server可否互通。
  8. 主体服务器和镜像服务器中是否有共享文件夹。

Windows帐号:

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

网络是否联通,而且端口可用:

非单机下的高可用都严重依赖网络,网络不通,一切都白搭。因此首先要确保网络是能互访的。下面测试一下本例中使用的主体服务器和镜像服务器是否能互访:性能

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

 image

在RepB上ping RepA(本例IP地址192.168.1.2)搜索引擎

 image

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

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

能够在“开始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows功能”进入Windows 功能设置对话框。找到并勾选“Telnet客户端”和“Telnet服务器”,最后“肯定”。依据版本不一样,开启方式也会不一样,具体版本请自行查找搜索引擎的方案。

主体服务器和镜像服务器的磁盘配置是否正确:

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

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


本例结果以下:


image


接下来到镜像服务器,也就是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修改,由于在服务器比较繁忙的时候,使用图形化界面操做会很慢甚至超时。而且一个DBA应该会使用这些T-SQL命令。不然就太不专业了。

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


image

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

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

主体服务器和镜像服务器的SQL Server可否互通:

在前面的第二步中,主要是检查OS的网络,可是OS能连通不表明SQL Server能连通,因此有必要检查SQL Server是否能互联。方法很简单,分别打开SSMS,而且输入伙伴服务器的SQL Server IP/实例名。本例先使用SA来检查:

在RepA上链接RepB:

image


在RepB上链接RepA:

image

 

主体服务器和镜像服务器中是否有共享文件夹:

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

如今来简单操做一下:

建立文件夹:

image


授予Everyone读写权限:

再次提醒,针对正式环境,强烈建议使用专用帐号,而且适当控制权限,好比对文件夹在搭建过程当中容许彻底控制,可是在正式运行时只容许“读”操做等。


image

搭建成功:

image

检查是否能访问:

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


image

到目前为止,准备工做已经完毕。下面开始第二步。

 

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

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

 

建立证书:

若是服务器使用Local System做为SQL Server服务帐号,就须要使用证书受权。证书受权同时也能够在你的服务器不能经过其余服务器的帐号访问对方服务器或者你不想受权给Windows登陆时使用。

使用证书搭建镜像的步骤以下:

  1. 建立数据库主密钥(若是主密钥不存在)。
  2. 在Master数据库中建立证书并用主密钥加密。
  3. 使用证书受权建立端点(endpoint)。
  4. 备份证书成为证书文件。
  5. 在服务器上建立登陆帐号,用于提供其余实例访问。
  6. 在master库中建立用户,并映射到上一步的登陆帐号中。
  7. 把证书受权给这些用户。
  8. 在端点上受权。
  9. 设置主体服务器的镜像伙伴。
  10. 设置镜像服务器的主体伙伴。
  11. 配置见证服务器。

Step 1:建立数据库主密钥

主密钥的用处在这里是用于加密证书,固然主密钥不只仅只有这个做用。对数据库主密钥的密码及存储保护要当心,这是实力级别的对象,影响面很是广。可使用下面语句来建立:

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


使用相同方式在镜像服务器建立数据库主密钥。

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

建立证书时,默认在建立日期开始一年后过时,因此针对证书的建立,要注意其过时时间。下面是在“主体服务器”上建立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
*/


使用相同的方法在镜像服务器上实现对HOST_B_cert证书的建立

Step 3:建立端点

可使用下面的代码在主体服务器中建立端点,而且指定使用5022,端口,端口在镜像配置过程当中不强制使用特定端口(被占用或者特定端口如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


在镜像服务器对证书名稍做修改,建立镜像服务器的端点。

Step 4:备份证书

备份证书的目的是发送到别的服务器并导入证书,以便别的服务器能经过证书访问这台服务器(主体服务器)。

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

 

同理,在镜像服务器上重复一次,注意证书名和路径。备份以后能够在目标文件夹上看到有一个cer文件:


image


这里有个建议,分别在RepA和RepB本地建立一个单独的文件夹Certifications,而后用来存储本服务器和伙伴服务器的证书,证书一直存放在共享文件夹并不合理。本例分别在本机的C盘上建立一个Certifications的文件夹并存放全部的证书,如图:


image

Step 5:建立登陆帐号

针对每一个服务器单首创建一个服务器登陆帐号,这里只须要建立一个登陆给镜像服务器便可:

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

同理,在镜像服务器上建立Host_A_Login给主体服务器。

Step 6:建立用户,并映射到Step 5中建立的登陆帐号中

在主体服务器上运行:

CREATE USER Host_B_User For Login Host_B_Login;

同理在镜像服务器也建立。

Step 7:使用证书受权用户

建立一个新的证书,并使用从伙伴服务器中复制过来的证书导入,而后映射step 6中的帐号到这个新证书上。

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

注意镜像服务器上也一样。

Step 8:把Step 5中的登陆帐号受权访问端口

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

镜像服务器也同样。

到此为止,配置镜像的步骤已经完毕,后续会给出尽量自动化的配置脚本。


备份还原数据库:

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

  1. 完整备份AdventureWork2008R2到共享文件夹C:\ShareFolders
  2. 复制备份文件到镜像服务器(若是权限足够,直接使用共享路径来还原便可)
  3. 以Nonrecovery选项还原AdventureWork2008R2到镜像服务器(RepB)
  4. 日志备份AdventureWork2008R2,并一样方式还原到RepB

Step 1:完整备份:

image


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

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

image


Step 3:备份及还原日志:

一样以Nonrecovery方式还原:

image

第三步:启动镜像

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

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

image


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

image

Step 3:在镜像服务器(RepB)上执行下面脚本:

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

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


Step 4:在主体服务器(RepA)执行下面脚本,把RepB添加成RepA的伙伴

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


 执行后,能够看到RepA上的镜像配置:
image 

Step 5:切换模式

Step 3~4中的搭建是使用高安全模式搭建,若是但愿使用高性能模式(再次提醒,本例没有使用见证服务器,因此不能使用自动故障转移的高安全模式),可使用下面脚本在RepA上实现:

ALTER DATABASE AdventureWorks2008R2 
    SET PARTNER SAFETY OFF
GO


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


image

Step 6:验证故障转移

下面再用语句来试一下是否能故障转移,先检查两个库的状态,这里用个小技巧,使用 【注册服务器】,如图:


image


而后新建注册:

image

image 

同理把RepB也加进去:

image 

而后打开一个查询窗口,用于一次性查询两个服务器,前提是要有足够的权限,本例用sa来链接:

image 

注意下图的粉红色的部分,若是出现(1/2)这种状况,表示有一台服务器不能链接成功:

image 

结果以下:咱们只关注一小部份内容:

image 

如今切换回RepA的查询窗口,而后输入:

ALTER DATABASE AdventureWorks2008R2 SET PARTNER FAILOVER;--在主体服务器上执行


而后到【注册管理器】中再查询,能够看到如今RepB已是Principal,也就是主体服务器了:


image 

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


带有见证服务器的非域环境镜像配置


下面演示如何把见证服务器加进镜像环境中,首先,咱们保持前面的配置,即搭建好主体和镜像服务器,而后咱们使用一个Win7的系统来作见证服务器,上面装有SQL Server 2008 R2企业版,可使用Express或者工做组版来作见证服务器。


Step 1:验证三台服务器的网络互通,这里就不作累赘,读者能够参考前面的方法检查。

Step 2:根据前面的步骤,在见证服务器上建立主密钥、证书等:

--建立主密钥 
USE master; 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd'; --演示所需,不然不要设置这么简单的密码 
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                        --使用5022端口,这个端口能够改为未被使用的端口,可是镜像过程当中的全部合做者都应该使用相同的端口 
      , LISTENER_IP = ALL 
   ) 
   FOR DATABASE_MIRRORING ( 
      AUTHENTICATION = CERTIFICATE HOST_C_cert    --使用证书来受权端点 
      , ENCRYPTION = REQUIRED ALGORITHM AES 
      , ROLE = ALL                                --表示这个端点能够做为任何角色,包括主服务器、镜像服务器、见证服务器。具体可看联机丛书。 
   ); 
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:\Certifications\HOST_C_cert.cer'; 
GO


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

 

在见证服务器上为主体、镜像服务器建立以证书为验证的帐号、用户名及端点。

--在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:\Certifications\HOST_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:\Certifications\HOST_B_cert.cer' 
GO 
--授予这个新帐号链接端点的权限 
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO HOST_B_login; 
GO
/* 
--删除帐号 
DROP LOGIN HOST_B_user 
*/


分别在RepA和RepB中执行下面语句,为见证服务器建立链接端点的权限:

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:\Certifications\HOST_C_cert.cer' 
GO 
--授予这个新帐号链接端点的权限 
GRANT CONNECT ON ENDPOINT::DatabaseMirroring TO HOST_C_login; 
GO


在RepB中应该存在这两个登陆,而在RepA中应该存在Host_B_Login和Host_C_Login两个帐户:


image


而后在主体服务器上执行下面语句,加入见证服务器:

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


完毕以后,打开RepA的镜像配置,能够见到见证服务器已经加入:


image


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

第一步,检查RepB的状态:

image


第二步,关闭RepA的服务:

image

第三步,刷新RepB的状态:

image


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


image


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

相关文章
相关标签/搜索