Skip to content
April 10, 2013 / ahriman hpc mode

Windows Azure Troubleshooting Guide

Этот гайд будет пополняться по мере решения проблем, возникающих при работе с Windows Azure. Всё пока абсолютно неструктурировано, структуры будут добавлены позже, когда проблем станет достаточно много.

Проблема: При запуске проекта в локальном эмуляторе вычислений возникает ошибка There was an error attaching the debugger to the IIS worker process for URL ‘http://127.0.0.1:5100/’ for role instance  ‘deployment(591).sx.Webrole1.0.

Возможное описание проблемы: У меня данная проблема возникала по одной из четырех причин: папка с проектом была зашифрована EFS, мешала включенная диагностика, проект не мог запуститься в локальном IIS, ошибка в web.config.

Возможные пути решения:

1) При появлении проблемы не нажимать ОК, а перейти в IIS и обновить список сайтов. В списке должен появиться запускаемый сайт. Обращаю внимание, что у меня эта проблема возникала в том числе и из-за того, что старое развертывание некорректно убивалось и сайт оставался жить. Удаление старого сайта помогало. Если же сайт один, попробуйте нажать на Browser *.[порт] в окне Actions. Если сайт откроется, должна будет выведена уже информативная ошибка.

2) Переустановка Azure SDK.

3) Переход в режим Hostable Web Core – необходимо закомментировать элемент Sites в файле ServiceDefinition.csdef.

4) В IIS перейти на вкладку Application Pools и на каком-либо пуле нажать Set Application Pool Defaults… и указать Enable 32-Bit Applications в True.

5) Проверка web.config на элементы-дубликаты и в принципе ошибки.

6) Снятие флажка Encrypted в свойствах папки проекта.

7) Снятие атрибута debug-true в разделе compilation в web.config либо снятие флажка Enable Diagnostics в свойствах облачной роли.

8) Перенос проекта в другую папку (особенно если проект находился на сетевом диске).

Проблема: При запуске проекта в локальном эмуляторе вычислений возникает ошибка There was an error attaching the debugger to the IIS worker process for URL ‘http://127.255.0.0:82/’.

Возможное описание проблемы: Ошибка похожа на свою подругу, но первое, что должно броситься в глаза – это странный IP-адрес. DNS, hosts и прочее, относящееся каким-бы то ни было образом к разрешению имён, здесь ни причем. Локальный эмулятор вычислений использует свою собственную реализацию балансировщика нагрузки, которая привязывается на 127.0.0.1:80 (или 81, или 82). Windows Azure Tools же для каждого экземпляра веб-роли создаёт виртуальный IP-адрес, который, собственно, и выглядит как 127.255.0.Х (Х – 0, 1, 2, 3 и так далее). Как только вы запускаете отладку, браузер открывает http://127.0.0.1:80 – адрес балансировщика нагрузки, который переводит запрос на IIS и 127.255.0.Х:YY.

Возможные пути решения:

1) Если совсем срочно, то к веб-роли можно обратиться по ее адресу 127.255.0.Х. Однако таким образом обходится балансировщик нагрузки. В случае наличия множества экземпляров можно воспользоваться кодом ниже для того, чтобы определить, какой из экземпляров имеет какой адрес.

public override bool OnStart()
{
Trace.WriteLine(“IP Address: ” + RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[“Endpoint1”].IPEndpoint.Address.ToString());
Trace.WriteLine(“Port: ” + RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[“Endpoint1”].IPEndpoint.Port);
return base.OnStart();
}

2) Очистка решения (Clean).

3) Переустановка Windows Azure Tools & SDK.

4) Установка скрипта в автозагрузку, который включает поддержку 32-битных приложений. Подробнее: http://blogs.msdn.com/b/zxue/archive/2011/10/31/enabling-support-for-32-bit-iis-applications-in-windows-azure.aspx

5) Посмотреть наличие ошибок в %UserProfile%\AppData\Local\dftmp\IISConfiguratorLogs\IISConfigurator.log.

