通过使用 SQL Server 数据库镜像配置单个服务器场中的可用性

本文介绍如何使用高可用性数据库镜像在 Microsoft Office SharePoint Server 2007 的服务器场内配置可用性。本文假定您熟悉规划可用性 (Office SharePoint Server) 中介绍的概念和术语。

Microsoft SQL Server 2005 数据库镜像通过在每次将主体数据库的事务日志缓冲写入磁盘时,都直接将事务从主体数据库和服务器发送到镜像数据库和服务器,从而提供可用性支持。为了在 Office SharePoint Server 2007 服务器场内实现可用性,我们建议您使用高可用性数据库镜像,也称为带自动故障转移的高安全模式。高可用性数据库镜像涉及三个服务器实例:主体、镜像和见证服务器。见证服务器使 SQL Server 能够自动从主体服务器故障转移到镜像服务器。从主体数据库故障转移到镜像数据库通常需要几秒钟的时间。

在 SharePoint 场内,镜像可为所有数据库提供冗余 - 当数据库进行故障转移时,我们假定您的前端 Web 服务器保持可用。下图显示了如何配置镜像以便在服务器场内提供高可用性。

服务器场中所有数据库的镜像关系图

Office SharePoint Server 2007 感知不到镜像。若要将镜像用作可用性解决方案,建议您将数据库配置为使用 SQL Server 客户端别名,并运行脚本以便在故障转移时更改 SQL Server 客户端别名。

数据库镜像要求

