我使用以下连接字符串将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完全打开。我应该补充说没有虚拟网络。
答案 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实际上是非常糟糕的延迟。