Можно ли одновременно изменять конфигурацию IIS


У нас есть несколько веб-сайтов в IIS на каждом из наших серверов, и у нас есть сценарии PowerShell, которые могут создавать/обновлять отдельный веб-сайт, а также настраивать привязки, SSL, пулы приложений и т. д.

Учитывая размер фермы серверов и количество веб-сайтов, крайне желательно иметь возможность обновлять несколько веб-сайтов одновременно.

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

Возможно ли это?

1 2

1 ответ:

Всегда лучше всего проверить это:

Давайте начнем с простого скрипта, который создает некоторые сайты, в данном случае 20.

Param
(
    [Parameter(Mandatory=$true)]
    [int]
    $offset
)

Import-Module WebAdministration

ForEach ($number in 1..20 ) {

    $id = $offset + $number
    New-WebSite -Name $("Test_" + $id) -Port $id -Id $id -PhysicalPath "$env:systemdrive\inetpub\wwwroot" 
}

Я сохраняю это в C:\temp\New-TestSite.ps1

Теперь запустите этот скрипт три раза одновременно, я создал другой скрипт: C:\temp\Run-Test.ps1 со следующим содержимым:
start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 10000}
start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 20000}
start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 30000}

После запуска Run-Test.ps1, давайте проверим, сколько сайтов мы создали:

ls iis:\sites | group {$_.Name.substring(0,6)} | Select Count,Name | Format-Table -AutoSize

Я получил:

Count Name
----- ----
   19 Test_1
   18 Test_2
   15 Test_3

Таким образом, мы создали 52 из 60

При создании 50 на сценарий, я есть:

Count Name
----- ----
   31 Test_1
   31 Test_2
   30 Test_3

Это 92 из 150

Еще хуже в некоторых тестовых случаях, один из процессов PowerShell потерпел крах:

Введите описание изображения здесь

По крайней мере Get-Job показывает:

Id     Name            PSJobTypeName   State    
36     Job36           BackgroundJob   Failed   
38     Job38           BackgroundJob   Completed
40     Job40           BackgroundJob   Completed

Таким образом, в заключение, мы можем сказать, что это не сохранить, чтобы изменить applicationHost.конфиг одновременно.

Конечно, это экстремальный тестовый случай, и одновременное внесение изменений вручную может сработать, но мы должны быть осторожны.

Тесты, выполняемые на сервере 2012 R2 (IIS 8.5)