Azure Autoscale重新启动运行实例

时间:2014-03-07 14:28:42

标签: azure azure-role-environment

我一直在使用Autoscale在2到1个云服务实例之间切换,以降低成本。这主要是有效的,除了不时(不确定这里的模式是什么),放大(1-> 2)的行为导致两个实例回收,产生服务中断对于用户。

假设RoleEntry在响应拓扑更改时没有花哨的东西,为什么从1-> 2扩展会重新启动已经运行的实例?

附加说明:

  • 很明显,通过查看实例,这两个实例都在回收 管理门户中的选项卡。停电也可以通过击中来确认 公共网站。
  • 这种情况不会持续发生,但我不确定这种模式是什么。感觉就像单实例配置已运行多天,尝试扩大回收两者。但是,如果单实例配置仅运行了几个小时,则可以在不中断的情况下进行扩展和缩放。
  • 第一个实例总是比引入的第二个实例快得多。

3 个答案:

答案 0 :(得分:2)

这一直是这样的。当您运行1台服务器并且转到2+时,将重新启动初始服务器。要获得完整的SLA,您需要始终拥有2台以上的服务器。

答案 1 :(得分:0)

您应该能够控制此行为。在roleEntrypoint中,您可以捕获一个事件,RoleEnvironmentChanging

要放入解决方案的一些代码的shell看起来像......

RoleEnvironment.Changing += RoleEnvironmentChanging;

private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
}

RoleEnvironment.Changed += RoleEnvironmentChanged;

private void RoleEnvironmentChanged(object sender, RoleEnvironmentChangedEventArgs e)
{
}

然后,在RoleEnvironmentChanged方法中,我们可以检测到更改的内容,并告诉Azure是否要重新启动。

if ((e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)))
{
    e.Cancel = true; // don't recycle the role
}

答案 2 :(得分:0)

Nariman,请参阅我对布伦特的帖子的评论,了解有关正在发生的事情的一些信息。您应该能够使用以下代码解决此问题:

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
        IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
        string ip = null;
        foreach (IPAddress ipaddress in ipEntry.AddressList)
        {
            if (ipaddress.AddressFamily.ToString() == "InterNetwork")
            {
                ip = ipaddress.ToString();
            }
        }

        string urlToPing = "http://" + ip;
        HttpWebRequest req = HttpWebRequest.Create(urlToPing) as HttpWebRequest;
        WebResponse resp = req.GetResponse();
        return base.OnStart();
    }
}