概述
在对数据库有少量写请求,但有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至对业务产生影响。为实现云数据库 SQL Server 读能力的弹性扩展,分担数据库读压力,您可以创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求。
目前暂不支持统一读写分离地址,即自动分离读请求与写请求。只读实例需要通过单独的 IP、PORT 来访问。
基本概念
- RO 组:带有负载均衡功能的只读实例组。若 RO 组内有多个只读实例,可将用户读请求量均匀分配到组内的每个只读实例上。且 RO 组会对外提供 IP、PORT 供访问数据库。
- 只读实例:可以支持读请求的单节点(无从机)实例。只读实例无法单独存在,每个只读实例都属于某个 RO 组。
基础架构
只读实例将主实例(源数据库)的更改同步到所有只读实例中。只读实例均采用单节点(不含备机)架构,若只读实例宕机,我们将不断的尝试恢复,若需要更高的可用性,您可以选择 RO 组。
云数据库 SQL Server 的版本不同,只读实例后台架构和技术略有不同:
- 2017 Enterprise 以下的版本采用发布订阅方式构建只读实例。
注意:
在该模式下将无法同步主实例上无主键的表,用户可通过以下代码查询主实例上是否存在无主键的表:
use dbname select name from sys.sysobjects where xtype='U' and id not in(select parent_obj from sys.sysobjects where xtype='PK')
如需实现无主键表的只读扩展,建议使用双节点 2017 Enterprise 版。
- 双节点 2017 Enterprise 及以上版本采用 Always on 方式构建只读实例,保证数据同步的高效和稳定。
功能优势
RO 组模式
连接 RO 组的 VIP 即可对只读实例进行读操作,可降低维护成本。同时,您可以在统一 RO 组内添加只读实例的个数,即可不断扩展系统的处理能力,同时确保只读实例具备高可用,应用程序无需做任何修改。
跨可用区和地域扩展
云数据库 SQL Server 支持跨可用区和地域添加只读实例,为业务就近访问提供了低延迟、高效率、稳定的一站式解决方案。
自动剔除
集群管理模块将自动对只读实例进行检查,当发现某个只读实例出现宕机或者延迟超过阈值时,将不再分配读请求给该实例,读请求在剩余的健康实例间进行分配。以此确保单个只读实例发生故障时,不会影响应用的正常访问。当实例被修复后,会自动将该实例纳回请求分配体系内。
功能限制
- 一个主实例最多可以创建3个只读实例。
- Standard 版实例暂不支持只读实例。
- 暂不支持金融区实例扩展只读实例。
- 只读实例不支持备份以及回档功能。
- 不支持数据迁移至只读实例。
- 只读实例不支持创建/删除数据库,如有需要请在主实例上操作。
- 只读实例不支持创建/删除账号,不支持为账号授权以及修改账号及密码,如有需要请在主实例上操作。
FAQ
云数据库 SQL Server 支持读写分离吗?
云数据库 SQL Server 目前暂不支持统一读写分离地址,即自动分离读请求与写请求。只读实例当前需要通过单独的 IP、PORT 来访问,创建只读实例后,您需要在应用程序中分别配置主实例和每个只读实例的连接地址,才能实现将写请求发往主实例而将读请求发往只读实例。
云数据库 SQL Server 如何创建只读实例 RO 组?
云数据库 SQL Server 支持用户创建一个或多个只读实例组成只读实例 RO 组,适用于读写分离和一主多从应用场景,可显著提高用户数据库的读负载能力。
云数据库 SQL Server 主库到只读的同步延迟多少?
2017版本以下采用复制同步,延迟在3秒 - 5秒。如果采用2017/2019版本的 Always On 副本只读,同步延迟在1秒 - 2秒。
不同版本的只读实例是否具有差异性?如果业务需要用到只读,该如何选择云数据库 SQL Server 的版本?
不同版本的只读实例具有差异性,如果业务需要用到只读,建议采用2017版本以上的数据库实例,原因如下:
- 2017以下版本采用的是发布订阅方式构建只读实例,为对象级同步,同步延迟在3秒 - 5秒,如若使用只读实例,为保证数据同步的高效稳定,建议您先将主实例升级为2017版本以上,再使用只读实例功能。
- 2017 Enterprise 双节点(原高可用版/集群版)及以上版本采用 Always on 方式构建只读实例,同步延迟在1秒 - 2秒,数据同步更高效更稳定。