Microsoft SQL Server 多可用区部署限制、说明和建议
以下是在 RDS for SQL Server 数据库实例上使用多可用区部署时的一些限制:
-
不支持跨区域多可用区。
不支持停止多可用区部署中的 RDS for SQL Server 数据库实例。
-
您不能将辅助数据库实例配置为接受数据库读取活动。
-
带 Always On 可用性组 (AG) 的多可用区支持内存中优化。
-
带 Always On 可用性组 (AG) 的多可用区不支持对可用性组侦听器进行 Kerberos 身份验证。这是因为侦听器没有服务主体名称 (SPN)。
-
您不能重命名位于 SQL Server 多可用区部署中的 SQL Server 数据库实例上的数据库。如果您需要在此类实例上重命名一个数据库,请先为数据库实例禁用多可用区,然后重命名数据库。最后,为数据库实例重新启用多可用区。
-
您只能还原使用完全恢复模式备份的多可用区数据库实例。
-
多可用区部署具有 10000 个 SQL Server 代理任务的限制。
如果您需要更高的限制,则可联系 Amazon Web Services Support 请求增加限制。打开 Amazon Web Services Support Center (Amazon Web Services Support 中心)
页面,登录(如有必要),然后选择 Create case (创建案例)。选择 Service Limit increase (提高服务限制)。填写并提交表格。 -
在位于 SQL Server 多可用区部署中的 SQL Server 数据库实例上不能有脱机数据库。
以下是有关在 RDS for SQL Server 数据库实例上使用多可用区部署的一些说明:
-
Amazon RDS 公开 Always On AG 可用性组侦听器终端节点
。此端点显示在控制台中,由 DescribeDBInstances
API 操作作为端点字段中的条目返回。 -
Amazon RDS 支持可用性组多子网故障转移
。 -
要对虚拟私有云(VPC)中的 SQL Server 数据库实例使用 SQL Server 多可用区,您需要先创建一个数据库子网组,此数据库子网组在至少两个不同可用区中具有子网。然后,将该数据库子网组分配给 SQL Server 数据库实例的主副本。
-
在将数据库实例修改为多可用区部署的过程中,数据库实例的状态为 modifying (正在修改)。Amazon RDS 创建备用数据库实例,并创建主数据库实例的备份。这个过程完成后,主数据库实例的状态变为 available (可用)。
-
多可用区部署在同一节点上维护所有数据库。如果主要主机上的某个数据库发生故障转移,所有 SQL Server 数据库都将作为一个原子单元故障转移到备用主机。Amazon RDS 预置正常运行的新主机并替换运行状况不佳的主机。
-
带 DBM 或 AG 的多可用区支持单个备用副本。
-
在辅助镜像上,将会自动复制用户、登录名和权限。您无需重新创建它们。用户定义的服务器角色仅在对多可用区部署使用 Always On AG 的数据库实例中复制。
-
在多可用区部署中,RDS for SQL Server 会创建 SQL Server 登录名,来允许 Always On AG 或数据库镜像。RDS 使用模式
db_<dbiResourceId>_node1_login
、db_<dbiResourceId>_node2_login
和db_<dbiResourceId>_witness_login
创建登录名。 -
RDS for SQL Server 创建 SQL Server 登录名来允许访问只读副本。RDS 使用以下模式
db_<readreplica_dbiResourceId>_node_login
创建登录名。 -
在多可用区部署中,启用作业复制功能时,SQL Server Agent 作业将从主要主机复制到辅助主机。有关更多信息,请参阅 启用 SQL Server Agent 作业复制。
-
您可以看到,由于执行同步数据复制,因此相对于标准数据库实例部署(在单一可用区中),延迟有所提升。
-
故障转移时间受完成恢复过程所用的时间的影响。大型事务会增加故障转移时间。
-
在 SQL Server 多可用区部署中,通过故障转移重新启动仅重新启动主数据库实例。故障转移后,主数据库实例将成为新的备用数据库实例。多可用区实例的参数可能不更新。对于不进行故障转移的重新启动,主数据库实例和备用数据库实例将重新启动,并在重新启动后更新参数。如果数据库实例没有响应,我们建议重新启动而不进行故障转移。
以下是有关使用针对 RDS for Microsoft SQL Server 数据库实例的多可用区部署的一些建议:
-
对于生产或预生产中使用的数据库,我们建议使用以下选项:
多可用区部署,可实现高可用性
“Provisioned IOPS (预置 IOPS)”,可实现快速一致的性能
“内存优化”而非“通用型”
-
您无法为辅助实例选择可用区 (AZ),因此,在部署应用程序主机时请注意这一点。您的数据库可能故障转移到其他可用区,并且应用程序主机与数据库可能不在同一可用区中。因此,我们建议您在给定 Amazon 区域中的所有可用区之间平衡应用程序主机。
-
为了获得最佳性能,请勿在大型数据加载操作期间启用数据库镜像或 Always On AG。如果您希望尽可能快地完成数据加载,请先完成数据加载,然后再将数据库实例转换到多可用区部署。
-
访问 SQL Server 数据库的应用程序应具有可捕获连接错误的异常处理功能。下面的代码示例显示了一个可捕获通信错误的 try/catch 块。在此示例中,如果连接成功,
break
语句会退出while
循环,但如果引发异常,则最多可重试 10 次。int RetryMaxAttempts = 10; int RetryIntervalPeriodInSeconds = 1; int iRetryCount = 0; while (iRetryCount < RetryMaxAttempts) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); command.ExecuteNonQuery(); break; } catch (Exception ex) { Logger(ex.Message); iRetryCount++; } finally { connection.Close(); } } } Thread.Sleep(RetryIntervalPeriodInSeconds * 1000); }
-
在使用多可用区实例时,请勿使用
Set Partner Off
命令。例如,请勿执行以下操作。--Don't do this ALTER DATABASE db1 SET PARTNER off
-
请勿将恢复模式设置为
simple
。例如,请勿执行以下操作。--Don't do this ALTER DATABASE db1 SET RECOVERY simple
-
在多可用区数据库实例上创建新登录名时,请勿使用
DEFAULT_DATABASE
参数,因为这些设置不能应用于备用镜像。例如,请勿执行以下操作。--Don't do this CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]
此外,请勿执行以下操作。
--Don't do this ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]