← На главную
В работе с 1С:Предприятием часто возникает задача оптимизации производительности и распределения нагрузки. Одним из путей является разделение ключевых компонентов системы на разные серверы. Давайте рассмотрим, как это сделать, сосредоточившись на задаче переноса сервера приложений 1С на виртуальную машину, оставив сервер баз данных (СУБД) на физическом сервере.
Понимание архитектуры 1С:Предприятие
Прежде чем приступать к разделению, важно хорошо понимать, из каких основных компонентов состоит система 1С:Предприятие в клиент-серверном варианте и за что каждый из них отвечает:
- Клиентское приложение (толстый, тонкий или веб-клиент): Это интерфейс, с которым непосредственно работают пользователи. Толстый и тонкий клиенты устанавливаются на компьютеры пользователей, а веб-клиент работает через браузер. Нагрузка от самого клиентского приложения (особенно веб-клиента) на сервер минимальна, поскольку большая часть логики выполняется на сервере 1С.
- Кластер серверов 1С (сервер приложений): Этот компонент, часто называемый сервером 1С, является мозгом системы. Он обрабатывает бизнес-логику, управляет сеансами пользователей, формирует запросы к базе данных и отвечает за взаимодействие с клиентскими приложениями.
- Сервер базы данных (СУБД): В нашем случае это, скорее всего, Microsoft SQL Server. СУБД отвечает за хранение всех данных информационной базы, их индексацию, обработку запросов на выборку, изменение и добавление информации. Это, как правило, самое нагруженное звено в системах 1С с большим объемом данных и множеством пользователей.
- Веб-сервер: Если пользователи работают через веб-клиент, используется веб-сервер (например, IIS или Apache), который отвечает за публикацию информационной базы 1С в интернете или локальной сети и передачу данных между веб-клиентом и кластером серверов 1С.
Для крупных внедрений и повышения производительности традиционно рекомендуется разделять роли сервера 1С (сервера приложений) и сервера СУБД (например, MS SQL или PostgreSQL) на разные физические или виртуальные машины. Это помогает уменьшить конкуренцию за ресурсы, такие как процессорное время, оперативная память и дисковая подсистема, что является ключевым для стабильной и быстрой работы системы.
Задача разделения: сервер 1С на VM, СУБД на физическом сервере
Итак, давайте углубимся в нашу конкретную задачу: перенести сервер 1С (кластер серверов 1С) на виртуальную машину, оставив Microsoft SQL Server на физическом хосте. Наш руководитель может ожидать, что это позволит "разделить нагрузку" и улучшить общую производительность системы.
Мы имеем текущую ситуацию, где на одном физическом сервере установлены как сервер 1С, так и SQL Server. Пользователи работают через веб-клиент или десктопные приложения, подключаясь к этой базе. Теперь создана виртуальная машина, и нам предстоит переместить на нее сервер 1С.
Особенности виртуализации на одном физическом сервере
Здесь кроется важный нюанс. Если созданная виртуальная машина будет размещена на том же физическом сервере, где сейчас работает SQL Server, то общая производительность физического сервера в целом может не только не увеличиться, но и даже уменьшиться. Почему так происходит?
- Накладные расходы на виртуализацию: Гипервизор (программа, управляющая виртуальными машинами) сам по себе потребляет часть ресурсов физического сервера (процессор, память).
- Конкуренция за ресурсы: Если и SQL Server, и виртуальная машина с сервером 1С будут работать на одном физическом сервере, они будут конкурировать за те же самые физические ресурсы. В этом сценарии дисковая подсистема очень часто становится "узким местом", поскольку и SQL Server (активно работающий с данными), и сервер 1С (работающий с логами, кэшем, временными файлами) интенсивно используют диски.
- Распределение нагрузки: Руководитель может мыслить, что "виртуалка возьмет на себя половину нагрузки", но это не так работает. Нагрузка будет просто перераспределена между двумя логическими сущностями, которые физически используют одни и те же аппаратные компоненты.
Таким образом, основное преимущество разделения компонентов (сервер 1С и СУБД) достигается, когда они размещены на разных физических серверах. Виртуализация на одном физическом сервере полезна для изоляции приложений, упрощения администрирования, бэкапов и миграции, но не гарантирует прирост общей производительности, если не добавляются новые физические ресурсы.
Несмотря на это, задача руководителя ясна: разнести компоненты. Давайте разберем, как это сделать технически, учитывая, что в идеале нужно было бы использовать второй физический сервер для VM.
Лицензирование в виртуальной среде
Прежде чем приступать к техническим работам, мы должны обязательно продумать вопросы лицензирования, ведь в случае с 1С и MS SQL Server это критически важно:
- Лицензии на сервер 1С:Предприятия 8:
- Для использования платформы "1С:Предприятие 8" требуются лицензии на саму платформу и клиентские лицензии (на количество рабочих мест).
- Самое главное — нам понадобится лицензия на сервер "1С:Предприятия 8" (сервер приложения) для новой виртуальной машины. Если у нас уже есть одна серверная лицензия, и она привязана к физическому серверу, нам потребуется приобрести новую лицензию для VM, либо переносить существующую (что не всегда возможно без переактивации и привязки к новому железу/виртуалке).
- HASP-ключи и виртуальные машины: Если у нас используются аппаратные HASP-ключи, их проброс в виртуальную машину может быть сложной задачей и не всегда стабильно работает. Часто для этого требуется USB-редиректор или специальное ПО гипервизора. Программные лицензии в этом плане гибче.
- Сервер лицензирования 1С: Для удобства управления программными лицензиями в виртуальной среде мы можем выделить отдельный сервер лицензирования 1С. Он централизованно выдает клиентские и серверные лицензии, позволяя не активировать лицензии на каждой машине кластера. Сам сервер лицензирования не требует отдельной лицензии на сервер 1С:Предприятия. Однако, он работает только с программными лицензиями, аппаратные HASP-ключи не поддерживаются.
- Лицензирование MS SQL Server:
- MS SQL Server лицензируется по ядрам процессора или по схеме "сервер + клиентские лицензии" (Server + CAL). Нам необходимо убедиться, что существующая лицензия покрывает использование SQL Server на физическом хосте с учетом всех его ядер.
- Существует также более дешевый вариант "MS SQL Server Runtime для пользователей 1С:Предприятие 8", который может использоваться только для 1С. Важно проверить, какая именно лицензия у нас используется и соответствует ли она текущей архитектуре.
Важный момент: Необходимо проконсультироваться с лицензионным менеджером или партнером 1С, чтобы избежать проблем с правомерностью использования ПО.
Пошаговая реализация разделения
Теперь давайте разберем шаги по реализации нашей задачи:
Шаг 1: Подготовка виртуальной машины
- Проверка ресурсов физического сервера: Убедитесь, что физический сервер, на котором сейчас работает все и будет работать SQL Server, а также будет размещена VM, имеет достаточно свободных ресурсов (процессорные ядра, оперативная память, место на диске) для комфортной работы обеих систем. Заложите запас.
- Создание и настройка VM:
- Виртуальная машина уже создана. Проверим ее параметры. Выделим ей достаточное количество vCPU и оперативной памяти. Для сервера 1С это критически важно. Рекомендуем начать с 4-8 vCPU и 8-16 ГБ RAM, в зависимости от количества пользователей и активности работы.
- Установим на VM серверную операционную систему (например, Windows Server). Убедимся, что все драйверы гипервизора (Integration Services для Hyper-V, VMware Tools для VMware) установлены.
- Настроим сетевые параметры VM, присвоив ей статический IP-адрес. Убедимся, что VM может "видеть" физический сервер, где расположен SQL Server, и наоборот. Проверим доступность портов.
- Установка ролей и компонентов на VM:
- Если планируем использовать веб-клиент, то на VM потребуется установить веб-сервер (IIS для Windows или Apache для Linux).
- Установим на VM Java (для работы некоторых компонент 1С и веб-сервера).
Шаг 2: Настройка SQL Server (остается на физическом сервере)
Поскольку SQL Server остается на физическом сервере, нам нужно убедиться, что он оптимально настроен для работы с 1С. Эти настройки критически важны для производительности СУБД:
- Выравнивание секторов дисков: Убедимся, что диски, на которых расположены файлы баз данных и журналов SQL Server, выровнены по секторам 64KB. Это значительно улучшает производительность дисковой подсистемы.
- Database Instant File Initialization (IFI): Активируем эту опцию для аккаунта службы SQL Server. Это позволит SQL Server мгновенно создавать новые файлы данных или увеличивать размер существующих, не заполняя их нулями, что ускоряет операции с базами данных.
- Разрешение блокировки страниц в памяти (Lock Pages in Memory): Для аккаунта службы SQL Server предоставим привилегию
Lock Pages in Memory. Это предотвращает выгрузку страниц памяти, используемых SQL Server, в файл подкачки, что критически важно для производительности.
- Максимальная степень параллелизма (Max degree of parallelism - MAXDOP): Установим значение
MAXDOP в 1. Для 1С:Предприятия это является рекомендуемой настройкой, поскольку сложные запросы 1С часто плохо оптимизируются при использовании параллелизма SQL Server.
- Настройка сетевых протоколов: Убедимся, что для SQL Server включен протокол TCP/IP и настроен соответствующий порт (по умолчанию 1433).
- Обслуживание баз данных: Настроим регулярные регламентные задания по обслуживанию баз данных:
- Реиндексация и/или реорганизация индексов: Это помогает поддерживать оптимальную производительность запросов.
- Обновление статистики: Крайне важно для SQL Server, чтобы он мог строить эффективные планы выполнения запросов.
- Проверка целостности базы данных (DBCC CHECKDB): Регулярно проверяем базу на наличие ошибок.
- Настройка памяти SQL Server: Ограничим максимальный объем памяти, который может использовать SQL Server, чтобы оставить достаточно ресурсов для операционной системы и других приложений (в нашем случае, гипервизора).
Шаг 3: Установка и настройка сервера 1С:Предприятия (на VM)
- Установка платформы 1С:Предприятие:
- На виртуальной машине установим компоненты сервера 1С:Предприятия из дистрибутива платформы. Выберем опции "Сервер 1С:Предприятия" и "Модули расширения веб-сервера" (если используем веб-клиент).
- Установим серверную лицензию 1С:Предприятия. Если это программная лицензия, активируем ее на VM или используем ранее настроенный сервер лицензирования. Если HASP-ключ, пробросим его.
- Создание кластера 1С и добавление базы:
- После установки, запустим оснастку "Администрирование серверов 1С:Предприятия".
- Создадим новый кластер серверов 1С (если его нет). Если есть существующий кластер на физическом сервере, который мы хотим перенести, то нам нужно будет его аккуратно мигрировать или настроить новый, а старый деактивировать. В нашем случае, мы создаем новый кластер на VM.
- В этот кластер добавим новый рабочий сервер (это и будет наша VM).
- В кластер добавим информационную базу, указав ее расположение на SQL Server, который работает на физическом сервере. Укажем адрес SQL Server (IP или имя), имя базы данных SQL, пользователя и пароль для подключения.
- Настройка рабочих процессов кластера:
- В кластере 1С настроим количество рабочих процессов (
rphost) и их параметры. Обычно рекомендуется иметь несколько рабочих процессов для лучшего распределения нагрузки и отказоустойчивости.
- Укажем расположение каталога кластера 1С на быстрых дисках VM. Убедимся, что на дисках достаточно свободного места для временных файлов, кэша и логов.
- Настроим параметры балансировки нагрузки в кластере 1С, например, ограничим количество информационных баз и соединений, обслуживаемых одним рабочим процессом.
Шаг 4: Настройка веб-сервера и публикация базы (на VM)
Если используется веб-клиент, нам нужно опубликовать базу на веб-сервере, который теперь будет находиться на виртуальной машине:
- Настройка веб-сервера (IIS):
- На VM настроим веб-сервер IIS. Убедимся, что активированы необходимые компоненты (ASP.NET, ISAPI и CGI).
- В оснастке "Администрирование серверов 1С:Предприятия" или через конфигуратор опубликуем информационную базу на новом веб-сервере (который на VM). Укажем имя публикации, веб-сервер и путь к каталогу публикации.
- Проверка публикации: Попробуем подключиться к опубликованной базе через веб-клиент, используя IP-адрес или доменное имя виртуальной машины.
Шаг 5: Перенастройка подключения клиентов
Теперь, когда сервер 1С находится на VM, а база на SQL Server на физическом, нам нужно перенастроить подключения всех пользователей:
- Для тонких/толстых клиентов: На компьютерах пользователей в списке информационных баз 1С изменим адрес сервера 1С на IP-адрес или доменное имя нашей новой виртуальной машины.
- Для веб-клиентов: Пользователи будут подключаться к новому адресу публикации на веб-сервере, который также находится на VM.
Оптимизация и аудит производительности
После всех настроек мы должны обязательно провести аудит и оптимизацию, чтобы убедиться, что разделение дало ожидаемый эффект:
- Мониторинг ресурсов: Постоянно отслеживайте загрузку процессора, памяти, дисковой подсистемы и сетевой активности как на физическом сервере, так и на виртуальной машине.
- Настройки BIOS и гостевой ОС: Проверьте настройки BIOS физического сервера (особенно опции энергосбережения, включение NUMA). В гостевой ОС (VM) убедитесь, что схема электропитания установлена на "Высокая производительность".
- NUMA-архитектура: Если физический сервер имеет NUMA-архитектуру (несколько процессорных сокетов), убедитесь, что настройки гипервизора и гостевой ОС корректно ее используют. Для 1С это может быть важно.
- Оптимизация кластера 1С: Экспериментируйте с количеством рабочих процессов
rphost, их распределением по ядрам процессора (если это позволяет гипервизор), периодом опроса и другими параметрами кластера 1С.
- Балансировка нагрузки: Кластер серверов 1С автоматически распределяет нагрузку между рабочими процессами и серверами. Однако, можно вручную корректировать это, например, ограничивая количество информационных баз и соединений, обслуживаемых одним рабочим процессом.
Важные замечания и выводы
- Помните, что "нагрузка самой платформы 1С" (нагрузка серверной части 1С) действительно может быть перенесена на VM. Но если VM находится на том же физическом хосте, это не добавляет новых физических ресурсов, а лишь логически разделяет их.
- Критическое узкое место в такой архитектуре на одном физическом сервере — это дисковая подсистема. Обеспечьте максимально быстрые диски (SSD, NVMe) для SQL Server и VM, а также правильную их конфигурацию (RAID, выравнивание).
- Всегда имейте актуальные резервные копии базы данных и конфигурации серверов перед началом любых серьезных изменений в инфраструктуре.
- Задача, которую вам поручили, является типичной для системных администраторов или специалистов по DevOps, а не для программиста 1С. Не стесняйтесь обращаться за помощью или консультацией к более опытным коллегам или внешним специалистам.
Разделение компонентов 1С на разные серверы — это правильный подход для масштабирования и повышения надежности. Однако, выполнение этой задачи в условиях, когда виртуальная машина размещается на том же физическом сервере, требует особого внимания к ресурсам и может не дать ожидаемого прироста производительности, но, безусловно, улучшит управляемость и гибкость нашей системы.