Режимы зеркального отображения базы данных SQL Server и тайм-аут партнера

 

Два режима зеркального отображения базы данных в SQL Server для решений HA / DR:

  1. Синхронное зеркальное отображение( высокая доступность / га )
  2. Асинхронное зеркальное отображение( аварийное восстановление / DR )

Синхронное зеркальное отображение :

Во всех базах данных SQL Server изменения данных записываются в журнал транзакций до внесения каких-либо изменений в фактические страницы данных. Записи журнала транзакций сначала помещаются в буфер журнала базы данных в памяти, а затем сбрасываются на диск (или "закаляются") как можно быстрее. При зеркальном отображении базы данных, когда основной сервер записывает буфер журнала основной базы данных на диск, он одновременно отправляет этот блок записей журнала в зеркальный экземпляр.Зеркало получает записи журнала в буфере журнала зеркальной базы данных и затем как можно быстрее закрепляет их на диске.

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

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

Режим Высокой Доступности :

Он обеспечивает наиболее надежную работу coverage.It состоят из главного, свидетеля и зеркала в синхронном режиме communication.In этот режим SQL server гарантирует, что каждая транзакция, зафиксированная на Принципале, также фиксируется в зеркале перед продолжением следующей транзакционной операции в принципале.Стоимость этой конфигурации высока, поскольку требуется свидетель.Если сеть не имеет пропускной способности, узкое место может образоваться, вызывая проблемы с производительностью в основном объекте. Если принципал потерян, зеркало может автоматически взять верх.

Режим Высокой Защиты :

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

Режим Высокой Производительности :

Он состоит только из основного и зеркального в асинхронной связи.Поскольку безопасность отключена, автоматический переход на другой ресурс невозможен из-за возможной потери данных; поэтому не рекомендуется настраивать сервер-свидетель для этого сценария. Ручная отработка отказа не включена для режима высокой производительности. Единственный допустимый тип отработки отказа-принудительная отработка отказа службы, которая также является ручной операцией.

ALTER DATABASE SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS

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

Асинхронное зеркальное отображение :

Данные, зафиксированные в принципале, отправляются на зеркало, но Принципал не ждет подтверждения от зеркального сервера, прежде чем продолжить выполнение других транзакций.Согласованность транзакций между Принципалом и зеркалом может незначительно отличаться.Зеркальная база данных может получать записи журнала через некоторое время, которое может составлять от 20 до 30 секунд, в зависимости от размера транзакции и скорости сети.

безопасность транзакций :

Если безопасность транзакций (или просто "безопасность") установлена на полную, основной и зеркальный серверы работают в режиме синхронной передачи. По мере того как основной сервер закрепляет записи журнала своей основной базы данных на диске, он также отправляет их на зеркало. Затем Принципал ожидает ответа от зеркального сервера. Зеркало реагирует, когда оно закрепило те же записи журнала на диске журнала зеркала. Когда безопасность отключена, Принципал не ждет подтверждения от зеркала, и поэтому принципал и зеркало могут быть не полностью синхронизированы (то есть зеркало может не совсем идти в ногу с принципалом).Синхронная передача гарантирует, что все транзакции в журнале транзакций зеркальной базы данных будут синхронизированы с журналом транзакций основной базы данных, и поэтому транзакции считаются безопасно переданными. Вы устанавливаете безопасность на полное использование,

ALTER DATABASE [databasename] SET SAFETY FULL

Quorum :

Кворум - это отношения между свидетелем, Принципалом и зеркалом.В зависимости от режима работы он делится на 3.

Полный Кворум:

Это когда все 3 свидетеля, принципал и зеркало могут общаться друг с другом.Поскольку свидетель присутствует, происходит автоматический переход на другой ресурс.

Quorum:

Это состояние существует, если свидетель и любой из партнеров могут общаться с ним.

Партнер-партнеру:

Когда только принципал и зеркало могут общаться друг с другом.

режим работы :

SQL Server предоставляет 3 режима работы для зеркального отображения базы данных, и точный режим зависит от настройки безопасности транзакций и того, является ли сервер-свидетель частью сеанса зеркального отображения.

 Настройка таймаута Patner:

Вот сообщение журнала ошибок SQL Server на одном из SQL Server 2008 R2

"Зеркальное соединение с" TCP: / / имя_сервера: 5022 "истекло для базы данных" <имя_базы_данных> " через 10 секунд без ответа. Проверьте сервис и сетевые подключения.”

Это сообщение о таймауте зеркального отображения базы данных. Это сообщение связано с процедурой отработки отказа зеркального отображения базы данных.

В режиме высокой доступности синхронного зеркального отображения базы данных с автоматическим переходом на другой ресурс задействованы три сервера: основной, зеркальный и свидетель.

Три сервера постоянно связываются друг с другом, образуя кворум, и если одна из машин недоступна, другие машины определяют, как обрабатывать отказоустойчивость.

В данном конкретном случае основной экземпляр не получал никаких ответов на” пинг " в течение 10 секунд от свидетеля, в результате чего отказ был инициирован через 10 секунд без ответа. 10 сек-это настройки тайм-аута партнера по умолчанию.

Наиболее распространенные причины, по которым ответ на пингинг не удался

  1. медленное сетевое соединение или надежность сети
  2. географически рассредоточенные зеркальные партнеры
  3. аппаратный сбой/SAN / Vm
  4. Что можно сделать, чтобы избежать случайного отказа базы данных?
  5. Увеличьте значение тайм-аута партнера.

 Что такое тайм-аут партнера?

Максимальный период времени, в течение которого экземпляр сервера ожидает получения сообщения " ping” от другого экземпляра SQL Server в сеансе зеркального отображения, прежде чем считать этот другой экземпляр отключенным

Параметр TIMEOUT может быть определен только на основном сервере

Указывает период ожидания в секундах

Опция не может быть установлена через графический интерфейс пользователя

Период времени по умолчанию равен 10 секундам.

Если вы установите его на что-нибудь между 0 и 4 секундами, он автоматически установит тайм-аут на 5 секунд. Если вы установите его на 5 секунд или больше, он будет установлен на это значение.

Указанное число должно быть целым числом

 Чтобы изменить тайм-аут партнера?

Чтобы изменить тайм-аут партнера на 20 секунд

ALTER DATABASE <databasename> SET PARTNER TIMEOUT 20

Полезные запросы для устранения неполадок зеркального отображения базы данных

Проверка значения таймаута

Select Mirroring_Connection_Timeout from sys.database_mirroring where database_id = db_id(‘<databasename> ‘)

Запрос для проверки связанных портов с зеркальным отображением БД

Select type_desc, порт from sys.tcp_endpoints where type_desc like ' %MIRROR%’;

Запрос для проверки состояния зеркального отображения БД

Select state_desc from sys.database_mirroring_endpoints