【问题标题】:Connection string for Azure Web-Role connecting to SQL Server on a Virtual MachineAzure Web-Role 连接到虚拟机上的 SQL Server 的连接字符串
【发布时间】:2013-03-09 09:36:32
【问题描述】:

我正在使用以下连接字符串将 Azure Web-Role 连接到在虚拟机上运行的 SQL 实例。它工作正常!

<add key="VMConnectionString" value="Server=tcp:<mydomain>.cloudapp.net,1433;Database=myDatabase;User Id=myUserID;Password=**********;" />

我的问题是,我应该使用虚拟机的内部 IP 地址(例如 10.1.0.0/16)而不是公共 DNS 来减少延迟吗?我是否需要将 Web 角色和 VM 放在 Azure 中的同一虚拟网络上?我尝试使用门户中所述的 VM 的内部 IP 地址,但它无法连接,尽管端口 1433 完全打开。我应该补充一点,没有虚拟网络。

【问题讨论】:

  • 我认为您不能依赖内部 IP 地址,因为它们可能会在 VM 重新启动时发生变化。
  • Azure 虚拟网络怎么样?我目前正在看这篇文章:michaelwasham.com/2012/08/06/…

标签: azure azure-web-roles azure-virtual-machine azure-virtual-network


【解决方案1】:

我现在已经设法通过首先在 Azure 门户中创建一个虚拟网络并将一个新的 VM 部署到该网络来引用运行具有内部 IP 10.0.0.4 的 SQL Server 的虚拟机。

使用 web 角色,您无法在通过门户进行配置时指定虚拟网络设置。因此,要将网络角色引入网络,您需要在 .cscfg 文件中定义:

<NetworkConfiguration>
  <VirtualNetworkSite name="VirtualNetworkName" />
  <AddressAssignments>
    <InstanceAddress roleName="MyWebRole">
      <Subnets>
        <Subnet name="AppSubnet" />
      </Subnets>
    </InstanceAddress>
  </AddressAssignments>
</NetworkConfiguration>

您现在可以在门户中确定 VM SQL Server 的内部 IP,并将其添加到我的应用程序 web.config 中定义的连接字符串中。将您的应用程序发布到 Azure 并正确配置端点并打开防火墙,它应该可以正常工作。

在运行了一些性能测试后,通过公共 DNS 使用内部 IP 可以获得一定的利润。我推荐指南connecting web roles to a VM 作为一个很好的参考点。

另一件事。在连接字符串中使用 DNS(例如 myvm.cloudapp.net)时,我找不到可预测的方式来了解 Web 角色将从哪个 IP 调用。因此,很难在 VM 上打开端口 1433 以仅允许 Web 角色通过。使用内部 IP,我刚刚打开了整个子网。

【讨论】:

  • 仅供参考:VirtualNetwokName 不一定是 vnet 的关联组名称。它实际上是在 Azure 中创建的虚拟网络的名称。
  • 感谢@QFDev!这对我帮助很大!
【解决方案2】:

您是否在门户中启用了 VM 的端点?这是一个简单的操作,您只需选择端口和协议。这里有一篇文章解释了如何:

http://www.windowsazure.com/en-us/manage/windows/how-to-guides/setup-endpoints/

我还建议您使用 A 记录 mydomain.cloudapp.net,而不是 vip,因为重新部署时 vip 可能会发生变化。 vip 在重启时不会改变。

【讨论】:

  • 是的,端点存在于 VM 中,用于 1433 (SQL) 和 3389 (RDP)。并不是说我无法连接到 VM 上的 SQL Server,而是说明的连接字符串可以正常工作。但我觉得使用内部 IP(例如 10.1.0.0/16)会更快更直接。
【解决方案3】:

您需要使用公共虚拟 IP 地址:Does Windows Azure offer static IP for VMs?

但是我要问,为什么你在 Windows Azure 的 VM 上安装你自己的 SQL Server 实例而不使用 SQL Azure?

如果您想托管自己的 SQL Server,在此阶段我建议您使用 Amazon EC2 实例,因为它们具有更多功能,例如永久静态 IP。但是,您还需要将其他所有内容都转移到同一个数据中心,因为让一个站点跨不同数据中心访问 SQL Server 的延迟确实很糟糕。

【讨论】:

  • SQL Azure 将是我们的理想选择,它肯定比在 VM 上运行 SQL 便宜得多。问题是性能下降非常严重!顺便说一句,SQL Azure 没有错,只是我们的应用程序没有针对云进行优化,而 VM + SQL 是一个舒适的中间地带,至少可以为 SQL Azure 重建和优化争取时间。 AWS 现在不在讨论范围内,我们与 Azure 相差太远了。
  • Adam,自从发布此问题后,我们已返回 SQL Azure。很大程度上是由于运行多个 VM 以实现高可用性的成本。我们分析了我们的数据库,发现通过添加一些索引和批处理查询,我们能够显着提高性能。我们现在正在研究我们的本地服务器和我们在 SQL Azure 中的解决方案之间的毫秒差异!虽然我最终在这里解决了这个问题,但事实证明这不是我们的最佳解决方案。
  • 对于其他任何人,我对上述问题的回答是 Azure SQL 没有 SSRS。
猜你喜欢
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2015-08-28
  • 2015-10-19
相关资源
最近更新 更多