Чёрный пояс 1С. Дата акселератор на выделенном сервере: как изолировать аналитику от проведения документов
Три физических сервера кластера, PostgreSQL 15 под капотом, и два процесса, которые терпеть не могут друг друга: днём операторы массово вбивают документы, а параллельно топ-менеджмент дёргает тяжёлые отчёты по продажам. Обе нагрузки лезут в одну и ту же базу и мешают одна другой. Разберём, как развести их физически, не покупая второй кластер.
Легенда практического занятия
Центральный офис холдинга держит кластер серверов «1С» на трёх машинах — назовём их SRV1, SRV2, SRV3. Требуется: (1) кластер должен пережить отказ любого одного сервера без остановки пользователей, (2) тяжёлая аналитика не должна тормозить проведение документов, и для неё нужен Дата акселератор на выделенной машине, (3) копия базы на PostgreSQL должна реплицироваться быстро, но без риска потерять консистентность при аппаратном сбое.
Задание
- Спроектируйте схему отказоустойчивости кластера. Приведите формулу расчёта минимального количества центральных серверов и точные параметры отслеживания разрыва соединений.
- Настройте требования назначения функциональности (ТНФ) так, чтобы
SRV3обслуживал только Дата акселератор и фоновые задания построения отчётов, аSRV1/SRV2эти задачи выполнять не могли. - Настройте репликацию изменений (Версия 2) на PostgreSQL 15 и предложите параметры СУБД для максимальной скорости записи без потери консистентности при сбое.
- Напишите BSL-код, который программно добавляет справочник
Номенклатурав состав копии базыTestCopy, используя только реквизитАртикул.
1. Формула отказоустойчивости
Правило, которое обязан знать любой архитектор кластера «1С»:
SRV1 и SRV2.Параметры отслеживания разрыва соединений между процессами кластера и с клиентскими приложениями настраиваются периодом проверки не менее 1000 мс (на практике — 1000 мс период, 5000 мс таймаут: таймаут в 3–10 раз больше периода). Критично: эти параметры должны быть идентичны на всех серверах кластера — расхождение приводит к ложным срабатываниям failover.
2. ТНФ: запираем Дата акселератор на SRV3
Требования назначения функциональности — единственный штатный механизм физически изолировать тяжёлые фоновые задания от интерактивных сеансов пользователей. Для SRV3:
- Объект требования
Сервис Дата акселератора, тип —Назначать. - Объект требования
Любой объект требования, тип —Не назначать(запрещаем всё остальное, чтобы сервер не подхватывал интерактивные сеансы).
Для SRV1 и SRV2 — зеркальное запрещающее правило: Сервис Дата акселератора, тип Не назначать. Без этого второго шага платформа может запустить акселератор там же, где сидят операторы, и вся изоляция окажется фиктивной.
3. Репликация PostgreSQL: скорость без потери консистентности
Для стандартной репликации Версии 2 на PostgreSQL 10+ обязателен параметр wal_level = logical в postgresql.conf — без него логическое декодирование изменений просто не запустится.
По умолчанию включён fsync — гарантия консистентности ценой замедления записи на диск. Отключать его вслепую нельзя: при внезапном отключении питания незафиксированные страницы можно потерять. Правильный путь — не отключать защиту, а вынести риск на железо:
fsync для реплики и получить кратное ускорение записи, не теряя гарантии при аппаратном сбое — контроллер сам досбросит кеш при восстановлении питания.Отдельная строка в плане эксплуатации: регулярный REINDEX (или VACUUM) для таблиц реплики — при интенсивном обновлении/удалении данных индексы и MVCC-мусор деградируют быстрее, чем на основной базе.
4. Программная настройка состава копии
// Получение настроек состава и запись изменений
Копия = КопииБазыДанных.Найти("TestCopy");
ЭлементКопии = Копия.Состав.Добавить(Метаданные.Справочники.Номенклатура);
// Явное указание использования только реквизита "Артикул"
ПолеКопии = ЭлементКопии.Поля.Найти("Артикул");
ПолеКопии.Использование = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.Использовать;
Копия.Записать();
КопииБазыДанных.Обновить(Копия, Ложь); // Инициализация обновления состава
Обратите внимание на явное указание поля через Поля.Найти — без него в копию уйдёт весь справочник целиком, а не только нужный для аналитики реквизит, и вы вернётесь к той же проблеме избыточной нагрузки, от которой уходили.
Что проверить у себя на проекте
- Идентичны ли параметры проверки разрыва соединений на всех серверах кластера — расхождение здесь одна из самых незаметных причин ложных failover.
- Есть ли у вас запрещающее правило ТНФ на "чистых" серверах, или изоляция держится только на одном разрешающем правиле для выделенного сервера.
- Компенсировано ли отключение
fsyncаппаратно — RAID-контроллером с батарейным кешем и UPS, а не просто "потому что так быстрее".
Создать токен →