Настройка отказоустойчивой системы

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

Ставилась задача по настройке автоматической отказоустойчивости и отсутствию возможности утраты данных  для 1С — была рализована с настройкой кластера 1С и кластера MS SQL.

Но хотелось, чтобы базы на MS SQL — были зеркальные, потому что :

Основные достоинства Database Mirroring

  1.       Восстановление менее 3 секунд
  2.       Полноценный резерв
  3.       Два отдельных сервера
  4.       Две отдельных копии данных
  5.       Взаимодействие между серверами через стандартное сетевое соединение
  6.       Нет специальных требований на аппаратное обеспечение
  7.       Самоконтроль
  8.       Высокая доступность для базы данных

Но 1С сама не может переключиться на другую базу-тогда пришло такое решение.

В проекте были задействованы 6 серверов: 2 сервера 1С, 3 SQL сервера и 1 веб-сервер  (рис.1).

Был настроен кластер серверов 1С: Центральный и резервный (на рис.1) T1C и T1Сс, затем настроено зеркальное отображение базы данных.  Сделав это — будет не просто улучшена возможность аварийного восстановления вашего приложения, вы будете использовать высокий уровень доступности зеркального отображения базы данных — функция, которую вы найдете в SQL Server 2005 и выше, это означает, что отказоустойчивость базы данных, в случае если потеряете ваш главный SQL сервер. Нам понадобиться  3 SQL сервера (TSQL1, TSQL2, TSQL3).  2 SQL сервера (Principal и Mirror) должны быть идентичными, например, это означает версия (Standard или Enterprise), пакеты обновлений должны быть одинаковы на обоих серверах. Третий сервер может быть SQL Server Standard, Enterprise, Workgroup или Express.  Свидетель (Witness) сервер будет, пинговать 2 других серверах, если есть что-то неправильно, это сервер имеет способность узнавать о начале автоматического перехода на другой, он не будет содержать базу данных, поэтому  бессмысленно использовать SQL Server, кроме Express Edition.

Создав базы на серверах 1С и SQL – серверах опубликуем из конфигуратора веб-сервис на сервере TIIS.

Подробно как настраивать ваше написанное,  описывать не стал, в сети много ресурсов, которые дают подробную инструкцию об этом.

Сама 1С не может переключиться на другой SQL сервер, при остановке главного. Выход — было написано приложение для запуска 1С.(рис.2)

Приложение проверяет работу SQL серверов — включен ли сервер физически, потом происходит проверка работоспособности самого SQL-сервера, а затем запускает 1С через введенный адрес для IE.

