Как настроить отказоустойчивость 1С и SQL на двух серверах: подробное руководство

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Обеспечение непрерывности бизнеса и отказоустойчивости ИТ-инфраструктуры — одна из важнейших задач для любой растущей компании. Особенно остро этот вопрос встает в розничной торговле, где даже небольшой простой кассовой зоны ведет к прямым финансовым и репутационным потерям. Классический подход к построению отказоустойчивых кластеров (High Availability) требует значительного парка оборудования: минимум 5–6 серверов для распределения ролей СУБД, серверов приложений 1С и серверов лицензирования. Однако далеко не каждый бизнес готов к таким капиталовложениям.

В этой статье мы подробно проанализируем, как организовать надежную и отказоустойчивую работу связки «1С:Предприятие + MS SQL Server», имея в распоряжении всего два физических сервера. Мы разберем по шагам несколько рабочих архитектурных сценариев, оценим их плюсы и минусы, а также предложим оптимальное решение для розничной сети.

Анализ рисков и концепция «двух серверов»

Прежде чем переходить к технической реализации, давайте проанализируем ситуацию. У нас есть работающий сервер «все в одном» (1С + SQL + Терминальный сервер/Веб-сервер). Мы приобретаем второй аналогичный сервер, который планируем разместить на другой физической площадке (например, в другом офисе или дата-центре), чтобы обезопасить систему от локальных проблем с электропитанием и провайдерами связи.

При проектировании системы на двух узлах мы неизбежно сталкиваемся со следующими технологическими вызовами:

  1. Проблема «Split-Brain» (расщепление мозга): Если серверы теряют связь друг с другом, как определить, какой из них активен, а какой должен уйти в режим ожидания? Без третьей стороны (арбитра) оба сервера могут решить, что напарник «умер», и попытаются одновременно записывать данные, что приведет к повреждению базы данных.
  2. Лицензирование 1С и SQL: Программные лицензии 1С жестко привязываются к аппаратным характеристикам сервера. При простом переносе или дублировании служб на второй сервер нам потребуется приобретать второй комплект клиентских и серверных лицензий.
  3. Перенаправление пользователей: Каким образом кассовые аппараты и тонкие клиенты на точках узнают, что основной сервер недоступен, и как они переключатся на резервный?
  4. Пропускная способность каналов связи: Синхронизация баз данных в реальном времени требует высокоскоростных каналов связи с минимальной задержкой (ping).

Рассмотрим четыре практических сценария решения этих задач.

Сценарий 1. Высокая доступность СУБД через Always On и File Share Witness

Многие системные администраторы считают, что для развертывания технологии высокой доступности Always On Availability Groups в MS SQL Server обязательно требуется полноценный трехузловой кластер. На самом деле, Microsoft SQL Server позволяет развернуть полноценную отказоустойчивую СУБД силами всего двух серверов.

Для реализации этого сценария мы выполним следующие шаги:

  1. Создадим службу Windows Server Failover Clustering (WSFC), объединив два наших физических сервера в единый кластер.
  2. Решим проблему кворума (защиту от Split-Brain). Для этого мы настроим так называемого «свидетеля» — File Share Witness (файловый свидетель). Это обычная сетевая папка общего доступа, к которой оба сервера имеют доступ. В качестве хоста для этой папки можно использовать любое недорогое устройство на нейтральной территории: виртуальную машину в облаке, роутер в центральном офисе или даже сетевое хранилище (NAS). Главное — чтобы папка была доступна обоим серверам по сети.
  3. Настроим группы доступности Always On. Если используется редакция SQL Server Standard, нам доступна функция Basic Availability Groups (базовые группы доступности). Она позволяет настроить репликацию для одной конкретной базы данных 1С между основным (Primary) и резервным (Secondary) серверами. Данные будут синхронизироваться в режиме реального времени.

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

Сценарий 2. Репликация на уровне виртуализации (Hyper-V / VMware)

Если мы не хотим усложнять администрирование операционных систем настройкой кластеров SQL и 1С, отличным решением класса Disaster Recovery (аварийное восстановление) является репликация на уровне гипервизора. Этот подход имеет колоссальное преимущество с точки зрения стоимости лицензирования 1С.

