Ликург
Заметки | Тех.книги | Худ.книги |

Зеркалирование баз данных в MSSQL

Технология зеркалирования баз данных появилась в MSSQL 2005. Данная технология позволяет резервировать базу данных в реальном времени и автоматически переводит резервную базу в рабочий режим при недоступности основной базы.

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

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

Хотя зеркалирование происходит на уровне баз, для его работы, необходимо чтобы базы располагались на отдельных инстанциях. Для взаимодействия на каждой инстанции создается конечная точка (endpoint). При использовании сервера свидетеля, необходима отдельная инстанция для следящей контрольной точки (witness endpoint). Специально создавать отдельную инстанцию нет необходимости, можно использовать любую рабочую инстанцию на отдельном SQL сервере.

Конечная точка (endpoint) - это интерфейс для взаимодействия. Для зеркалирования на инстанции нужна только одна конечная точка и создавать отдельные конечные точки под каждое зеркалирование не требуется.

Настройка зеркалирования

Настроить зеркалирование с помощью MSSQL Management Studio относительно легко. Для этого вам потребуется три инстанции на трех разных MSSQL серверах (желательно одной версии) в одном домене Active Directory. Можно обойтись двумя и не использовать сервер свидетеля (witness), но этот вариант я не тестировал и думаю его не стоит рассматривать для промышленных систем.

1. Убедитесь, что база имеет модель резервирования Full

2. Выполните полное архивирование базы и восстановите базу из архива на резервном сервере. Восстановление необохдимо производить с опцией "NO RECOVERY". Не уверен что это обязательное требование, но всегда стараюсь, чтобы пути размещения файлов и логов базы совпадали на основном и резервном сервере.

3. Откройте контекстное меню базы Tasks\Mirror

4. Запустите мастер создания зеркала кнопкой [Configure Security]

5. Окно "Include Witness Server" выберете (*) Yes

6. Окно "Choose Servers to Configure", убедитесь, что выбраны все три инстанции Principal, Mirror, Witness

7. Далее идут три окна "Principal Server Instance", "Mirror Server Instance", "Witness Server Instance". В каждом из них необходимо выбрать соответствующий сервер и инстанцию. Если на инстанции еще не создано контрольной точки зеркалирования, то будут доступны для редактирования поля порта и имени конечной точки. Не стоит задавать имена отличные от значений по умолчанию, т.к. одна точка будет использоваться для всех будущих зеркалирований на данной инстанции и не будет зависить от её роли.

8. Окно "Service Accounts", указываем три учетных записи, которым будет предоставлено право подключения к конечным точкам.

9. Окно "Database Properties", запустите зеркалирование [Start Mirroring]

Удаление зеркалирования

Откройте контекстное меню базы Tasks\Mirror и нажмите кнопку [Remove Mirroring]. После этого активная база станет обычной базой, а её зеркальная копия останется в состоянии "Restoring", как после восстановления с опцией "NO RECOVERY"