21 Comments

  1. Gandalf Белый

    Тема конечно интересная, но очень слабое описание…

    Что бы посмотреть как настраивается зеркалирование SQL и для чего «следящий» сервер нужно искать «в сети много ресурсов, которые дают подробную инструкцию».

    И что за приложение написано, оно пингует эти сервера или как-то по другому проверяет?

    Работа через веб-сервер это один из вариантов или в данной ситуации необходимость?

    Было бы еще очень интересно посмотреть на скриншоты настроек SQL-сервера.

    Reply
  2. DitriX

    Что то как то сыро. Вы бы могли поподробней рассказать как делали настройку со стороны 1С?

    Не пробовали ли ставить 1с на следящий сервер, а остальные добавить к нему в виде рабочих машин.

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

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

    Я уже точно этого всего не помню, но хотелось бы разобраться 🙂

    Reply
  3. aspirator23

    Эта технология обеспечивает отказоустойчивость системы.

    Но, насколько помню есть особенности:

    1.Данный способ требует трех SQL серверов. Для MSSQL есть решение когда работают только

    два. Правда в этом случае автоматическое переключение не работает, но экономия на лишнем сервере.

    2.Более важно то что в предложенном способе при выполнении транзакции она будет завершена, только после записи в базы обоих серверов SQL. То есть будет «просадка» производительности. При использовании же двух серверов, есть режим отложенной записи, который выполняет запись на второй сервер, не задерживая транзакцию на основном.

    Reply
  4. maverick76

    (3) aspirator23, По пункту 1 вашего комментария: Выбор отказоустойчивого решения зависит от стратегического развития информационных технологий,бюджета. А по пункту 2: конечно есть выбор между более высокой производительностью и более высокой надежностью: Database Mirroring имеет два уровня надежности:

    -FULL – фиксация при записи лога на Mirror(Допускает автоматическое восстановление,нет потери данных)

    -OFF – фиксация при записи лога на Principal

    Reply
  5. maverick76

    (1) (1) Подробную инструкцию со скриншотами по настройке такой системы,заканчиваю оформлять, прикреплю к данной публикации.

    Reply
  6. Said

    Не совсем понятны две вещи:

    Останется ли система работоспособной, если откажет вебсервер или следящий сервер?

    И можно ли совсестить эти два сервера на одной машине? На сколько высока на них нагрузка?

    Reply
  7. maverick76

    (6) Said, при отказе следящего-партнеры могут формировать кворум самостоятельно, самое главное в системе,что данные не потеряются,а развернуть вебсервер думаю не составит такого труда,как в сравнении с восстановлением данных.Нагрузка на следящий сервер очень мала:отвечает на запрос проверки связи,отвечает на вопрос “Жив ли другой сервер?”.

    Reply
  8. maverick76

    (2) DitriX, Идея хорошая — попробую…

    Reply
  9. zzz_natali

    При таком обильном задействовании серверов(железа) напрашивается полная виртуализация(Hyper-V) безотказного кластера:

    сервачок а-ля blade

    базо-помойка nat storage

    И всегда помним главную вещь: сколько времени уйдет, чтобы осмыслить на какой момент времени у нас всё поднялось после аварийного краша. 🙂

    Reply
  10. maverick76

    (9) zzz_natali, Такое решение имеет место быть… 🙂

    Reply
  11. max44

    maverick76 Когда меняете конфигурацию и требуется изменение структуры БД (например добавили новый справочник и т.п. …) Зеркалирование нужно останавливать? (иначе конфигурацию не поменять), а после смены конфигурации восстанавливать полный бэкап на зеркале и подымать зеркалирование? при большом размере БД и частых изменения конфигурации весмьма затратный

    Reply
  12. Den_D

    (0) А сколько ключей для Сервера 1С: Предприятия требуется, на каждый?

    Reply
  13. Den_D

    И чем хуже настройка кластера серверов Предприятия и и кластера windows и SQL на 2-х машинах с общим дисковым массивом RAID 10?

    Reply
  14. maverick76

    (13) Den_D, время простоя < 3 сек.,у кластера 20 сек.+ восстановление БД,у зеркала — устойчивость к сбою дисковой подсистемы, у кластера -нет…

    Reply
  15. maverick76

    (11) max44, Зачем останавливать? Работайте,как если бы был один SQL сервер.

    Reply
  16. Den_D

    (14) восстановление БД потребуется только если накроется отказоустойчивая дисковая подсистема. При этом она же является независимой от самих серверов. Переключение будет автоматическим, меньше будет разнообразных отдельных машин.

    Reply
  17. Den_D

    (14) и все же А сколько ключей для Сервера 1С: Предприятия требуется?

    Reply
  18. maverick76

    (16) Den_D, Такую систему я уже реализовывал,а это новая реализация с использованием зеркала

    Reply
  19. maverick76

    (17) Den_D, 2 аппаратных ключа,1-10 лицензий,2-100 лицензий

    Reply
  20. dyak84

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

    Reply
  21. nyam-nyam

    (14) Время простоя серверов может и меньше 3 сек, только вот судя по описанию, пользователю понадобится перезапускать 1С если вдруг SQL переключится во время работы. В итоге время простоя будет больше. У кластера с общим хранилищем переключение SQL серверов проходит вообще незаметно для пользователей.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *