Недавно мы внедрили отказоустойчивый кластер SQL Server 2012 Always On. Запуск состоится через 2 недели, и возникли некоторые проблемы. Раньше мы имели дело с серверами в одной подсети, но с тех пор мы переместили серверы в несколько подсетей. После этого мы столкнулись с проблемой аварийного переключения нескольких подсетей; http://technet.microsoft.com/en-us/library/ff878716.aspx а>.
«В конфигурации с несколькими подсетями как онлайн, так и оффлайн IP-адреса сетевого имени будут зарегистрированы на DNS-сервере. Затем клиентское приложение извлекает все зарегистрированные IP-адреса с DNS-сервера и пытается подключиться к адресам в порядке или параллельно.Это означает, что время восстановления клиента при отработке отказа в нескольких подсетях больше не зависит от задержки обновления DNS.
По умолчанию клиент пробует IP-адреса по порядку. Когда клиент использует новый необязательный параметр MultiSubnetFailover=True в своей строке подключения, вместо этого он одновременно пытается использовать IP-адреса и подключается к первому ответившему серверу. Это может помочь свести к минимуму задержку восстановления клиента при аварийном переключении».
Признаки проблемы: Сервер PHP 5.4 периодически не может подключиться. Он может работать 20 минут, потом 25 минут не работать, а потом работать 40 минут.
Мы попытались ввести параметр MultiSubnetFailover следующим образом:
$dbhandle = sqlsrv_connect(
$myServer,
array("UID"=>$myUser, "PWD"=>$myPass, "Database"=>$myDB, 'ReturnDatesAsStrings'=> true,
'MultiSubnetFailover'=> true)
)
И обновление веб-сервера с помощью драйверов Microsoft SQL, которые явно поддерживают отказоустойчивость в нескольких подсетях; http://blogs.msdn.com/b/sqlphp/archive/2012/03/07/microsoft-drivers-3-0-for-php-for-sql-server-released-to-web.aspx
Подсети настроены правильно, и я могу нормально подключаться через другие службы, такие как SQL Server Management Studio, когда я задаю параметр «MultiSubnetFailover=Yes», на самом деле разница между днем и ночью.
Любая помощь приветствуется, это слишком близко к выпуску для комфорта.
РЕДАКТИРОВАТЬ: на самом деле есть вторая строка подключения, которую я пропустил, но после ее настройки с параметром аварийного переключения с несколькими подсетями ошибка все еще возникает;
$pdoHandle = new PDO("sqlsrv:server={$myServer};database={$myDB};multiSubnetFailover=yes", $myUser, $myPass);