В современных высоконагруженных системах на базе 1С:Предприятие 8.3 вопросы отказоустойчивости и производительности СУБД выходят на первый план. Технология MS SQL Always On Availability Groups является одним из наиболее мощных инструментов для решения этих задач. В этой статье мы подробно разберем, как интегрировать 1С с фермой MS SQL, какие существуют ограничения по распределению нагрузки и как правильно настроить среду для стабильной работы.
Для начала проанализируем, что представляет собой Always On. Это решение для обеспечения высокой доступности и аварийного восстановления, которое пришло на смену классическому зеркалированию (Mirroring). В отличие от обычного кластера (Failover Cluster Instance), где используется общее хранилище, Always On позволяет иметь копии базы данных на разных серверах с собственными дисковыми подсистемами. Для 1С это означает, что даже при полном выходе из строя одного сервера базы данных, система продолжит работу на другом узле.
Рассмотрим ключевой момент: распределение нагрузки. Стандартно в Always On существует одна первичная реплика (Primary), доступная на чтение и запись, и несколько вторичных реплик (Secondary). Разберем ситуацию с записью объектов, которая часто волнует разработчиков. В рамках архитектуры SQL Server распределить запись на несколько серверов в одной группе доступности невозможно — транзакции всегда фиксируются сначала на первичной ноде.
Выясним, как заставить платформу 1С корректно работать с кластером. Для этого используется механизм Listener (прослушиватель) — виртуальное имя и IP-адрес, которые всегда указывают на текущую активную ноду.
Посмотрим на шаги по настройке подключения:
MultiSubnetFailover. Если ваши узлы SQL находятся в разных подсетях (например, в разных дата-центрах), необходимо обеспечить поддержку этого параметра драйвером на сервере 1С.Проанализируем технический нюанс: без активации MultiSubnetFailover=True в строке подключения, время переключения на резервный узел может составлять несколько минут, что приведет к массовому отвалу пользовательских сессий 1С. Хотя в консоли 1С нет отдельной галочки для этого параметра, он настраивается на уровне системных параметров ODBC или через дополнительные настройки драйвера SQL Server Native Client.
Рассмотрим ситуацию, когда мы хотим разгрузить основной сервер, перенаправив тяжелые отчеты на вторичные реплики. В SQL Server для этого существует механизм Read-Only Routing.
Однако здесь мы сталкиваемся с архитектурной особенностью платформы 1С. Проблема заключается в том, что 1С:Предприятие устанавливает одно соединение с СУБД и использует его как для записи данных, так и для чтения. Платформа не передает в SQL-запросе признак ApplicationIntent=ReadOnly, который необходим серверу SQL, чтобы понять: "этот запрос можно отправить на вторичную реплику".
Таким образом, стандартными средствами 1С и MS SQL реализовать автоматическое распределение нагрузки (чтение — на одну ноду, запись — на другую) "из коробки" не получится. Все запросы будут уходить на первичную ноду.
Если задача распределения чтения стоит остро, разберем альтернативные подходы, упоминаемые экспертами. Одним из решений является использование специализированного промежуточного ПО, например, разработок компании SoftPoint.
Суть метода заключается в следующем:
SELECT, которая не требует блокировок первичной базы, он прозрачно для платформы перенаправляет этот запрос на вторичную реплику Always On.INSERT, UPDATE, DELETE всегда уходят на Primary-ноду.Такой подход позволяет существенно масштабировать систему, но он вносит дополнительные риски, такие как Replication Lag (задержка репликации). Выясним причину: данные на вторичную реплику попадают с небольшой задержкой. В 1С это может привести к ситуации, когда пользователь создал документ, нажал "Записать", тут же открыл отчет, а документа там еще нет, так как отчет прочитался со вторичной ноды, куда данные еще не "долетели".
При настройке Always On для 1С крайне важно выбрать правильный режим фиксации транзакций. Разберем два варианта:
Для критически важных систем 1С рекомендуется использовать синхронный режим, но только при наличии высокоскоростной сети (10 Гбит/с и выше) с минимальными задержками (latency менее 1 мс) между узлами кластера.
Посмотрим на особенности обслуживания базы данных 1С в группе доступности. Регламентные операции, такие как дефрагментация индексов и обновление статистики, теперь работают иначе:
Во-первых, транзакционный лог базы 1С не будет очищаться (truncate) до тех пор, пока все записи не будут доставлены на все вторичные реплики. Если одна из нод "отвалится" или связь с ней пропадет, лог на основном сервере начнет стремительно расти, что может привести к полной остановке работы 1С из-за нехватки места на диске. Необходимо настроить мониторинг состояния synchronization_state.
Во-вторых, операции перестроения индексов генерируют огромный объем записей в логе транзакций. Этот объем должен быть передан по сети на все реплики. Рассмотрим пример: если база 1С весит 1 ТБ и вы решили перестроить индексы, приготовьтесь к тому, что по сети будет передано сопоставимое количество данных. Это может парализовать работу пользователей из-за загрузки канала связи.
Проанализируем так называемый "65 пункт" лицензионного соглашения 1С. Он ограничивает использование средств, модифицирующих стандартный протокол взаимодействия платформы и СУБД. При использовании официальных механизмов MS SQL Always On для целей отказоустойчивости (через Listener) никаких нарушений нет — это стандартный режим работы, поддерживаемый фирмой "1С".
Однако при внедрении решений по распределению чтения через сторонние драйверы (как в случае с SoftPoint), стоит внимательно изучить актуальную позицию вендора, так как это может трактоваться как обход штатного механизма работы платформы. Тем не менее, для крупных корпоративных систем такие решения часто являются единственным способом достичь требуемой производительности.
Подводя итог, можно сказать, что связка 1С 8.3 и MS SQL Always On — это отличное решение для обеспечения High Availability.
Основные выводы для успешного внедрения:
Соблюдение этих правил позволит создать надежную и масштабируемую инфраструктуру для автоматизации вашего бизнеса.