[Q&A] Тестируем сетевую задержку в рамках фермы SharePoint 2013

Q: Какие требования для сетевой задержки в рамках фермы SharePoint, и как ее можно замерить?

A: Согласно требованиям, сетевая задержка в рамках фермы SharePoint должна удовлетворять следующим условиям:

  • Присутствует устойчивая задержка <1 мс в одном направлении, действующая 99,9 % времени за период в десять минут. (Задержкой внутри фермы обычно называется задержка между интерфейсными веб-серверами и серверами баз данных.)
  • Пропускная способность должна составлять хотя бы 1 гигабит в секунду.

В рамках данной статьи не будет рассматриваться ручной способ, вместо этого рассмотрим скрипт PowerShell, который выполняет следующие действия:

  • Проверяет сетевую доступность всех серверов фермы
  • Открывает ODBC соединение к серверу баз данных
  • Проверяет, что окружение соответствует требованиям, когда 99.9% пингов между серверами фермы происходит менее чем 1 мс в течение 10-минутного периода Для удобства, время тестирования вынесено в переменную $RunTime.
#####Set Local Variables
#Set Host Names, or IP Addresses
$hostnames = "10.0.0.1", "SomeHost"

#SQL Server Name\Instance
$SQLname = "SQL\Instance"

#Configure Run Time in Minutes (helpful for debugging)
$RunTime = 10

#Configure an allowance for late pings (in ms, one way)
$allowance = 0
#####

### test connectivity ###
Write-Host "Test Connectivity:"

Write-Host "Testing Ping"
$ping = New-Object System.Net.NetworkInformation.ping

foreach($a in $hostnames){
	$status = $ping.send($a).Status
	if($status -ne "Success"){
		throw "Ping Failed to $($a)"
	}
}
Write-Host " - Succeeded `n"

### test SQL connectivity ###
Write-Host "Testing SQL Connection"
$SQLConnection = New-Object System.Data.Odbc.OdbcConnection
$SQLConnection.connectionstring = "Driver={SQL Server};Server=$SQLname"
$SQLConnection.open()
if($SQLConnection.state -ne "Open"){
	throw "SQL Connection Failed"
}
Write-Host " - Succeeded `n"

### Intra-server latency consistency test ###
Write-Host "Start network consistency test"

$ScriptBlock = {
	# accept the loop variable across the job-context barrier
	param($InHost, $RunTime)

	$start = [DateTime]::Now
	$ping = New-Object System.Net.NetworkInformation.ping

	$PingResults = @()
	while([datetime]::now -le $start.AddMinutes($RunTime)){
		$outping = $ping.send($InHost)
		if($outping.Status -ne "Success"){
			$PingResults = $PingResults + 100
			} else{
				$PingResults = $PingResults + $outping.RoundtripTime
			}
			Start-Sleep .1
	}
	return $PingResults
}

#run ping jobs in parallel
foreach($i in $hostnames){
	Start-Job $ScriptBlock -ArgumentList $i, $RunTime -Name "$i.latency_test"
}

Write-Host "
processing...`n"

#wait and clean up
While (Get-Job -State "Running") { Start-Sleep 5 }

$output = @{}
foreach($i in $hostnames){
	$output[$i] = Receive-Job -Name "$i.latency_test"
}
Remove-Job *

#test results
$LatencyTestFailed = 0
foreach($i in $hostnames){
	$BadPings = $output[$i] | ?{$_/2 -ge 1 + $allowance}
	$PercentBadPings = $BadPings.length / $output[$i].Length * 100
	if($PercentBadPings -ge .1){
		"$i DOES NOT meet the latency requirements with $PercentBadPings % of pings >$(1+$allowance)ms" | Write-Host
		$LatencyTestFailed = 1
		} else{
			"$i meets the latency requirements with $PercentBadPings % of pings >$(1+$allowance)ms" | Write-Host
		}
}
if($LatencyTestFailed -eq 1){
	throw "Farm Latency Test Failed"
}

Ссылки

SharePoint 2013 Environment Latency and Network Test Script

Требования к оборудованию — местонахождение физических серверов

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s