dai*_*urf 6 sql-server amazon-ecs .net-core aws-fargate
我们遇到了一个简单的 .NET Core (3.1) 控制台应用程序连接到 SQL Server 数据库并部署在 AWS Fargate (ECS) 上的容器中的问题。SQL Server 是镜像设置(主体/镜像,带有见证以允许自动故障转移)。
当我们(手动)对数据库进行故障转移时会出现问题;观察 SQL Server Profiler,SQL 客户端似乎继续反复尝试连接旧主体(现在是镜像并处于恢复模式)。故障转移后不会尝试连接到新的主体。我们正在使用System.Data.SqlClient.dll作为客户端。记录了以下异常:
System.Exception Cannot connect to SQL Server Browser. Ensure SQL Server Browser has been started.
- at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.OpenAsync(CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
Run Code Online (Sandbox Code Playgroud)
尽管错误提示 SQL Server Browser 未启动(我们正在连接到命名实例),但我们已确认该服务已启动。我们还创建了一个临时安全组,以允许应用程序和数据库之间的所有流量(所有协议/端口,例如用于 SQL 浏览的 UDP 端口 1434),因此任何时候都不会阻止流量。当我们手动故障回退到原始主体(即连接字符串中指定为“数据源”的服务器)时,应用程序可以再次成功连接。
奇怪的是,我们在以下 AWS 配置中运行了完全相同的应用程序,并且看到客户端将在手动故障转移后立即成功连接到故障转移伙伴(即新委托人):
以上所有部署都位于与 Fargate 服务相同的 VPC/子网中。因此,问题似乎是在 Fargate 服务中运行应用程序的结果。以前有人在使用 AWS Fargate 时遇到过此类问题吗?
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |