Кластер серверов 1С: настройка для 500+ — АйТи Фреш
Москва, Щёлковское шоссе, д. 92, корп. 7 · Пн–Пт 9:00–19:00 · +7 903 729-62-41

Кластер серверов 1С: настройка для 500+ пользователей

Кластер серверов 1С: настройка для 500+ пользователей

Архитектура кластера 1С:Предприятие

Кластер серверов 1С:Предприятие — это группа рабочих серверов, которые обрабатывают клиентские подключения и распределяют нагрузку. Для 500+ пользователей одного сервера уже мало: процесс rphost ест много RAM и CPU, а упадёт один сервер — и доступ теряют все. Это материал про крупный проект-исключение: большинству наших клиентов, которые обычно укладываются в 50 рабочих мест, кластер из нескольких серверов 1С не нужен — одного сервера хватает с большим запасом.

Из чего состоит кластер:

  • ragent — агент сервера, запускается на каждом рабочем сервере. Управляет процессами
  • rmngr — менеджер кластера, координирует работу. Один из серверов является центральным
  • rphost — рабочий процесс, обслуживающий клиентские сессии. Основной потребитель ресурсов

Рекомендуемая архитектура под 500 пользователей:

РольКоличествоCPURAMДиск
Сервер 1С (рабочий)316 vCPU64 ГБSSD 100 ГБ
SQL Server2 (AG)16 vCPU128 ГБNVMe 500 ГБ
Сервер лицензий12 vCPU4 ГБHDD 50 ГБ
Сравнение характеристик серверов в кластере 1С:Предприятие для 500+ пользователей
Рекомендуемая архитектура кластера для поддержки 500+ пользователей.

Добавление рабочих серверов в кластер

Развёртывание начинается с центрального сервера, дальше через консоль администрирования или программно добавляются рабочие серверы.

:: Установка сервера 1С (тихий режим)
setup.exe /S /D=C:\Program Files\1cv8

:: Настройка службы ragent
sc create "1C:Enterprise 8.3 Server Agent" \
  binPath= "\"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe\" \
  -srvc -agent -regport 1541 -port 1540 -range 1560:1591 \
  -d \"C:\Program Files\1cv8\srvinfo\"" \
  start= auto obj= "domain\srv1c" password= "P@ss"

:: Запуск
sc start "1C:Enterprise 8.3 Server Agent"

Добавление рабочего сервера через утилиту rac (Remote Administration Client):

:: Подключение к центральному серверу
rac cluster list server-01:1545

:: Получение ID кластера
set CLUSTER_ID=<id из предыдущей команды>

:: Добавление рабочего сервера
rac server insert \
  --cluster=%CLUSTER_ID% \
  --name="server-02" \
  --agent-host=server-02 \
  --agent-port=1540 \
  --port-range=1560:1591 \
  --using=normal \
  server-01:1545

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

Настройка рабочих процессов rphost

Количество и параметры рабочих процессов — ключевой фактор производительности. Каждый rphost обслуживает определённое число сессий и потребляет RAM пропорционально нагрузке.

:: Просмотр текущих рабочих процессов
rac process list --cluster=%CLUSTER_ID% server-01:1545

:: Настройка требований назначения (на каждом рабочем сервере)
rac requirement insert \
  --cluster=%CLUSTER_ID% \
  --server=%SERVER_ID% \
  --object-type=server \
  --position=0 \
  --connections-per-process=250 \
  --memory-limit=8000000 \
  --safe-memory-limit=6000000 \
  --processes-per-use=4 \
  server-01:1545

Рекомендуемые параметры для рабочего процесса:

  • Количество соединений на процесс: 200-300. При 500 пользователях и 3 серверах — по 4-6 rphost на сервер
  • Максимальный объём памяти: 8-12 ГБ. При превышении процесс перезапускается
  • Безопасный объём памяти: 6-10 ГБ. При превышении новые сессии направляются на другие процессы
  • Период перезапуска: 86400 секунд (24 часа) — предотвращает утечки памяти

Требования назначения функциональности

Для крупных инсталляций разносите функциональность по серверам:

:: Сервер 1 и 2 — клиентские подключения
rac requirement insert --cluster=%CLUSTER_ID% --server=%SRV1_ID% \
  --object-type=server --requirement-type=assign \
  --service=ClientConnection --value=server-01 \
  server-01:1545

:: Сервер 3 — фоновые задания и регламентные операции
rac requirement insert --cluster=%CLUSTER_ID% --server=%SRV3_ID% \
  --object-type=server --requirement-type=assign \
  --service=BackgroundJob --value=server-03 \
  server-01:1545

