RDS SQL Server支持高可用主备切换功能。当主实例发生故障或不可用时(例如操作系统错误、硬件故障等),系统会自动触发主备切换,主实例和备实例将进行互换,切换后实例地址保持不变,应用程序会自动连接到新的主实例(原备实例),从而保障业务的连续性和高可用性。此外,您还可以手动切换主备实例,应对系统升级、维护或故障排查等情况。
前提条件
实例系列为高可用系列或集群系列。
集群系列实例只支持自动切换,不支持手动切换。集群系列实例未直接开放手动主备切换功能,如有需求,请联系阿里云技术支持人员。
基础系列实例、SQL Server只读实例采用单节点架构,没有备节点,因此不涉及主备实例的切换。
功能介绍
自动切换:实例默认开启自动切换,当主实例出现故障无法访问时,会自动切换到备实例。主备切换的触发时机,请参见主备切换原因。
手动切换:即使自动切换是开启状态,您也可以手动进行主备切换。手动切换可用于容灾演练或多可用区场景下的就近连接等需求。
主备实例的数据会实时同步,您只能访问主实例,备实例仅作为备份形式存在,不提供业务访问。
功能限制
Serverless实例不支持手动切换主备。系统会在Serverless实例出现故障无法访问时,自动切换主备。
注意事项
SQL Server的主备同步机制可以保证用户数据库的全量同步,但不对ALTER LOGIN配置进行全量同步。当前仅支持对ALTER LOGIN中的SID、login_name以及password参数进行同步,其他参数取系统默认值。更多信息,请参见ALTER LOGIN (Transact-SQL)。
影响
主备实例切换过程中通常会出现不超过30秒的服务不可用,请确保您的应用程序具有自动重连机制。
如果您的应用程序使用的是较早版本的Druid组件进行数据库连接管理,可能会遇到数据库连接断开后不会自动重连恢复的问题,建议您将Druid升级到1.1.16或之后版本,以避免此问题。
如果实例下挂载有只读实例,那么主备实例切换后,只读实例的数据会有几分钟的延迟,因为需要重建复制链路、同步增量数据等。
主备切换不会导致实例连接地址变更,但后台对应的IP地址可能会变化。使用实例连接地址时,主备切换不会对您的应用正常运行造成影响。更多详情,请参见如何查看或修改连接地址和端口。
当实例发生故障时,切换时间可能会延长。
影响
主备实例切换过程中通常会出现不超过30秒的服务不可用,请确保您的应用程序具有自动重连机制。
如果您的应用程序使用的是较早版本的Druid组件进行数据库连接管理,可能会遇到数据库连接断开后不会自动重连恢复的问题,建议您将Druid升级到1.1.16或之后版本,以避免此问题。
如果实例下挂载有只读实例,那么主备实例切换后,只读实例的数据会有几分钟的延迟,因为需要重建复制链路、同步增量数据等。
主备切换不会导致实例连接地址变更,但后台对应的IP地址可能会变化。使用实例连接地址时,主备切换不会对您的应用正常运行造成影响。
当实例发生故障时,切换时间可能会延长。
手动切换主备实例
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏中,选择服务可用性。
在实例可用性区域,单击主备库切换。
选择切换时间,然后单击确定。
说明在主备实例切换期间,有很多操作无法执行,例如管理数据库和账号、切换网络类型等,建议您选择在设置时间内切换当前设置。
临时关闭主备自动切换
使用场景
自动切换默认为开启,主实例出现故障会自动切换到备实例,在遇到如下情形时您可以选择临时关闭主备自动切换:
大促活动等,不希望主备切换影响系统可用性。
重要应用系统升级等,不希望主备切换引入其他变数。
重大事件或者稳定保障期,不希望主备切换影响系统稳定性。
操作步骤
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏中,选择服务可用性。
在实例可用性区域,单击自动切换主备。
说明如果看不到自动切换主备按钮,请再次确认本文的前提条件。
选择临时关闭,并设置临时关闭截止时间,然后单击确定。
说明到达临时关闭截止时间后,实例恢复为自动进行主备切换。
默认为临时关闭1天,最长可设置为7天后的23:59:59。
设置完毕后,您可以在服务可用性页面查看临时关闭主备自动切换的截止时间。
查看主备切换日志
仅SQL Server 2008 R2(本地SSD盘)实例支持查看主备切换日志。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏中,选择服务可用性。
在主备切换日志区域,调整查询时间范围,查看主备切换日志。
常见问题
Q:主备切换后,是否需要手动切换回主实例?
A:不需要,主备实例的数据完全一致,主备切换后原备实例被选举成为新的主实例,无需进行额外操作。
Q:主备切换后,超过十分钟,实例状态仍未恢复运行中,可能是什么原因?如何处理?
A:RDS在发生异常触发高可用切换时,应用端长连接可能无法感知到连接状态变化,如果没有设置socket超时时间,应用程序会一直等待数据库返回结果,通常会等到几百秒后才会断连,期间数据库的部分连接无法正常工作,SQL会出现大量执行异常。为了避免无效连接,建议配置connectTimeout和socketTimeout,防止出现网络错误时一直等待的情况,从而缩短故障时间。
超时配置值需要根据业务负载和使用方式进行评估,在线事务场景中建议connectTimeout配置为1~2秒,socketTimeout配置为60~90秒,此配置仅供参考。
相关API
API | 描述 |
切换RDS主备实例。 | |
开启或关闭RDS实例主备自动切换。 | |
查看RDS实例主备自动切换设置。 |