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

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

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

Компоненты кластера:

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

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

РольКоличествоCPURAMДиск
Сервер 1С (рабочий)316 vCPU64 ГБSSD 100 ГБ
SQL Server2 (AG)16 vCPU128 ГБNVMe 500 ГБ
Сервер лицензий12 vCPU4 ГБHDD 50 ГБ

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

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

:: Установка сервера 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 — бутылочное горлышко большинства инсталляций 1С. Правильная настройка СУБД критически важна.

-- Максимальная память (оставляем 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

Журнал транзакций должен находиться на отдельном диске — он пишется последовательно и конкурирует с случайным I/O данных.

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

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

-- Еженощное обновление статистики (в 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 15+ с патчами от фирмы «1С» поддерживает крупные инсталляции. Требуется тщательная настройка: shared_buffers = 25% RAM, effective_cache_size = 75% RAM, work_mem = 256MB, maintenance_work_mem = 2GB. Производительность сопоставима с MS SQL при правильной настройке, а лицензирование бесплатно.

Обновляйте серверы по одному: выведите сервер из кластера (переведите в режим «не использовать»), дождитесь миграции сессий, обновите платформу, верните в кластер. Повторите для каждого сервера. Общее время простоя для пользователей — 0, но каждый пользователь испытает кратковременное переподключение при миграции его сессии.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

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

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

загрузка...