:: Фоновые задания не должны мешать клиентам
rac requirement insert --cluster=%CLUSTER_ID% --server=%SRV1_ID% \
  --object-type=server --requirement-type=dontassign \
  --service=BackgroundJob --value=server-01 \
  server-01:1545

Такое разделение гарантирует, что тяжёлые регламентные операции (закрытие месяца, обновление итогов) не замедляют интерактивную работу пользователей.

Оптимизация SQL Server для 1С

SQL Server — бутылочное горлышко большинства инсталляций. Без его настройки никакой кластер не спасёт.

-- Максимальная память (оставляем 16 ГБ для ОС и служб)
EXEC sp_configure 'max server memory', 112000;  -- 112 ГБ из 128
RECONFIGURE;

-- Максимальная степень параллелизма (1С рекомендует 1)
EXEC sp_configure 'max degree of parallelism', 1;
RECONFIGURE;

-- Cost threshold for parallelism
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;

-- Включение мгновенной инициализации файлов
-- Добавить учётную запись SQL Server в политику
-- "Выполнение задач по обслуживанию томов"

-- Настройка TempDB: количество файлов = количество ядер (до 8)
ALTER DATABASE tempdb ADD FILE (
  NAME = 'tempdev2', FILENAME = 'T:\tempdb\tempdev2.ndf',
  SIZE = 8192MB, FILEGROWTH = 1024MB
);
-- Повторить для tempdev3..tempdev8

-- Модель восстановления
ALTER DATABASE [erp_production] SET RECOVERY FULL;

-- Автоматическое обновление статистики
ALTER DATABASE [erp_production] SET AUTO_UPDATE_STATISTICS ON;
ALTER DATABASE [erp_production] SET AUTO_UPDATE_STATISTICS_ASYNC ON;

Размещение файлов базы данных

Разнесите файлы БД по разным дискам для параллелизации I/O:

ФайлДискТип
MDF (данные)D:\NVMe RAID 10
LDF (журнал транзакций)L:\NVMe отдельный
TempDBT:\NVMe отдельный
БэкапыB:\SAS/SATA RAID 5

Журнал транзакций держите на отдельном быстром диске — отдельно от файлов данных.

Регламентные операции и обслуживание

Без регулярного обслуживания производительность неминуемо деградирует:

-- Еженощное обновление статистики (в 01:00)
-- SQL Server Agent Job: Update Statistics
USE [erp_production];
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN';

-- Дефрагментация индексов (в 02:00, по выходным — полная перестройка)
DECLARE @cmd NVARCHAR(MAX);
SELECT @cmd = STRING_AGG(
  CASE 
    WHEN avg_fragmentation_in_percent > 30 
      THEN 'ALTER INDEX ' + i.name + ' ON ' + OBJECT_SCHEMA_NAME(ips.object_id) + '.' + OBJECT_NAME(ips.object_id) + ' REBUILD;'
    WHEN avg_fragmentation_in_percent > 10 
      THEN 'ALTER INDEX ' + i.name + ' ON ' + OBJECT_SCHEMA_NAME(ips.object_id) + '.' + OBJECT_NAME(ips.object_id) + ' REORGANIZE;'
  END, CHAR(13))
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id
WHERE avg_fragmentation_in_percent > 10 AND i.name IS NOT NULL;
EXEC sp_executesql @cmd;

-- Очистка журнала регистрации 1С (хранить 90 дней)
-- Через конфигуратор или скриптом 1С

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

Мониторинг производительности кластера

Чтобы вовремя реагировать на проблемы, настройте мониторинг:

:: Скрипт мониторинга кластера 1С (PowerShell)
$racPath = "C:\Program Files\1cv8\8.3.25.1394\bin\rac.exe"
$server = "server-01:1545"

# Получение списка сессий
$sessions = & $racPath session list --cluster=$clusterId $server
$activeCount = ($sessions | Select-String 'session-id').Count

# Получение информации о рабочих процессах
$processes = & $racPath process list --cluster=$clusterId $server

# Парсинг памяти рабочих процессов
$processes | ForEach-Object {
    if ($_ -match 'memory-size\s*:\s*(\d+)') {
        $memMB = [math]::Round($Matches[1] / 1024 / 1024, 0)
        Write-Output "Process memory: $memMB MB"
    }
}

# Мониторинг длительности вызовов через технологический журнал
# C:\Program Files\1cv8\conf\logcfg.xml
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1c_logs\perf" history="24">
    <event>
      <eq property="name" value="CALL"/>
      <ge property="Durationus" value="10000000"/>  <!-- > 10 сек -->
    </event>
    <property name="all"/>
  </log>
</config>

Технологический журнал 1С — основной инструмент диагностики. Настройте сбор событий CALL и TLOCK с порогом длительности для выявления медленных запросов и блокировок.

Алерты и пороговые значения

Оповещения настройте через Zabbix или Prometheus:

  • CPU сервера 1С > 80% в течение 5 минут
  • RAM rphost > 10 ГБ — утечка памяти
  • Количество сессий > 200 на сервер — нужен дополнительный сервер
  • Ожидание блокировок > 5 секунд — проблема в коде или конфигурации
  • Длительность вызова > 30 секунд — медленный запрос

Отказоустойчивость кластера

Для непрерывной работы кластер 1С должен переживать отказ любого компонента:

Что касается резервирования центрального сервера, то в кластере 1С есть очень удобная опция: мы можем назначить сразу несколько менеджеров кластера, то есть rmngr. Тогда, если вдруг центральный сервер 'упадёт', то управление без проблем тут же примет на себя резервный.

:: Назначение резервного менеджера
rac server update --cluster=%CLUSTER_ID% --server=%SRV2_ID% \
  --cluster-main-manager=yes \
  server-01:1545

:: Проверка: оба сервера должны показать cluster-main-manager: yes
rac server list --cluster=%CLUSTER_ID% server-01:1545

SQL Server Always On: настройте группу доступности для базы данных 1С. При отказе основного SQL сервера подключение автоматически переключится на реплику. В строке подключения 1С укажите: Server=ag-listener.domain.local;Database=erp_production.

Важно: тестируйте отказоустойчивость регулярно. Раз в квартал имитируйте отказ каждого компонента и засекайте время восстановления. Целевой RTO — не больше 5 минут.

Часто задаваемые вопросы

Минимум — 3 рабочих сервера по 16 vCPU / 64 ГБ RAM. Это даёт около 170 пользователей на сервер с запасом на пики и возможностью обслужить один сервер без остановки. А при активной работе с отчётами и обработками может понадобиться и 4-5 серверов.

Знаете, фирма «1С» обычно рекомендует выставлять MAXDOP=1. Почему? Потому что платформа имеет свойство генерировать просто кучу мелких запросов, и для них параллелизм, по сути, только создаёт лишний overhead. Но тут есть подвох: на по-настоящему тяжёлых отчётах и обработках этот самый MAXDOP=1 как раз может сильно тормозить. Поэтому я вижу компромисс вот в чём: выставляем MAXDOP=1 на уровне сервера, но при этом повышаем Cost Threshold до 50-75. Тогда параллелиться будут только крупные запросы, и это будет оптимально.

Признаки перегрузки: растёт длительность вызовов (CALL в технологическом журнале), пользователи жалуются на «зависания», CPU серверов 1С стабильно выше 70%, а rphost ест больше 80% доступной памяти. Первое, что делаем, — анализируем технологический журнал на длительные TLOCK (блокировки) и CALL.

Многие спрашивают про PostgreSQL. И да, я подтверждаю: PostgreSQL 15+ с патчами от фирмы «1С» вполне способен 'тянуть' даже очень крупные инсталляции! Но сразу предупреждаю, настройка здесь нужна по-настоящему тщательная. Вот мои рекомендации: shared_buffers = 25% RAM, effective_cache_size = 75% RAM, work_mem = 256MB, maintenance_work_mem = 2GB. Если всё сделать грамотно, то производительность будет вполне сопоставима с MS SQL, а самое приятное — лицензии-то бесплатны!

Мой совет по обновлению серверов: делайте это строго по одному! Сначала выводите сервер из кластера, переводя его в режим «не использовать». Затем ждёте, пока все сессии мигрируют на другие серверы, после чего спокойно обновляете платформу и возвращаете его обратно в кластер. И так по очереди с каждым сервером. В итоге общий простой для пользователей получается нулевой. Единственное, что каждый пользователь почувствует, — это короткое переподключение в тот момент, когда его сессия мигрирует.

#кластер 1С#производительность 1С#rphost#ragent#балансировка 1С#1С 500 пользователей#оптимизация 1С сервер#1С кластер настройка

Столкнулись с похожей задачей? Обращайтесь — решим

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

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

Комментарии 0

Оставить комментарий

загрузка...
📄
Скачайте подробный разбор в PDF Кейсы, статистика, типовые ошибки и чек-лист самопроверки — 12 страниц
Скачать PDF

Подпишитесь на рассылку ITfresh

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

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.