При администрировании высоконагруженных систем на платформе 1С:Предприятие 8.3 часто возникает необходимость изолировать информационные базы друг от друга. Это нужно для того, чтобы критическая ошибка в одной базе или избыточное потребление памяти одним процессом не приводили к падению всего кластера. Однако стандартная функциональность платформы «одна база на рабочий процесс» жестко ограничена лицензионной политикой. В этой статье мы подробно разберем, как решить задачу разделения баз, оставаясь в рамках лицензии ПРОФ (Стандарт).
Начиная с версий платформы 8.3.12 и выше, компания 1С внедрила механизмы проверки лицензионного соответствия. Если в консоли администрирования кластера установить параметр Количество информационных баз на процесс равным 1, сервер начнет отслеживать количество подключений. Проанализируем ситуацию: как только суммарное количество сеансов в таком кластере превысит 10 пользователей, система выдаст ошибку и прекратит работу, требуя лицензию уровня КОРП.
Это касается и других настроек производительности, таких как:
Для решения задачи изоляции без перехода на КОРП нам придется использовать обходные пути на уровне операционной системы.
Самым стабильным и эффективным методом является создание нескольких независимых экземпляров службы ragent на одном физическом или виртуальном сервере. Рассмотрим этот процесс пошагово. Лицензионная политика 1С позволяет использовать один серверный ключ для запуска любого количества служб на одной операционной системе, так как лицензия проверяется на «железо» или экземпляр ОС.
Разберем алгоритм создания дополнительной службы в среде Windows. Для этого нам понадобится утилита командной строки sc. Выясним, какие параметры нам критически важны:
-port — порт главного агента (по умолчанию 1540).-regport — порт менеджера кластера (по умолчанию 1541).-range — диапазон портов рабочих процессов (по умолчанию 1560-1591).-d — путь к каталогу реестра кластера (там будут храниться настройки конкретной службы).Посмотрим на пример команды для создания второй службы сервера 1С:
sc create "1C:Enterprise 8.3 Server ВтораяСлужба" binPath= "\"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe\" /srvc /agent /regport 1641 /port 1640 /range 1660:1691 /d \"C:\1C_Data\Cluster_2\"" start= auto displayname= "1C:Enterprise 8.3 Server (Second Instance)"
После выполнения этой команды мы получим полностью независимый экземпляр сервера, который будет создавать свои собственные процессы rphost. Важно понимать, что базы, добавленные во второй кластер, никак не будут влиять на базы в первом кластере.
Проанализируем, почему этот метод лучше, чем попытка настройки одного «раздутого» кластера:
ragent порождает свои rmngr и rphost. Если один процесс упадет из-за ошибки в коде конкретной базы, другие службы продолжат работу.Рассмотрим подробнее вопросы удобства управления. Когда у нас поднято несколько служб на разных портах, нам необходимо регистрировать их в консоли администрирования 1С. Для каждой службы создается отдельное подключение в дереве «Центральные серверы 1С:Предприятия» с указанием соответствующего порта (например, 1640 вместо 1540).
Чтобы упростить управление, можно использовать компонент RAS (Remote Administration Server). Мы можем запустить один экземпляр ras, который будет прослушивать определенный порт и позволит управлять всеми созданными кластерами через одну утилиту rac или внешние инструменты администрирования.
Посмотрим, как запустить RAS как службу для управления конкретным кластером:
sc create "1C:AdminServer 1645" binPath= "\"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ras.exe\" cluster --port 1645 localhost:1640" start= auto
Выясним возможные негативные последствия. Создание каждой новой службы ragent требует запуска процесса менеджера кластера rmngr, который потребляет определенный объем оперативной памяти (от 200 до 500 МБ в среднем без нагрузки). Если вы решите создать 50 служб на одном сервере с малым объемом RAM, вы столкнетесь с дефицитом ресурсов еще до того, как пользователи зайдут в систему. Проанализируем ситуацию: данный метод идеален для разделения 3–5 высоконагруженных групп баз, но не подходит для создания «процесса на каждую базу» при их большом количестве (например, 400 баз, как упоминалось в одном из сообщений форума).
Современным и технологичным способом является контейнеризация. Мы можем запустить каждый сервер 1С в отдельном Docker-контейнере. Это дает еще более глубокую изоляцию на уровне файловой системы и сетевого стека. Рассмотрим основные моменты:
ragent.Если перед вами стоит задача изолировать базы без покупки дорогостоящей лицензии КОРП, мы рекомендуем отказаться от попыток настройки «1 ИБ на процесс» внутри одного кластера. Вместо этого следует разбить информационные базы на логические группы и для каждой группы создать отдельную службу ragent в операционной системе, назначив каждой свой уникальный порт. Это обеспечит стабильность работы и независимость процессов rphost, полностью соблюдая условия лицензионного соглашения уровня ПРОФ.