6) Переход в режим Hostable Web Core – необходимо закомментировать элемент Sites в файле ServiceDefinition.csdef.

7) Aspnet_regiis –I на 4-й Framework.

8) Как последняя мера – переустановка IIS.

Проблема: При настроенном SSO оно не работает – появляется окно «введите свои учетные данные» при том, что пользователь уже вошел в систему под доменной учетной записью. Не получается ни в Internet Explorer, ни в Firefox/Chrome.

Возможное описание проблемы: Если всё настроено и аутентификация работает, то проблема в отсутствии SSO может заключаться в отсутствии сервера AD FS в зоне Local Intranet Sites в Internet Explorer. В других же браузерах проблема немного другая – они не поддерживают Kerberos (из коробки).

Возможные пути решения:

1) IE: добавить сервер AD FS в зону Local Intranet Sites. В домене может возникнуть еще одна проблема – список настроек IE управляется администратором. При этом, даже если в Default Domain Policy указать список сайтов, эти сайты не появляются у клиента. Появление сайтов блокируется фичей IE ESC, которая отключается в Server Manager во вкладке Security Information.

2) Firefox: необходимо перейти на страницу about:config, после чего найти настройки network.negotiate-auth.delegation-uris и  network.negotiate-auth.trusted-uris и указать в качестве их значения адрес AD FS сервера.

3) Chrome: необходимо запустить браузер следующей командой: google-chrome –auth-server-whitelist=”адрессервераADFS”.

April 4, 2013 / ahriman hpc mode

Профилировка приложения Windows Azure

Одна из популярных задач при разработке – это профилировка приложения. В случае приложения Windows Azure последовательность действий немного меняется, но в целом очень привычна.

Итак, создадим проект Windows Azure с одной Worker-ролью, в которой будет три метода, один "хороший", второй "не очень", третий "совсем плохой". Улыбка

image

image

 

Добавим следующий код методов в класс WorkerRole.cs и их вызовы в метод Run.

 

Дальше нажмем Publish на облачном проекте и в опциях, перейдя в Advanced Options, отметим Enable profiling.

image

Профилирование доступно по четырем методам.

image

 

После того, как проект будет развернут на Windows Azure, можно посмотреть лог профилировки. Для этого надо перейти в Server Explorer, выбрать Windows Azure Compute и нужный Cloud Service.

image

Для просмотра лога нажмите правой кнопкой мыши на экземпляре и нажмите  View Profiling Report.

После того, как произойдет очередной этап работы, вам станет доступен отчет по профилированию.

image

 

В процессе профилирования можно обратить внимание на лог загруженности экземпляра, обслуживающего сервис, на портале управления Windows Azure. В этот момент нагрузка скачет.

image

April 2, 2013 / ahriman hpc mode

Атрибуты отладчика в Visual Studio

Недавно вёл курс по Visual Studio и в очередной раз понял, что постоянно забываю, какие атрибуты у отладчика в Visual Studio есть. Эта заметка в "карман".

Большинство атрибутов отладчика могут быть найдены в пространстве имен System.Diagnostics. Уже давно ушли времена, когда были проблемы с нахождением нужных импортов, поэтому это исключительно для памяти. Наиболее используемыми, на мой взгляд, являются пять атрибутов:

а. DebuggerDisplay – данный атрибут позволяет назвать тип какой-либо произвольной информацией для отображения, например, в Watch Windows, Quick Watch Windows и прочих окна-представлениях, отображающих переменные в отладчике.

б. DebuggerBrowsable – данный атрибут определяет то, как объект будет отображаться в представлениях, отображающих переменные отладчика. Можно даже попробовать скрыть член класса, чтобы он не появлялся в представлениях.

в. DebuggerHidden – данный атрибут указывает отладчику, что нужно сделать step over вместо step into.

г. DebuggerTypeProxy – занятный атрибут, который позволяет кастомизировать вид классов в представлениях.

March 28, 2013 / ahriman hpc mode

Heartbeats, восстановление и балансировка нагрузки

Перевод http://blogs.msdn.com/b/kwill/archive/2013/02/28/heartbeats-recovery-and-the-load-balancer.aspx . Перевод проводится в рамках написания статей об инфраструктуре Windows Azure. Список статей в этом цикле:

Жизненный цикл роли Windows Azure

Порты Windows Azure

Кластерный индекс в SQL Azure

Windows Azure Storage — архитектура

Ниже приведены ответы на наиболее популярные вопросы, которые я получал о heartbeats/probes, о том, как Fabric-контроллер производит восстановление после проб с ошибками и о том, как балансировщик управляет трафиком, идущим на экземпляры.

В: Как Fabric узнает, что с экземпляром произошла ошибка? Что он предпринимает для его восстановления?

О: Для проверки здоровья экземпляра происходит череда проб, забирающих сведения о здоровье, со стороны Fabric, в следующей последовательности: Fabric <-> Агент на хосте <-> Агент на госте (WaAppAgent.exe) <-> Host Bootstrapper (WaHostBootstrapper.exe) <-> Процесс хоста (обычно WallSHost.exe или WaWorkerHost.exe).

а. Если ошибка с пробой происходит на стадии Fabric <-> Агент на хосте, то Fabric пытается перезагрузить хост. У Fabric есть определенные методы, которые используются по отношению к хосту в том случае, если перезагрузка не помогла решить проблему, а именно – более агрессивные действия по решению проблем вплоть до того, что Fabric может пометить сам сервер как дефектный – в этом случае будет создан новый хост на совершенно новом сервере, после чего на нем будут запущены все проблемные гостевые виртуальные машины.

б. Если ошибка с пробой происходит на стадии Агент хоста <-> Гостевой агент, то хост пытается перезагрузить гостевую операционную систему. В этом случае также присутствуют дополнительные методы, вплоть до запуска гостевой виртуальной  машины на новом сервере. Если проба на стадии Хост <-> Гость успешна, то Fabric больше не предпринимает никаких действий, предоставляя агенту на госте восстанавливать все остальное.

с. Единственное действие по восстановлению, которое предпринимает агет на госте, это перезапуск стека хоста (WaHostBootstrapper и все потомки). Если проба проваливается по таймауту, то агент на госте предполагает, что процесс хоста чем-то занят и оставляет его. Агент на госте не будет перезагружать виртуальную машину.

В: Как балансировщик нагрузки определяет, что экземпляр нездоров?

О: Есть два механизма определения балансировщиком состояния здоровья экземпляра, а также того, включать ли этот экземпляр в механизм балансировки нагрузки (round robin) и ротации трафика.

а. Механизм, который используется по умолчанию, это пробы, которые отправляются балансировщиком агенту гостя, в которых запрашивается состояние здоровье экземпляра. Если агент гостя возвращает что-то, непохожее на "Ready", то балансировщик помечает экземпляр как нездоровый (unhealthy) и убирает его из ротации трафика и балансировки нагрузки.

б. Другой механизм – определение собственного механизма LoadBalancerProbe внутри определения сервиса разработчика. LoadBalancerProbe предоставляет разработчику гораздо больший контроль над тем, как балансировщик опрежелеяет здоровье экземпляра, и позвлояет разработчику более аккуратно реагировать и отображать статус сервиса. Тут нужно, однако, убедиться, что путь к пробе не является простой HTML-страницей, но включает какую-то логику определения здоровья сервиса (например, подключение к SQL Server).

В: Что делает балансировщик нагрузки, когда экземпляр нездоров?

О: Балансировщик маршрутизирует входящие TCP-подключения к эезмплярам, которые находятся в ротации, а именно тем, кто возвращает состояние "Ready" (для тех ролей, которые не имеют собственного LoadBalancerProbe), и тех, кто возвращает 200 или TCP ACK из LoadBalancerProbe. Если экземпляр устраняется из ротации, балансировщик не прерывает существующие TCP-подключения, поэтому, если уже есть обмен данными между клиентом и сервером, то балансировщик не прервет подключения между клиентом и сервером-экземпляром, выкинутым из ротации. Если TCP-подключение прерывается сервером (например, виртуальная машина перезагружает процесс, который использует это подключение), то клиент должен переподключиться, и в это время получивший новый TCP-запрос балансировщик маршрутизирует этот запрос на экземпляр в ротации.

Обратите внимание, что для развертываний с одним экземпляром балансировщик рассматривает этот экземпляр как всегда находящийся в ротации, поэтому вне зависимости от его статуса и здоровья балансировщик будет направлять запросы и трафик на этот экземпляр.

В: Как можно определить, что экземпляр роли был переработан (recycled) или перенесен на новый сервер?

О: Нет прямого способа определения того, что экземпляр был переработан. Fabric инициирует перезагрузку, например, для обновления операционной системы, и инициирует события Stopping/OnStop, но в случае непредвиденных перезагрузок и выключений эти события вызваны не будут. Есть определенные стратегии для отслеживания этих событий:

а. Наиболее распространенный способ – запись в лог в методе RoleEntryPoint.OnStart. Если вы неожиданно увидите этот лог, то это будет значить, что экземпляр роли был переработан.

б. Если экземпляр был перенесен на новый сервер или виртуальную машину, то на всех других ролях и экземплярах инициируются события Changing/Changed типа RoleEnvironmentTopologyChange. Это происходит только при имеющихся определенных InternalEndpoint. InternalEndpoint также определяются неявно при включенном RDP.

в. Логи агента гостя содержат данные о всех перезагрузках, как запланированных так и нет, но эти логи не документируются и интерпретировать их – нетривильная задача. Но, если использовать первую стратегию, то можно ориентироваться на временной штамп.

г. Логи host bootstrapper содержат информацию об ошибках со startup-задачами и процессами хоста

March 13, 2013 / ahriman hpc mode

Как вручную переконвертировать видео-поток и переупаковать его в контейнер MP4

Столкнулся давече с проблемой того, что записал с помощью Camtasia кучу видео нужного, а потом оказалось, что видеосервис, куда писалось видео, видео такого формата-то и не поддерживает. А поддерживает он только то, что упаковано в контейнер MP4. Порывшись в Интернете, изучив тонну документации, таки решил проблему, о чем делюсь и с вами, вдруг кому пригодится.

 

1) Качаем необходимые для конечного варианта кодеки (в моем случае это Xvid)

2) Запускаем Camtasia Studio

3) Кладем AVI-исходник (либо любой другой исходник, сделанный в Camtasia) на Timeline в Camtasia

4) Нажимаем File->Produce and share

5) Выбираем Add/Edit Preset

6) New

7) Выбираем AVI

8) Далее

9) Нажимаем Video Compression и меняем внутренний кодек TSCC Камтазии на нужный нам, например, Xvid. Если нужно, на этом этапе можно отметить еще Encode Audio и переконвертировать сразу в MP3 аудио-дорожку (в камтазии по умолчанию аудио кодируется в PCM). Я делал иначе – снимал Encode Audio.

10) Далее

11) Выбираем Editing dimensions video size – будут выбраны размеры исходника, так как ресайз как-то нехорошо работает в камтазии

12) Далее далее до конца.

13) Выбираем созданный пресет и нажимаем далее

Контейнер остается тот же – AVI, но внутренности меняются – без потерь качества видео-поток конвертируется из lossless TSCC в Xvid.

14) качаем и устанавливаем утилиту YAMB (www.videohelp.com/tools/YAMB)

15) Запускаем YAMB. На вкладке Editing нажимаем Click to extract streams from AVI/…. и выбираем AVI, полученный от камтазии (не исходник). В том случае, если мы сняли Encode Audio, у нас не покажется аудио-поток, только видео – так как YAMB не поддерживает PCM. Нажимаем Next, выбираем куда класть потоки.

