场景说明
在服务客户时过程中, 有用户需要一种解决方案, 来建立本地 SQL Server 服务与 RDS SQL Server 服务之间的数据传输或者同步的方案, 这里我们利用 SQL Server 复制技术来实现数据的同步, 它的典型应用场景是, 写数据在本地, 读数据放在 RDS, 这样实现混合云的一种解决方案
方案架构
方案解析
1. 整体结构
这是 SQL Server 典型的 2+3 的的高可用和高扩展解决方案, 主备使用镜像完成数据库同步, 以提供故障转移, 分发单独放在一台服务器, 其目的是解决 publisher 故障转移时, 分发服务器可以提供持续同步数据到订阅发布 (publisher) 和分发 (distributor) 是放在用户本地, 拥有自主权限订阅放在 RDS 上, 我的建议是不要用高可用 RDS 来做分发, 购买单实例来做订阅是比较合适的, 因为订阅可以不断扩展, 如果有主备高可用, 订阅服务器也是利用镜像来实现高可用, 一旦发生切换, 订阅服务器是无法正常同步数据的 整个方案过程中, 可能会遇到一些意象不到的情况, 但都是解决掉
2. Distributor
首先需要配置 Distributor, 当然你的安装一个 SQL Server 特别注意的是分发服务器需要一个单独的服务器来充当, 不要将分发服务器放在发布服务器上, 那样一旦主备发生切换, 分发服务器不能正常工作
第一步: 安装 SQL Server , 安装是一定要选上 replication 功能
第二步: 配置分发服务器
- 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
第三步: 如果不在域环境, 你需要注册一下分发服务器和订阅服务器的别名映射 :
注意: 发布服务器很容易注册 订阅服务器比较麻烦, 流程如下:
2.1 在 RDS 上创建一个可以登录的账户, 并分配权限
2.2 查看主机的 HOST NAME
2.3 开通实例的外网地址, 并获得 VIP(VIP 估计会变, 这里需要特别关注)
2.4 通过 SQL Server 配置管理器配置好别名, 注意 32 位和 64 位的 SQL Native Client 都需要配置
第四步: 在分发服务器上注册发布服务器(主备都需要注册) , 如下图:
3. Publisher
在发布服务器上 rds-test-master/rds-test-slave 上都分别要做一下配置:
3.1 配置分发服务器, 并指定分发服务器为 rds-test-dist
3.2 与分发服务器一样, 需要将所有订阅服务器注册到真实的的 HOST NAME 地址
3.3 发布不服务器上创建一张包含有主键的表
3.4 创建发布: 注意只能选事务复制, 连接到发布建议使用 SQL 登录
4. Subscriber
订阅端是放在 RDS, RDS 可以是基础版本, 也可以是高可用班, 甚至可以是 web 版本, 我的实验版本都包含了这些版本但建议版本只在同一个迭代的版本你选取, 即使如果发布分发是 2012, 订阅建议也是, 这三者建议保持一致
创建分发注意几个地方:
4.1 首先订阅在 RDS, 应该申请外网地址
4.2 需要取得订阅服务器的服务器名字, 在分发和发布上做别名时, 一定要制定真实的订阅服务器
4.3 订阅的方式只能是 push(推送), 不能是 Pull(拉取)
4.4 订阅的登录方式不能使用 SQL Agent account, 需要使用 SQL 登录方式
5. 镜像与复制共存
镜像和复制共存主要要考虑的一个点是, 如果 MASTER-SLAVE 发生了故障转移, 如何让数据库提供服务器, 有 3 个地方需要关注:
5.1 主备的日志读取和复制关系的矫正, 如果你的 MASTER 宕机了, 发生了故障转移, 这个时候 SLAVE 如果要提供服务器, 日志读取器会等待镜像日志先同步, 再做分发, 但有时候可能原 MASTER 发生硬件故障, 这时候, 就需要打开一个跟踪标记 1448, 在不等最小日志确认的情况下可以继续分发数据
5.2 日志读取气代理需要设置 partner server
5.3 快照代理同样需要设置 partner server
6. 复制与 RDS 共存
需要说明的是 RDS 只能作为订阅, 不能作为分发和发布 RDS 的订阅数据库类型不限
注意事项
1. 要作为订阅, 需要开通外网
2. RDS 和 LOCAL 最好开通 VPN 或者专线
3. 订阅服务器不能直接使用, 需要配置网络别名映射, 这个很关键
来源: http://click.aliyun.com/m/42855/