混合云解决方案

更新时间:
复制为 MD 格式

场景说明

ApsaraDB for SQL Server混合云解决方案用于实现本地SQL Server服务与RDS SQL Server服务之间的数据传输或者同步。利用SQL Server复制技术实现数据的同步,其典型应用场景就是写数据在本地,读数据在RDS SQL Server。

方案架构

image

方案解析

  1. 整体结构

    这是SQL Server典型的2+3高可用和高扩展解决方案,主备使用镜像完成数据库同步,以提供故障转移。分发单独放在一台服务器,其目的是解决publisher故障转移时,分发服务器可以提供持续同步数据到订阅服务器。发布(publisher)和分发(distributor)是放在用户本地,拥有自主权限。

    订阅(subscriber)放在RDS上,建议不要用高可用RDS实例来做订阅,购买单实例来做订阅是比较合适的,方便后续不断扩展。如果有主备高可用,订阅服务器也是利用镜像来实现高可用,一旦发生切换,订阅服务器将无法正常同步数据。

    说明

    RDSLOCAL最好开通VPN或者专线。

  2. Distributor

    重要

    需要一个单独的服务器作为分发服务器,不要将分发服务器放在发布服务器上,否则一旦主备发生切换,分发服务器将不能正常工作。

    1. 安装SQL Server,安装时必须要选择replication功能。

    2. 配置分发服务器。

      USE master
      EXEC sp_adddistributor @distributor = N'RDS-TEST-DIST', @password = N''
      GO
      EXEC sp_adddistributiondb 
          @database = N'distribution', 
          @data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data',
          @log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data', 
          @log_file_size = 2,
          @min_distretention = 0, 
          @max_distretention = 72, 
          @history_retention = 48, 
          @security_mode = 1
      GO
      USE [distribution] 
      GO
      IF (
          NOT EXISTS (
              SELECT * 
              FROM sysobjects 
              where name = 'UIProperties' and type = 'U ')
      ) 
          CREATE TABLE UIProperties(id int) 
      IF (
          EXISTS (
              SELECT * 
              FROM ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', null, null)
              )
      ) 
          EXEC sp_updateextendedproperty 
              N'SnapshotFolder', 
              N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\ReplData', 
              'user', dbo, 
              'table', 
              'UIProperties' 
      ELSE 
          EXEC sp_addextendedproperty N'SnapshotFolder',
           N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\ReplData', 
           'user', dbo, 
           'table', 
           'UIProperties'
      GO
    3. 如果不在域环境或域环境未开启自动映射,您需要注册分发服务器和订阅服务器的别名映射。订阅服务器注册流程较复杂,请参见如下步骤:

      1. RDS上创建一个可以登录的账户,并分配权限。具体操作,请参见创建数据库和账号

      2. 查看主机的HOST NAME。

      3. 开通实例的外网地址,具体方法请参见申请外网地址

      4. Server配置管理器配置别名。

        说明

        32位和64位的SQL Native Client都需要配置。

        展开左侧 SQL Native Client 11.0 Configuration (32bit) 节点,单击 Aliases,在右侧面板中为每个 RDS 实例配置别名,填写 Alias Name(别名)、Server(服务器 IP 地址)、Protocol(协议,选择 TCP)及端口号等参数。

    4. 在分发服务器上注册发布服务器(主备都需要注册)。在 Object Explorer 中展开 Replication 节点,右键打开 Distributor Properties - RDS-TEST-DIST 对话框。选择 Publishers 页签,确认已添加 RDS-TEST-MASTERRDS-TEST-SLAVE 作为发布者,分发数据库均为 distribution。在 Administrative link password 区域设置 PasswordConfirm password

  3. Publisher

    在发布服务器例如rds-test-master/rds-test-slave上分别做以下配置:

    1. 配置分发服务器,并指定分发服务器为rds-test-dist。在 SSMS 中展开 Object Explorer,右键单击 Replication 节点,打开 Publisher Properties 对话框。将 Distributor 设置为 RDS-TEST-DISTDistribution database 设置为 distribution,并在 Administrative link password 区域设置 Password 和 Confirm password。

    2. 与分发服务器一样,需要将所有订阅服务器注册真实的HOST NAME地址。

    3. 在发布服务器上创建一张包含有主键的表。

    4. 创建发布。

      说明

      只能选事务复制,建议使用SQL登录连接到发布。

      New Publication WizardPublication Type 页面中,选择 Transactional publication,单击 Next 完成后续向导步骤。在 Snapshot Agent Security 对话框中,选择 Run under the SQL Server Agent service account;在 Connect to the Publisher 区域选择 Using the following SQL Server login,填写 LoginPassword,单击 OK

  4. Subscriber

    订阅端放在RDS上, RDS实例可以是基础系列或高可用系列,但建议发布服务器、分发服务器和订阅服务器这三者的版本保持一致。

    重要

    创建订阅时需要注意以下几点:

    • 订阅端放在RDS上,应该申请外网地址。

    • 需要取得订阅服务器的名称,因为在分发和发布服务器上做别名映射时需要真实的订阅服务器名称。

    • 订阅的方式只能是Push(推送),不能是Pull(拉取)。

    • 订阅的登录方式不能使用SQL Agent Account,需要使用SQL 登录方式。在 Distribution Agent Security 对话框中,在 Connect to the Subscriber 区域选择 Using the following SQL Server login,填写 LoginPassword,单击 OK。在 New Subscription Wizard 的 Subscribers 页面,单击 Add Subscriber 下拉按钮,选择 Add SQL Server Subscriber... 以添加 SQL Server 订阅者。

  5. 镜像与复制共存

    镜像和复制共存时,如果MASTER-SLAVE发生了故障转移,如何让数据库继续提供服务,需要注意以下几点:

    1. 主备的日志读取和复制关系的矫正。如果MASTER 宕机,发生了故障转移,此时SLAVE如果要提供服务,日志读取器会等待镜像日志先同步,再做发布,但如果MASTER发生硬件故障,此时SLAVE需要打开一个跟踪标记1448,在镜像故障的情况下可以继续分发数据。

      说明

      1448标记用于在事务复制和镜像共用时,改变LogReader的读取限,当镜像故障时仍然可以从Principle读取日志。

    2. 日志读取代理、快照代理需要设置partner server。

  6. 复制与RDS共存

    • RDS只能作为订阅,不能作为发布和分发。

    • RDS的订阅数据库版本不限。