Разберем данный подход по шагам:

  1. На обоих физических серверах развертывается одинаковый гипервизор (например, бесплатный Microsoft Hyper-V Server или VMware ESXi).
  2. Вся рабочая среда (ОС Windows/Linux, СУБД SQL, сервер приложений 1С и веб-сервер IIS/Apache) упаковывается внутрь одной или двух виртуальных машин (ВМ) на первом хосте.
  3. Настраивается асинхронная репликация этих виртуальных машин на второй хост. Периодичность репликации можно настроить в диапазоне от 30 секунд до 15 минут.
  4. Благодаря механизму интеграции со службами теневого копирования (VSS), гипервизор делает согласованные снимки состояния (application-consistent), гарантируя, что база данных SQL на резервном сервере запустится без повреждений.

Важнейший нюанс лицензирования 1С: Программные лицензии 1С привязываются к ключевым параметрам системы (имя компьютера, SID операционной системы, объем ОЗУ, количество ядер процессора, MAC-адрес сетевой карты). Поскольку на втором сервере развернут точно такой же гипервизор, виртуальная машина запустится на нем с абсолютно идентичными виртуальными параметрами (UUID, MAC, характеристики процессора). Это значит, что программные лицензии 1С не «слетят», и нам не придется покупать второй дорогостоящий комплект лицензий!

В случае аппаратной аварии первого сервера системный администратор может запустить реплику виртуальной машины на втором сервере вручную или с помощью простого скрипта всего за 3–5 минут.

Сценарий 3. Отказоустойчивый кластер серверов 1С

Если перед нами стоит задача обеспечить одновременную работу серверов 1С в режиме распределения нагрузки и горячего резервирования, мы можем настроить кластер платформы 1С:Предприятие 8.3 на двух узлах.

Проанализируем настройки, которые необходимо выполнить в консоли администрирования кластера 1С:

  1. Добавим оба сервера в один кластер 1С.
  2. В свойствах кластера установим параметр «Уровень отказоустойчивости» равным 1. Это критически важно: формула расчета звучит как:

    Количество центральных серверов = Уровень отказоустойчивости + 1

    При значении «1» оба наших сервера станут центральными. Они будут дублировать критически важные данные сеансов и смогут бесшовно перехватывать обслуживание пользователей в случае падения одного из рабочих процессов.
  3. Настроим «Требования назначения функциональности». Это позволит нам гибко распределять задачи. Например, мы можем принудительно закрепить сервис лицензирования за конкретным узлом или распределить фоновые задания так, чтобы они выполнялись на менее нагруженном сервере.

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

Сценарий 4. Автоматическое перенаправление пользователей

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

Рассмотрим два популярных метода:

  1. DNS Failover (Отказоустойчивый DNS): Мы публикуем нашу базу по доменному имени (например, https://trade.company.ru/ut). В настройках DNS-сервера указываем короткое время жизни записи (TTL = 60 секунд). Скрипт мониторинга непрерывно проверяет доступность первого сервера. Если он падает, скрипт автоматически меняет IP-адрес для записи trade.company.ru на IP-адрес второго сервера. Клиенты переподключатся к рабочей ноде в течение одной-двух минут.
  2. HTTP-балансировщик (Nginx / HAProxy): Перед серверами 1С устанавливается легкий прокси-сервер (его можно запустить на виртуальной машине или на производительном роутере). Проанализируем пример простейшей конфигурации upstream для Nginx:

upstream 1c_cluster {
    server 192.168.1.10:80 max_fails=3 fail_timeout=10s;
    server 192.168.2.10:80 backup;
}

server {
    listen 80;
    server_name trade.company.ru;

    location / {
        proxy_pass http://1c_cluster;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

В этой конфигурации Nginx направляет весь трафик на основной сервер (192.168.1.10). Если он перестает отвечать на запросы, Nginx мгновенно и незаметно для пользователей переключает весь трафик на резервный сервер (192.168.2.10, помеченный как backup).

Кардинальное решение для розницы: гибридная архитектура

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

Поэтому самым надежным и профессиональным решением для розницы является переход на гибридный (автономный) режим работы:

При такой архитектуре кассиры пробивают чеки локально. Продажи идут без задержек, печать чеков на ККМ происходит мгновенно. Если падает интернет на точке или отключается центральный сервер, магазин продолжает полноценно торговать в автономном режиме. Как только связь восстанавливается, накопленные чеки и отчеты о продажах автоматически выгружаются в центральную систему «1С:Управление торговлей».

Использование гибридной схемы в сочетании с репликацией виртуальных машин (Сценарий 2) гарантирует бизнесу практически 100% защиту от простоев кассовой зоны при минимальных затратах на ИТ-инфраструктуру.

← На главную