16) Открываем Virtual Dub и вытаскиваем аудио-дорожку из файла-исходника и конвертируем с помощью lame в MP3.

17) В YAMB на вкладке Creation нажимаем Click to create an MP4 file…. , выбираем аудио и видео-потоки и нажимаем Next.

Такие дела.

January 2, 2013 / ahriman hpc mode

2012 год, уходи :)

Найдя в ноябре бумажку с наскоро накиданными планами в январе на 2012 год, поразился – все планы были осуществлены, все цели достигнуты, и даже больше.

Кратко по итогам:

Стал Microsoft Most Valuable Professional. Запланировал в январе, стал в июле. Если честно, это было совершенно неожиданно – мне предложили номинироваться коллеги из Microsoft, с которыми мы до того очень продуктивно сотрудничали. Момент, когда пришло письмо с подтверждением (спустя три месяца томительного ожидания), был эйфорическим. 🙂

Стал аспирантом с научным руководителем с очень известным именем. Тема касается облачных вычислений. На решение о том, что надо поступать в аспирантуру и писать кандидатскую, у меня ушло почти полтора года. Но пока не жалею и, надеюсь, сделаю диссертацию раньше срока.

Стал экспертом официального сайта разработки на Windows Azure в России (http://www.azurehub.ru).

Стал менеджером Центра Инноваций Microsoft в Томске (ТПУ). Провел первое мероприятие, получил очень много позитивного опыта. В том числе – "ВСЕГДА РАБОТАЙ В КОМАНДЕ".

Цель, поставленная в январе ("выступить на максимуме мероприятий", звучит как очень плохо поставленная, если честно), была реализована полностью – около 20 выступлений на мероприятиях, включая DevCon и, как апофеоз всей деятельности за 2012 – TechEd Russia. Неожиданные ощущения – в 2011, в первый раз, приехал как простой участник, в 2012 – уже как докладчик. Познакомился со многими аспектами внутренней организации, посидел рядом с Марком Руссиновичем в комнате докладчиков Улыбка

Круг знакомств одновременно сузился и расширился. Сузился круг личных знакомств, зато многократно расширился круг профессиональных знакомств. Таки начал применять свою выстраданную теорию трех секунд к людям. Сбросил множество знакомств и "друзей", которые на поверку оказались весьма натянутыми. Стало легче.

Было написано 88 постов различного размера (и, кхм, качества) и записано 18 видео. Заметил склонность к разработке контента, причем к разработке серийного контента. Курсов, веб-кастов и так далее.

Множество (если не все) моих постов было опубликовано на русском MSDN.

Начал писать книгу по Windows Azure. Об этом как-нибудь потом. Улыбка 

По словам окружающих, очень мощно продвинулся в танго. Приятно. Танцы – супер-отдушина для души. Улыбка

Из неосуществлённого – так и не купил фотоаппарат (так как не нужен, да и учиться некогда), не  возобновил играть классику на гитаре (некогда), не съездил в отпуск (был очень близок к поездке во Вьетнам, но по совершенно идиотскому порыву души отменил билеты, потерял кучу денег и ничего не делал в Томске).

Кратко по планам на 2013

Защитить диссертацию. А почему бы и нет?

Написать книгу.

Выступить на максимуме мероприятий (да-да).

Съездить в Крым.

Съездить на MVP Global Summit.

Продлить статус MVP.

 

С новым годом!

December 18, 2012 / ahriman hpc mode

Windows Azure Tips: изменение размера OS VHD для виртуальной машины

1. Удалить виртуальную машину, но оставить VHD.

2. Создать новый VHD с необходимым размером.

3. Создать новую виртуальную машину и установить менеджер партиций EaseUS (можно попробовать с другим).

4. Подключить старый и новый VHD к новой виртуальной машине.

5. Скопировать и изменить размер партиции.

6. Отключить старую и новую партиции.

7. Создать новую виртуальную машину и подключить ее к существующему образу диска.

8. Удалить старый VHD