【发布时间】:2018-08-02 16:05:44
【问题描述】:
我正在将单个数据中心 .NET 应用程序转换为地理分布。当前,在单个 VM 上的 IIS 中运行了一个 Web 应用程序。它使用配置中的连接字符串连接到单个数据库服务器。
我已经为开发、UAT 和生产使用了配置转换,这些转换在部署时从我的构建服务器应用。
在地理分布式设置中,网络应用将部署到 2 个或更多(可能多达 10 个)不同的数据中心。
每个数据中心都将保存异地复制的 Azure SQL 数据库。
我需要每个数据中心的每个 VM 访问位于同一数据中心的 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”)。
解决这个问题的最佳方法是什么?为每个数据中心创建配置转换是我唯一的选择,还是有其他方法?
【问题讨论】:
-
您可以从环境变量\vm 名称中读取它,但无论哪种方式,它都必须是某种映射,因此代码可以找出从哪里获取值
-
@4c74356b41 所以你认为我需要调整我的连接字符串在应用程序中的获取方式吗? IE。不要只是从
.config文件中提取纯字符串,而是提取模板字符串并使用交付服务器上的某些环境变量填充空白?有点像使用 SQL 别名(SQL Azure 不支持)。 -
如何构造它并不重要,但事实是,没有任何内置的所以
标签: azure deployment dns database-connection azure-sql-database