Рекомендуемое исправление Windows для групп обеспечения доступности баз данных, работающих под управлением Windows Server 2008 R2

Исходная статья опубликована в воскресенье, 20 ноября 2011 г.

В начале августа этого года группа Windows SE опубликовала следующую статью базы знаний и соответствующее исправление программного обеспечения, касающееся проблемы с отказоустойчивыми кластерами Windows Server 2008 R2:

KB2550886 - Временный сбой подключения вызывает остановку работы отказоустойчивого кластера Windows Server 2008 R2

Это исправление настоятельно рекомендуется устанавливать для всех групп обеспечения доступности баз данных (DAG), размещенных в нескольких центрах обработки данных. Данное исправление также пригодится для групп DAG, находящихся в одном центре обработки данных. В этой статье описывается условие состязания и взаимоблокировка кластерных баз данных, которые могут возникать, когда в отказоустойчивом кластере Windows происходит временный сетевой сбой. В логике повторного подключения кластерных узлов имеется условие состязания, которое проявляется при возникновении сетевых сбоев в кластере. В этом случае происходит зависание кластерной базы данных, что ведет к потере кворума в отказоустойчивом кластере.

Как описывается в статье TechNet, группа обеспечения доступности баз данных (DAG) использует функции конкретного кластера, включая кластерную базу данных. Для нормальной работы группы DAG и обеспечения высокой доступности кластер и кластерная база данных также должны нормально работать.

Корпорация Майкрософт обнаружила ряд ситуаций, когда временные сетевые сбои (сбой сетевого подключения продолжительностью около 60 с) ведут к возникновению взаимоблокировки во всем кластере и отключению всех баз данных внутри группы DAG. Поскольку определить, какой узел кластера находится во взаимоблокировке, довольно сложно, при возникновении взаимоблокировки отказоустойчивого кластера в результате условия состязания в логике повторного подключения единственным доступным вариантом разрешения такой ситуации является перезапуск всех членов кластера.

Эта проблема обычно проявляется в виде потери кворума кластера из-за асимметричного сетевого сбоя (когда два узла не могут взаимодействовать друг с другом, но могут взаимодействовать с другими узлами). При возникновении на других узлах задержек в получении сообщений о перегруппировке кластера от диспетчера глобального обновления сообщения о перегруппировке могут поступать в неожиданном порядке. В этом случае теряется кворум кластера, а не вызывается ожидаемое поведение, которое должно удалить один из узлов, пострадавший от изначального сетевого сбоя в кластере.

Обычно эта ошибка проявляется при наличии асимметричной задержки (например, когда половина членов группы DAG имеет задержку 1 мс, а другая половина — 30 мс) для двух узлов кластера, которые обнаруживают сбой подключения между ними. Если первый узел обнаруживает сбой подключения задолго до второго, может возникать условие состязания:

  • Первый узел инициирует повторное создание потока между двумя узлами. Это приведет к тому, что второй узел добавит новый поток в свои данные.
  • Добавление нового потока разрывает прежний поток и переводит его обработчик ошибок в состояние "игнорировать". В случае сбоя старый поток будет потоком с ошибкой, который еще не обнаружен.
  • Когда на втором узле обнаруживается сбой подключения, он инициирует свое собственное переподключение. Если сбой подключения обнаруживается в правильный период времени для состязания, то обработчик ошибок потока с ошибкой будет переведен в состояние "игнорировать", а процесс переподключения не запустит переподключение. Однако он создаст паузу для очереди отправки, которая приостанавливает отправку сообщений между узлами. Когда обмен сообщениями остановлен, диспетчер глобального обновления не может нормально работать, в результате чего вызывается принудительный перезапуск кластера.

При возникновении данной ошибки последствия для групп DAG оказываются плачевными. Поэтому мы рекомендуем развертывать это исправление на всех серверах почтовых ящиков, входящих в группу DAG, особенно если группа DAG размещена в нескольких центрах обработки данных. Это исправление также полезно для сред кластеров с единым хранилищем Exchange 2007 и кластеров с непрерывной репликацией.

Помимо исправления описанной выше проблемы, в статье KB2550886 представлены другие важные исправления Windows Server 2008 R2, которые рекомендуется устанавливать для групп DAG:

  • https://support.microsoft.com/kb/2549472 — Узел кластера не может заново подсоединиться к кластеру после перезапуска узла или удаления из кластера в Windows Server 2008 R2
  • https://support.microsoft.com/kb/2549448 — Служба кластера до сих пор использует время ожидания по умолчанию, несмотря на его изменение в Windows Server 2008 R2
  • https://support.microsoft.com/kb/2552040 — Потеря кворума в отказоустойчивом кластере Windows Server 2008 R2 при сбое асимметричного подключения

Это локализованная запись блога. Исходная статья доступна по адресу: Recommended Windows Hotfix for Database Availability Groups running Windows Server 2008 R2