azure - 根据 Azure SQL 数据库的数据中心转换连接字符串

标签 azure deployment dns database-connection azure-sql-database

我正在将单个数据中心 .NET 应用程序转换为地理分布式应用程序。目前,一台 VM 上的 IIS 中运行一个 Web 应用程序。它使用配置中的连接字符串连接到单个数据库服务器。

我已经将配置转换用于开发、UAT 和生产,这些配置转换是在部署时从我的构建服务器应用的。

在地理分布式设置中,Web 应用程序将部署到 2 个或更多(可能最多 10 个)不同的数据中心。

每个数据中心都将保存异地复制的 Azure SQL 数据库。

我需要每个数据中心中的每个虚拟机访问位于同一数据中心的 Azure SQL 数据库。

我不想在项目中为每个数据中心创建配置,并在每个配置转换中指定不同的连接字符串。这是不可维护或可扩展的。

示例

| Data centre      | VM  | DB server                |
| -------------    |-----| -------------------------|
| UK South         | VM1 | db1.database.windows.net |
| South Central US | VM2 | db2.database.windows.net |
| West US          | VM3 | db3.database.windows.net |
| West Europe      | VM4 | db4.database.windows.net |
| ...              | ... | ...                      |

如您所见,每个数据库服务器的服务器名称都不同,这是 Azure SQL 的要求。您不能在不同的数据中心使用相同的名称,因为该名称是全局的。

我无法找到将 1 个连接字符串映射到上述每个数据库服务器名称的方法。

Azure 流量管理器能够为您执行地理 DNS,但 Azure SQL 要求您在连接字符串中包含服务器名称(db1、db2...)(作为“服务器名称”的一部分或与“登录”例如“user@db1”)。

解决这个问题的最佳方法是什么?是我为每个数据中心创建配置转换的唯一选择,还是还有其他方法?

最佳答案

我不知道有任何内置功能可以将 SQL Azure 地理分布式数据库与相应区域相匹配以输出正确的连接字符串(我可能是错的)。我所知道的唯一地理感知数据库(在 azure 中)是 CosmosDB。我建议不要自己编写此类功能(我怀疑这种功能很脆弱并且会增加开销),而是从不同的方向进行处理。

您提到了您的构建环境。相同的代码根据部署到的区域具有不同的设置是很常见的,我通常将这些设置作为 CI\CD 管道的一部分进行管理。当应用程序部署(通过管道)时,它会更新该区域的设置,作为部署到该特定区域的一部分。如果部署到新区域,您只需使用正确的连接字符串更新 CI\CD 即可。相同的规则适用于 dev\stage 等。管理构建中的复杂性并在其他地方保持简单。

关于azure - 根据 Azure SQL 数据库的数据中心转换连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657975/

相关文章:

azure - 如何配置 KEDA 以根据 Azure 服务总线触发器中的元数据创建容器

github - 在 git/travis 工作流程中存储敏感信息

java - 将 osgi 包远程部署到 Geronimo

php - 对于在 LAMP 堆栈上工作的 Windows 用户,GIT 和部署的良好工具链和部署过程是什么?

azure - 如何将所有 Azure Application Insights 对象合并到一个报告中?

Azure Pipelines "Require Template"检查不起作用

azure - 在应用服务上保留我的出站 IP

Azure - SSL 和流量管理器 - 多个区域

docker - K8s - 不同命名空间中 pod 之间的 DNS 解析

Dns 记录指向服务器上的文件夹