连接到虚拟机上的SQL Server的Azure Web角色的连接字符串

时间:2013-03-09 09:36:33

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

使用Web角色,您无法通过门户网站指定虚拟网络设置。因此,要将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,我刚刚打开了整个子网。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

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