在配置数据库镜像之前,请确保数据库和系统满足以下要求:

  • 建议系统的延迟不超过 1 毫秒。

  • 系统带宽最好应为每秒 1 GB。

  • 将在主体服务器和镜像服务器之间实时复制日志,并且复制操作可能会影响性能。请确保主体服务器和镜像服务器上都有足够的内存和带宽。

  • 主体服务器和镜像服务器必须运行 Microsoft SQL Server 2005 Service Pack 1 (SP1) 的同一版本。只有 Standard Editon、Developer Edition 和 Enterprise Edition 中才提供了数据库镜像。见证服务器可以运行 SQL Server 2005 的任意版本,其中包括 SQL Server 2005 Express Edition。

  • 镜像仅适用于使用完整恢复模式的数据库。

    默认情况下,Office SharePoint Server 2007 SSP 数据库配置为使用简单恢复模式。若要配置数据库镜像,数据库的恢复模式必须设置为“完整”。有关如何为数据库设置恢复模式的信息,请参阅如何查看或更改数据库的恢复模式 (SQL Server Management Studio) (https://go.microsoft.com/fwlink/?linkid=132075&clcid=0x804)。

  • 如果计划镜像 SSP 数据库,请考虑这些数据库的事务日志大小可能会变得非常大。若要解决此问题,请考虑建立一个在必要时截断事务日志的恢复计划。有关详细信息,请参阅 Microsoft 知识库中的以下文章:如何防止 SQL Server 数据库的事务日志异常增长 (https://go.microsoft.com/fwlink/?linkid=111458&clcid=0x804)。

  • 每个数据库镜像会话都至少会为每个数据库创建两个线程。请确保数据库服务器有足够的线程可供分配,来镜像所有支持的数据库。如果线程不足,那么,在将更多数据库添加到会话时,性能可能会大幅降低。

    在 Microsoft 的宿主环境中,我们发现,从承载 SharePoint 产品和技术的 SQL Server 的单一实例中镜像数据库时,实际最大值为 50 个数据库。这一最大值是根据镜像的资源密集性(每个主体实例和镜像实例都需要专门的线程)和测试得出的。视以下因素而定,您的结果可能有所不同:

    • 主体实例和镜像实例的内存

    • 主体实例和镜像实例的处理能力

    • 主体实例和镜像实例上 I/O 子系统的带宽

    • 每个数据库上的工作负荷所生成的事务日志的数量

    • 主体实例和镜像实例之间的网络带宽

有关数据库镜像的性能和规模的详细信息,请参阅 SQL Server 2005 中的数据库镜像(该链接可能指向英文页面) (https://go.microsoft.com/fwlink/?linkid=83566&clcid=0x804)(该链接可能指向英文页面)。

与数据库镜像关联的安全性

数据库镜像使用 TCP 会话将事务日志从一台服务器传输到另一台服务器,并监控系统的当前运行状况以实现自动故障转移。当打开端口进行连接时,将在会话级别执行身份验证。

  • Windows 身份验证(NTLM 或 Kerberos)

  • 证书

本文档介绍如何使用带证书的数据库镜像。有关如何对数据库镜像使用 Windows 身份验证的信息,请参阅示例:使用 Windows 身份验证设置数据库镜像 (Transact-SQL) (https://go.microsoft.com/fwlink/?linkid=83567&clcid=0x804)。

除非网络是安全的,否则应对在会话期间传输的数据进行加密。本文档概述了如何通过使用 RC4 对通过网络传输的数据设置加密,但数据库镜像同时支持 AES 和 RC4 加密算法。有关与数据库镜像关联的安全性的详细信息,请参阅数据库镜像传输安全性 (https://go.microsoft.com/fwlink/?linkid=83569&clcid=0x804)。

SharePoint 安全性和镜像服务器

在设置镜像数据库时,将不会针对镜像在主数据库和 msdb 数据库中自动配置要用于 SharePoint 场的数据库的 SQL Server 登录名和权限。相反,您必须为所需的登录配置权限。这些登录包括(但不限于):

  • 管理中心应用程序池帐户应是 dbcreator 和 securityadmin 固定服务器角色的成员。

  • 所有应用程序池帐户以及搜索服务和默认内容访问帐户应具有 SQL Server 登录名(尽管未将这些帐户分配给 SQL Server 固定服务器角色或固定数据库角色)。

  • SharePoint 组“Farm Administrators”的成员同时应具有 SQL Server 登录名,并且应与管理中心应用程序池帐户同属相同的角色。

建议您通过运行脚本将登录名和权限从主体服务器传输到镜像服务器。知识库文章 918992“如何在 SQL Server 2005 实例之间传输登录和密码” (https://go.microsoft.com/fwlink/?linkid=122053&clcid=0x804) 中提供了示例脚本。有关如何在实例之间传输 SQL Server 元数据的更多常规信息,请参阅 SQL Server 联机丛书文章当数据库在其他服务器实例上可用时管理元数据 (https://go.microsoft.com/fwlink/?linkid=122055&clcid=0x804)。

建议使用的拓扑

建议您维持主体服务器到镜像服务器一对一的映射,以确保与 SharePoint 产品和技术的兼容性。

支持的拓扑包括镜像所有内容数据库、配置数据库和管理中心内容数据库。此外,对于 Office SharePoint Server,您可以镜像 SSP 数据库、SSP 搜索数据库和 SSP 内容数据库。

以下各图演示了一些支持的拓扑。

镜像支持的拓扑

请避免使用没有匹配主体服务器和镜像服务器的拓扑。同时,请将配置数据库和管理内容数据库保留在同一服务器上。下图演示了不受支持的拓扑。

镜像不支持的拓扑

设置 SQL Server 连接别名

SQL Server 连接别名是一种定义的替代名称,可用于连接到 SQL Server 的实例。如果使用 SharePoint 产品和技术,您可以创建所有服务器(包括前端 Web 服务器)用于连接到 SQL Server 实例的 SQL Server 别名。当镜像数据库服务器进行故障转移时,您可在前端 Web 服务器上调整别名以指向镜像服务器(而不是主体服务器)。建议您在实现镜像之前设置 SQL Server 连接别名。

备注

如果为现有服务器场设置别名,请使用与主体服务器相同名称的别名,这样,不必更改前端 Web 服务器即可开始使用别名。

请在每台前端 Web 服务器以及连接到 SQL Server 的每台服务器上完成以下步骤。

  1. 启动 SQL Server Native Client 网络实用工具 (%SYSTEM%\cliconfg.exe)。

  2. 单击“别名”选项卡,然后单击“添加”。

    此时将出现“添加网络库配置”对话框。

  3. 选择“TCP/IP”,键入别名以及要与别名关联的服务器名称,然后单击“确定”。

  4. 为连接到 SQL Server 的所有服务器重复以上步骤。

设置数据库镜像

本节介绍如何使用 Transact-SQL 为 SQL Server 数据库设置高可用性模式数据库镜像。

若要使用 SharePoint 产品和技术设置数据库镜像,您必须单独处理要进行镜像的每个数据库。

下一节中的步骤适用于以下服务器场拓扑:

  • 一台或多台前端 Web 服务器

  • 运行 SQL Server 2005 的三台服务器:主体服务器、镜像服务器和见证服务器

  • 一个配置数据库

  • 多个内容数据库

  • 一个或多个 SSP 数据库

配置具有证书和完整恢复模式的数据库镜像

每一步都列出了应在其上执行该步骤的服务器。使用 Transact-SQL 将这些命令发送到 SQL Server。占位符信息由尖括号 (<>) 表示,并且应替换为特定于您的部署的信息。

针对出站连接设置主体服务器

  1. 在主体服务器上,创建证书并打开用于镜像的端口。

    --On master database, create the database Master Key, if needed
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<test1234->';
    GO
    -- Make a certificate for this server instance.
    USE master;
    CREATE CERTIFICATE <MASTER_HostA_cert> 
       WITH SUBJECT = '<Master_HostA certificate>';
    GO
    --Create mirroring endpoint for server instance using the certificate
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=5024
          , LISTENER_IP = ALL
       ) 
       FOR DATABASE_MIRRORING ( 
          AUTHENTICATION = CERTIFICATE <MASTER_HostA_cert>
          , ENCRYPTION = REQUIRED ALGORITHM RC4
          , ROLE = ALL
       );
    GO
    
  2. 在主体服务器上备份证书。

    --Back up HOST_A certificate.
    BACKUP CERTIFICATE MASTER_HostA_cert TO FILE = '<c:\MASTER_HostA_cert.cer>';
    GO
    
  3. 在主体服务器上备份数据库。此示例使用配置数据库。为所有数据库重复此步骤。

    USE master;
    --Ensure that SharePoint_Config uses the full recovery model.
    ALTER DATABASE SharePoint_Config
       SET RECOVERY FULL;
    GO
    USE SharePoint_Config
    BACKUP DATABASE SharePoint_Config 
        TO DISK = '<c:\SharePoint_Config.bak>' 
        WITH FORMAT
    GO
    BACKUP Log SharePoint_Config 
        TO DISK = '<c:\SharePoint_Config_log.bak>' 
        WITH FORMAT
    GO
    
  4. 将备份文件复制到镜像服务器。为所有数据库重复此步骤。

  5. 通过使用任何安全的复制方法,将备份证书文件(例如,C:\HOST_HostA_cert.cer)复制到镜像服务器。

  6. 在主体服务器上,为镜像服务器创建登录和用户,将证书与该用户关联,并授予合作关系登录连接权限。

    --Create a login on HOST_A for HOST_B
    USE master;
    CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>';
    GO
    --Create a user for that login.
    CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <HOST_HostB_cert>
       AUTHORIZATION <HOST_HostB_user>
       FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>];
    GO
    

针对出站连接设置镜像服务器

  1. 在镜像服务器上,创建证书并打开用于镜像的端口。

    --On master database, create the database Master Key, if needed.
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1234-test>';
    GO
    -- Make a certificate on the HOST_B server instance.
    CREATE CERTIFICATE <HOST_HostB>
       WITH SUBJECT = '<HOST_HostB certificate for database mirroring>';
    GO
    --Create a mirroring endpoint for the server instance on HOST_B.
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=5024
          , LISTENER_IP = ALL
       ) 
       FOR DATABASE_MIRRORING ( 
          AUTHENTICATION = CERTIFICATE <HOST_HostB>
          , ENCRYPTION = REQUIRED ALGORITHM RC4
          , ROLE = ALL
       );
    GO
    
  2. 在镜像服务器上备份证书。

    --Back up HOST_B certificate.
    BACKUP CERTIFICATE <HOST_HostB> TO FILE = '<C:\HOST_HostB_cert.cer>';
    GO 
    
  3. 通过使用任何安全的复制方法,将备份证书文件(例如,C:\HOST_HostB_cert.cer)复制到主体服务器。

  4. 在镜像服务器上,从备份文件中还原数据库。此示例使用配置数据库。为所有数据库重复此步骤。

    RESTORE DATABASE SharePoint_Config 
        FROM DISK = '<c:\SharePoint_Config.bak>' 
        WITH NORECOVERY
    GO
    RESTORE log SharePoint_Config 
        FROM DISK = '<c:\SharePoint_Config_log.bak>' 
        WITH NORECOVERY
    GO
    

针对入站连接设置镜像服务器

  • 在镜像服务器上,为主体服务器创建登录和用户,将证书与该用户关联,并授予合作关系登录连接权限。

    --Create a login on HOST_B for HOST_A
    USE master;
    CREATE LOGIN <MASTER_HostA_login> WITH PASSWORD = '<test1234->';
    GO
    --Create a user for that login.
    CREATE USER <MASTER_HostA_user> FOR LOGIN <MASTER_HostA_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <MASTER_HostA_cert>
       AUTHORIZATION <MASTER_HostA_user>
       FROM FILE = '<c:\MASTER_HostA_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<MASTER_HostA_login>];
    GO
    

针对入站连接设置主体服务器

  • 在主体服务器上,为镜像服务器创建登录和用户,将证书与该用户关联,并授予合作关系登录连接权限。

    --Create a login on HOST_A for HOST_B
    USE master;
    CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>';
    GO
    --Create a user for that login.
    CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <HOST_HostB_cert>
       AUTHORIZATION <HOST_HostB_user>
       FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>];
    GO
    

设置镜像伙伴

  1. 在主体服务器上设置镜像合作关系。此示例使用配置数据库。为所有数据库重复此步骤。

    --At HOST_A, set server instance on HOST_B as partner (mirror server).
    ALTER DATABASE SharePoint_Config
        SET PARTNER = '<TCP://databasemirror.adatum.com:5024>';
    GO
    
  2. 在镜像服务器上设置镜像合作关系。此示例使用配置数据库。为所有数据库重复此步骤。

    --At HOST_B, set server instance on HOST_A as partner (principal server):
    ALTER DATABASE SharePoint_Config 
        SET PARTNER = '<TCP://databasemaster.adatum.com:5024>';
    GO
    

设置见证服务器

每一步都列出了应在其上执行该步骤的服务器。使用 Transact-SQL 将这些命令发送到 SQL Server。占位符信息由尖括号 (<>) 表示,并且应替换为特定于您的部署的信息。

  1. 在见证服务器上,设置证书并打开端口。

    --On master database, create the database Master Key, if needed
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1234test->';
    GO
    -- Make a certificate for this server instance.
    USE master;
    CREATE CERTIFICATE <WITNESS_HostC_cert> 
       WITH SUBJECT = '<Witness_HostC certificate>';
    GO
    --Create mirroring endpoint for server instance using the certificate
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=5024
          , LISTENER_IP = ALL
       ) 
       FOR DATABASE_MIRRORING ( 
          AUTHENTICATION = CERTIFICATE <WITNESS_HostC_cert
          , ENCRYPTION = REQUIRED ALGORITHM RC4
          , ROLE = ALL
       );
    GO
    
  2. 在主体服务器上备份证书。

    --Back up HOST_C certificate 
    BACKUP CERTIFICATE <WITNESS_HostC_cert> TO FILE = '<c:\ WITNESS_HostC_cert.cer>';
    GO
    
  3. 通过使用任何安全的复制方法,将备份证书文件(例如,C:\WITNESS_HOSTC_cert.cer)复制到主体服务器和镜像服务器。

  4. 通过使用任何安全的复制方法,将备份证书文件(例如,C:\WITNESS_HOSTC_cert.cer)复制到主体服务器和镜像服务器。

    --Create a login on Witness HOST_C for Principal HOST_A
    USE master;
    CREATE LOGIN <MASTER_HostA_login> WITH PASSWORD = '<test1234->';
    GO
    --Create a user for that login.
    CREATE USER <MASTER_HostA_user> FOR LOGIN <MASTER_HostA_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <MASTER_HostA_cert>
       AUTHORIZATION <MASTER_HostA_user>
       FROM FILE = '<c:\MASTER_HostA_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<MASTER_HostA_login>];
    GO
    --Create Login for Mirror Host B
    CREATE LOGIN <HOST_HostB_login> WITH PASSWORD = '<1234-test>';
    GO
    --Create a user for that login.
    CREATE USER <HOST_HostB_user> FOR LOGIN <HOST_HostB_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <HOST_HostB_cert>
       AUTHORIZATION <HOST_HostB_user>
       FROM FILE = '<c:\HOST_HostB_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<HOST_HostB_login>];
    GO
    
  5. 在主体服务器上,为见证服务器创建登录和用户,将证书与该用户关联,并授予合作关系登录连接权限。为镜像服务器重复此步骤。

    --Create a login on Master HostA for Witness HostC
    USE master;
    CREATE LOGIN <WITNESS_HostC_login> WITH PASSWORD = '<1234test->';
    GO
    --Create a user for that login.
    CREATE USER <WITNESS_HostC_user> FOR LOGIN <WITNESS_HostC_login>;
    GO
    --Associate the certificate with the user
    CREATE CERTIFICATE <WITNESS_HostC_cert>
       AUTHORIZATION <WITNESS_HostC_user>
       FROM FILE = '<c:\WITNESS_HostC_cert.cer>' --do not try to use a network path, SQL Server will give an error about the key not being valid
    GO
    --Grant CONNECT permission on the login for the remote mirroring endpoint.
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [<WITNESS_HostC_login>];
    GO
    
  6. 在主体服务器上附加见证服务器。此示例使用配置数据库。为所有数据库重复此步骤。

    --Setup the Witness Server
    ALTER DATABASE SharePoint_Config
        SET WITNESS = 
        '<TCP://databasewitness.adatum.com:5024>'
    GO
    

将权限传输到镜像服务器

在设置镜像数据库时,将不会针对镜像在主数据库和 msdb 数据库中自动配置将用于 SharePoint 场的数据库的 SQL Server 登录名和权限。相反,您必须为所需的登录名配置权限。

建议您通过运行脚本将登录名和权限从主体服务器传输到镜像服务器。知识库文章 918992“如何在 SQL Server 2005 实例之间传输登录和密码” (https://go.microsoft.com/fwlink/?linkid=122053&clcid=0x804) 中提供了建议使用的脚本。

监控镜像状态

在见证服务器上,您可以使用以下 Transact-SQL 语句来监控当前镜像状态。

SELECT mirroring_role FROM sys.database_mirroring WHERE mirroring_role is not null --If returns a 1, principal, if 2: mirror

您可能希望创建一系列 SQL Server 作业和警报来确定哪台服务器是主体服务器,或者创建运行此命令的 Windows 服务来确定哪台服务器是主体服务器。

后续步骤

配置了镜像之后,必须创建使您能够对服务器场中的数据库进行故障转移的脚本。有关详细信息,请参阅在单个服务器场中故障转移和恢复镜像数据库

SELECT mirroring_role FROM sys.database_mirroring WHERE mirroring_role is not null --If returns a 1, principal, if 2: mirror

您可能希望创建一系列 SQL Server 作业和警报来确定哪台服务器是主体服务器,或者创建运行此命令的 Windows 服务来确定哪台服务器是主体服务器。

另请参见

其他资源

SQL Server 2005 中的数据库镜像(该链接可能指向英文页面)