Можно ли одновременно изменять конфигурацию IIS
У нас есть несколько веб-сайтов в IIS на каждом из наших серверов, и у нас есть сценарии PowerShell, которые могут создавать/обновлять отдельный веб-сайт, а также настраивать привязки, SSL, пулы приложений и т. д.
Учитывая размер фермы серверов и количество веб-сайтов, крайне желательно иметь возможность обновлять несколько веб-сайтов одновременно.
Однако при этом возникает проблема обновления applicationHost.конфигурация сайта A, может быть перезаписана параллельными обновлениями для сайт B.
Возможно ли это?
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)