Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

ИнфоСофт использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. Вы можете запретить обработку сookies в настройках браузера. Пожалуйста, ознакомьтесь с политикой использования cookies.
Оставаясь на сайте, вы соглашаетесь с политикой использования cookies.

Кластер серверов 1С

Дорошкевич Антон Посмотреть все статьи >> Руководитель специализированных проектов партнерской сети "ИнфоСофт"
24.09.2018
49250
Время прочтения - 10 мин.
Заказать консультацию

В платформе 8.3.9 произошло долгожданное событие – кластер серверов 1С заработал. С того момента, когда о нем объявили в 8.3.6, до момента, когда он в 8.3.9, наконец, заработал, прошло много лет. В 8.3.10 его уже можно использовать.

На прошлой конференции мне задавали очень много вопросов по поводу кластера серверов 1С, настроек сервера 1С и т.д., поэтому на этой конференции я хочу поделиться с вами этой информацией.

Уровень отказоустойчивости, какой выбрать в каком случае?

Один из первых вопросов, который возникает при проектировании серверов 1С, это какой уровень отказоустойчивости выбрать – 0, 1, 2, 3, 8, 10?

На практике в 99% случаев почти на любых высоконагруженных системах хватает уровня «ноль». Главное, грамотно настроить соотношение центральных и рабочих серверов 1С.

Есть такой критерий: если стоимость показа ошибки пользователю больше, чем стоимость еще одного сервера 1С и его лицензирования, то поднимайте уровень отказоустойчивости выше нуля. Потому что:

  • Когда уровень отказоустойчивости равен нулю, но есть хотя бы два центральных сервера, то при отказе одного из центральных серверов, те пользователи, сеансы которых к нему подключены, просто получат ошибку с предложением перезапустить 1С. Перезапустят 1С, подключатся ко второму центральному серверу, и все заработает.
  • Но если есть пожелание, чтобы переброс сеанса на работающий сервер отрабатывал автоматически, и пользователь не видел никаких сообщений и ошибок – чтобы было максимум две-три секунды торможения, и работа опять шла дальше, то выбивайте бюджеты на третий центральный сервер и устанавливайте уровень отказоустойчивости больше нуля. В этом случае с тремя серверами вы сможете перебрасывать сеансы пользователей без перезапуска.

Главное – помнить, что количество работающих в данный момент центральных серверов 1С в кластере должно быть на единицу больше, чем настроенный уровень отказоустойчивости.

При уровне «один» вам нужно уже как минимум три сервера, поскольку вы уже настраиваете кластер, а он по умолчанию отказоустойчивый, и при выходе одного центрального сервера два должны остаться в работе. Но если из строя выйдет еще один центральный сервер – кластер откажет в соединении.

Центральный сервер vs Рабочий сервер, в чём разница?

В 1С помимо центральных серверов есть такая сущность в кластере, как рабочие сервера. В чем разница?

  • Центральный сервер – это самодостаточная единица, он может все. Он может принимать на себя клиентские соединения, он обслуживает любые сервисы и выполняет все математические расчеты.
  • Рабочий сервер – это «рабочая лошадка» кластера. Он не может принимать соединения напрямую – к нему ни клиент не может напрямую подключиться, ни фоновое задание на нем напрямую запустить нельзя. Все это делается только по указанию центрального сервера 1С – на рабочий сервер передается какая-то задача, он ее выполняет и отдает результат. Все счастливы.

Есть определенный критерий, когда к имеющимся одному, двум, трем центральным серверам (которые служат в основном для отказоустойчивости) нужно добавление еще и рабочих серверов. Этот критерий простой: если стоимость модернизации текущего центрального сервера дороже, чем покупка нового (а такое бывает), то купите еще один сервер, лицензируйте его и назначьте рабочим. Это позволит вам организовать фактически безграничное горизонтальное масштабирование кластера – вы сможете свободно распространять мощность по базам.

Нужно помнить, что любой центральный сервер можно превратить в рабочий, а любой рабочий – в центральный. Главное, не забывать при этом «условие отказоустойчивости» – чтобы центральных серверов у вас не стало меньше, чем «уровень отказоустойчивости плюс один».

Во время сбоя превращать рабочий сервер в центральный нельзя. Это нужно делать заранее, во время регламентного обслуживания. Представим ситуацию, что у вас один центральный и один рабочий сервер, и администраторы сказали, что центральный сервер надо поставить на профилактику.

Одной галочкой мы превращаем рабочий сервер в центральный – на него тут же мгновенно передаются все блокировки и все списки баз. Теперь он знает, на каком сервере СУБД какая база обслуживается, и может спокойно принимать на себя соединения.

После этого вам осталось настроить клиентские 1С так, чтобы через точку с запятой были указаны два сервера, а не один. Затем вы спокойно ставите первый сервер на профилактику – ваши запросы в это время обслуживает второй сервер.

Для пользователя все это практически прозрачно. Единственное, если какой-то пользователь в это время все-таки был в системе, он получит ошибку и предложение переподключиться.

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

Все эти «чудеса», в основном, настраиваются с помощью «Требования назначения функциональности». Это – основной механизм работы кластера 1С. Поначалу кажется, что все очень сложно и запутанно: нужно какие-то приоритеты, какие-то сервисы куда-то назначить, что-то оставить в «Авто», а что-то вообще не трогать. Но, на удивление, потом все работает так, как настроили.



Настройки сводятся к указанию нескольких параметров:
  • Первое, что вы должны указать – это «Объект требования». Например, можно указать «Сервер сеансовых данных» – тогда сеансовые данные будут писаться именно на тот сервер 1С, где вы настроили объект требования назначения функциональности «Сервис сеансовых данных»,
  • Далее указываете «Тип требования» – в данном случае, «Назначать».
  • И обязательно, если у вас центральных серверов больше чем один, указываете какой-то приоритет. Тогда сеансовые данные всегда будут писаться на этот сервер. Если вы это не сделали, сеансовые данные будут писаться, как решит механика сервера в конкретный момент.

В «Требовании назначения функциональности» есть несколько ограничений, а именно:

  • Пункт «Имя БД» можно трогать, только если вы счастливый обладатель лицензии на платформу уровня КОРП. Если вы имеете профессиональную платформу, то указывать конкретное имя базы данных в «Требовании назначения функциональности» нельзя.
  • Также в пункте «Значение дополнительного параметра» указывать тип клиента (тонкий, толстый, веб-клиент, конфигуратор) и вид фонового задания можно только в КОРП-версии. Для ПРОФ-версии можно указывать только общие назначения (например, что на этот сервер можно отдать все бэкграунды – указать конкретный бэкграунд нельзя).

Если у вас в кластере есть несколько центральных серверов, нужно обязательно настроить несколько «Требований назначения функциональности».

Нужно настроить, на каком из центральных серверов будут сеансовые данные. Причем, это нужно настроить на всех центральных серверах и на каком-то из них нужно указать приоритет выше, чем на другом. Тогда при нормальной рабочей нагрузке системы сеансовые данные всегда будут предсказуемо писаться на один сервер. Если сервер выходит из строя, системе надо знать, куда их писать. Для этого на втором сервере (где в рабочей нагрузке эта запись не ведется, поскольку приоритет ниже), вы должны указать это требование назначения функциональности с пониженным приоритетом, и механика сервера переключит туда сеансовые данные.

То же самое касается журналов регистрации. Очень частая ошибка, что про этот сервис забывают, не указывают, а потом удивляются, почему у них журнал регистрации три дня ведется на одном сервере, а пять дней на другом. И, когда нужно собрать общую информацию, кто заходил в базу, кто что менял – ничего не могут найти и ничего не могут собрать. Все это настраивается в «Требованиях назначения функциональности». Здесь нужно четко указать по приоритетам, где и что.

  • Помимо этого, нужно настроить сервер полнотекстового поиска, чтобы не нагружать серверы лишней работой. Пусть он крутится на одном сервере. Иначе он будет обновлять индекс то там, то здесь, и нагружать другие серверы лишней, никому не нужной работой – зря использовать их мощность.

Как механика сервера выбирает, куда назначить конкретное соединение?

Сервер может быть в нескольких состояниях.

  • Например, в состоянии «Авто». Это – состояние любого сервера по умолчанию, т.е. он все принимает все, любые требования назначения.
  • Он может быть в состоянии «Назначать» – этого высокоприоритетное состояние, т. е. он как бы выиграет выборы.
  • Он может быть в состоянии «Назначать», но с приоритетом ниже, чем тот, который этот же сервер назначает на себя с более высоким приоритетом.
  • Он может быть в состоянии «Не назначать» – это полный отказ обслуживать этот вид сервиса этим сервером, т.е. запрет на уровне администрирования кластера.
  • И сервер может вообще не работать, он может быть выключен.

Как происходит выбор? Например, запускается запись журнала регистрации. Что сделает механика кластера серверов 1С?

  • Сначала выстроит все серверы так, как указано в консоли кластера, фактически по алфавиту.
  • Затем оттуда будут убраны все серверы, у которых четко написано «Сервис журнала регистрации» – «Не назначать».
  • Затем из оставшихся серверов будут оставлены серверы с типом требования назначения функциональности «Назначать».
  • Если серверов с требованием «Назначать» несколько, будет выбран тот, у которого выше приоритет.
  • Если с этим приоритетом несколько серверов, то будет выбран тот, у которого на данный момент наиболее высокая производительность.

Производительность определяется кластером серверов 1С, отправляя раз в несколько секунд эталонную задачу на каждый рабочий сервер. После того, как сервер решает эту задачу и дает ответ, механика определяет, за какое время он ее решил. Чем быстрее решил, тем больше коэффициент производительности у этого сервера. Именно он возьмет на себя соединение, либо сеанс, либо этот сервис. Он выиграет эти выборы.

То же самое происходит, если мы ничего не настроили. Например, мы не настроили журнал регистрации. Для механики это значит, что сервис журнала регистрации стоит в состоянии «Авто». Это – состояние по умолчанию, его устанавливать бесполезно, такая настройка ничего не решит. Соответственно, среди серверов, у которых тип требования «Авто», будет выбран сервер с наиболее высоким приоритетом (если мы ему этот приоритет настраивали, указав тип требования «Авто»), и из них будет выбран сервер с наиболее высокой производительностью.

Наибольшая производительность вычисляется с погрешностью 25%. Не удивляйтесь, если у вас в консоли кластера видно, что производительность одного сервера 100, а второго 90, но при этом сеанс назначился на тот сервер, у которого производительность 90, хотя, казалось бы, должен быть выбран тот, у которого производительность выше. Разница в производительности будет определена однозначно только при 25% различия – если у первого сервера производительность будет 100, а у второго – 75, тогда выбор однозначно будет за первым.

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

Настройки кластера и сервера 1С, какая на что влияет?

Перейдем к настройкам кластера и сервера 1С. Тут нас ждет наследие платформы 8.2, где было только одно окно свойств, и оно было в кластере (в консоли сервера платформы 8.2 задать свойства можно было только кластеру в целом).


При этом, как ни странно, окно свойств кластера 1С настраивает свойства процесса сервера (rphost). Тут многие путаются.

Настройка №1, которую стоит иногда менять, – это «Интервал перезапуска» процессов сервера (rphost). Когда платформа была нестабильной, эта штука была нужной, потому что иногда возникали утечки памяти, из-за которых rphost разрастался, и его нужно было периодически перезапускать. Поэтому кластер настраивали так, чтобы он перезапускался раз в сутки, а потом удивлялись: «У меня иногда почему-то начинаются тормоза, которые длятся минуты две, потом все приходит в норму. Спасите-помогите, ничего не могу понять».

Дело в том, что секунды, которые мы указываем в «Интервале перезапуска», начинают считаться с момента старта процесса. Но предсказать, когда у вас в 8.3 процесс запустится, очень сложно. Механика его сама по разным причинам стартует, например: вы вышли за лимит баз на процесс, или за лимит соединений на процесс, или за лимит памяти на процесс. Допустим, процесс у вас стартовал 21 сентября в 11:00. В 11:00 часов 22 сентября при настройке перезапуска раз в сутки вы получите тормоза на всех соединениях, которые были на этом процессе. Откуда взялись эти тормоза? Ровно через сутки после своего запуска этот rphost будет помечен как неактивный. Системе нужно будет передать все его активные сеансы на новый процесс. Если никакого другого rphost в системе запущено не было, система запускает процесс, начинает втягивать в оперативную память этого процесса весь контекст конфигурации и только тогда, когда она туда затянет, начинает переключаться. Переключились, через две-три секунды у всех начинаются тормоза, а потом все приходит в норму. Настройка по умолчанию стоит 0, т.е. «никогда не перезапускать». Общая рекомендация – оставьте 0. Настройки, как на скриншоте – это устаревшая вещь. Не нужно их использовать. Лучше боритесь с утечками памяти.

Следующая настройка – «Допустимый объем памяти». Тут тоже очень тонкая вещь. Несмотря на то, что эта настройка находится в свойствах кластера – это максимальный объем оперативной памяти одного серверного процесса, одного rphost, а не всего кластера. Этой настройкой вы не перекроете, что сервер 1С не займет на вашем сервере больше 12 гигабайт. Это один rphost не займет больше 12 гигабайт. Что произойдет, когда он, например, занял 12 гигабайт? Если настройку «Интервал превышения допустимого объема памяти» оставить 0 (по умолчанию), то ничего не произойдет.

Это тоже очень частая ошибка в настройках кластеров. Система зафиксировала 12 гигабайт, но ничего не происходит, потому что она не знает, сколько секунд ждать превышения по памяти (свойство «Интервал превышения допустимого объема памяти»). Обязательно нужно указать, сколько времени процесс сервера (rphost) может превышать объем оперативной памяти. Например, мы указали 10 секунд. Система запускает счетчик. Если в течение 10 секунд rphost не вернулся в указанный лимит, система помечает его неактивным – на него больше не назначаются сеансы. Текущие сеансы по возможности переключаются на другой rphost.

Здесь есть еще одна классическая ошибка настройки кластера 1С – отсутствие галочки «Принудительно завершать проблемные процессы» и указание нулевого времени для остановки самого процесса. Что это означает на практике? Мы указали 12 гигабайт, 10 секунд – все замечательно. Процесс помечен неактивным, стартовал новый rphost, на него переключились все текущие сеансы, но наш rphost, который из-за каких-то утечек памяти весит 12 гигабайт, так и остался в системе, так и занимает 12 гигабайт. И пока мы не перезагрузим сервер 1С, с ним ничего не произойдет.

Чтобы проблемный процесс автоматически удалился из системы, обязательно поставьте галочку «Принудительно завершать проблемные процессы» и установите время остановки процесса (свойство «Выключенные процессы останавливать через»). Как вычислить это время? Очень просто. Запустите конфигурацию, в которой вы работаете, засеките время от первого входа до появления логина и пароля, умножьте это время на два и укажите в настройках. Почему нужно сделать именно так? Например, «УТ 11» при первом запуске запросит логин и пароль через 15 секунд. «Комплексная автоматизация 2.0» и «ERP» – через две минуты, они и три минуты могут грузиться. Если здесь время в секундах указано меньше, чем скорость загрузки контекста конфигурации в сервер 1С, вы никогда сеансы прозрачно не переключите, они будут завершаться раньше, все будут получать ошибку соединения «Сеанс завершен администратором». Да, конечно, после перезагрузки они зайдут на новый сервер, и все будет работать. Но, чтобы можно было переключиться на него прозрачно, без перезапуска, необходимо установить сюда время, вычисленное, как двойное время загрузки первого входа в конфигурацию.


Следующая настройка – это настройка сервера 1С. Здесь – то же самое ограничение: изменять значения по умолчанию можно, только если вы счастливый обладатель корпоративной лицензии на платформу. Если корпоративной лицензии нет, вы обязаны оставить все по умолчанию.

Хотя тут есть с чем «поиграться».

Первое – «Максимальный объем памяти, занимаемой рабочими процессами». Несмотря на то, что эта настройка относится к параметрам рабочего сервера 1С, это – тот объем памяти, который могут занимать все рабочие процессы кластера 1С. Вот такая путаница. Обратите внимание, что 0 – это не бесконечность, это 80% оперативной памяти, доступной в операционной системе, на которой запущен кластер. В отличие от настройки кластера, где объем оперативной памяти измерялся в килобайтах, здесь он в байтах. Очень многие путаются, забывают указать еще три ноля и удивляются, почему у них ничего не успевает запуститься. Rphost стартовал, набрал 100 мегабайт и сразу завершился, не запустившись. Думают, что он будет 100 гигабайт набирать, забывают указать три ноля. Обратите внимание на подписи, там байты.

Второй момент – это «Безопасный расход памяти за один вызов». Тут вообще шаманство. 0 – это не ноль, а 5% от памяти, занятой всеми процессами сервера на данный момент. Как это работает? Начинается сеанс пользователя, либо какое-то соединение. Механика фиксирует, сколько всего оперативной памяти мы на данный момент занимаем всеми рабочими процессами. Например, сейчас мы занимаем 10 гигабайт, а общее ограничение по кластеру у нас 11 гигабайт. Параллельно механика для каждого вызова считает, сколько памяти он займет – раз в две секунды она эту информацию обновляет. И в какой-то момент может оказаться, что вызов займет 3, 4, 5, 6 гигабайт. Такое бывает – либо программист ошибся, либо пользователь не наложил правильные отборы – у него выводится, что попало, и на это тратятся гигабайты оперативной памяти. Система проверяет, не превышает ли изначальный объем оперативной памяти на весь кластер, плюс память на этот вызов сумму максимального объема памяти на кластер и максимального расхода памяти на вызов. Если превышает, то этот сеанс будет завершен. Не rphost, как в настройках кластера 1С, где мы просто завершаем rphost при совпадении ситуации, когда он выбрал лимит оперативной памяти. Здесь будет завершен конкретный сеанс пользователя, т.е. конкретный главный бухгалтер получит ошибку «Сеанс завершен администратором». Это очень удобно, чтобы протестировать, где у вас программист написал неправильный отчет. Один и тот же пользователь будет постоянно жаловаться на то, что этот отчет никогда не формируется. При этом остальные пользователи даже не заметят, что что-то произошло, и система продолжит стабильно работать.

Еще одна «сладкая» настройка для стабильности и спокойного сна администраторов – это «Объем памяти рабочих процессов, до которого сервер считается производительным». Здесь 0 – это настоящий 0, т. е. мы этот объем памяти вообще не контролируем. Здесь можно указать тот лимит памяти, при котором выборы механикой сервера, куда назначать сеанс, закончатся неудачей для сервера, если он уже израсходовал столько оперативной памяти, сколько мы ему указали. Например, мы, согласно своему опыту, считаем, что этот сервер не может быть работоспособен, если он уже израсходовал 40 гигабайт оперативной памяти. И, если вы сюда это указали, то, несмотря ни на какие проверочные тесты, в которых он показывает механике сервера, что он быстрый и готовый, на него сеансы назначаться не будут, если он этот лимит превысил.

Следующие настройки, которые почему-то все любят менять, – это «Количество информационных баз на процесс» и «Количество соединений на процесс» (не путать с количеством сеансов – именно количество соединений на процесс). В принципе, эти настройки уже нормально отрегулированы по умолчанию. Rphost давным-давно многопоточный, 64-битный и обслуживать 128 сеансов либо 8 баз данных не является проблемой. При этом «Количество соединений на процесс» можно менять и при ПРОФ лицензии.

Могу еще сказать, что никакие настройки кластера или сервера 1С не заставят вашу 1С работать быстрее. Все настройки необходимы исключительно для того, чтобы система в целом работала стабильнее, а не быстрее. Быстрее – это вопрос к программисту, пусть код переписывает. Либо к DBA – пусть сервер базы данных настраивает. Все настройки сервера 1С касаются только стабильности и отказоустойчивости. Никакая настройка не действует на скорость. Сервер 1С всегда пытается выдать максимальную скорость математики. Он ничего не скрывает, не работает вполсилы, он просто старается этими настройками сделать крепче сон администратора, и чтобы у него не сдавали нервы.

Настройка инфраструктуры с сервером программного лицензирования 1С

Следующий момент – это сервер программного лицензирования. До сих пор на практике мы встречаемся с высказываниями: «Ой-ой, только не программная лицензия, они все слетают, а весь мир виртуальный, 1С это тоже не обошло».

Да, мы все давно ушли в виртуальность. Да, известная проблема, что если виртуалка по отношению к своим ресурсам динамическая, то программная лицензия будет «слетать». Чтобы этого избежать, и был сделан сервер программного лицензирования.

Первая его особенность – он не требует себе серверные лицензии. Фактически, это полностью бесплатная вещь. Просто поставьте сервер 1С и настройте «Требования назначения».

Вторая его особенность, которую мы вывели на практике, – не злоупотребляйте тем, чтобы сервер программного лицензирования выдавал серверные лицензии. Пусть он выдает только клиентские лицензии. Почему? Если у вас высоконагруженная система, более 1000 пользователей, и вы сделаете так, что у вас сервер программного лицензирования серверу 1С выдает его серверную лицензию, то при каждом серверном вызове этих 1000 пользователей, сервер 1С будет запрашивать у сервера программного лицензирования свою лицензию, проверять есть или нет. В итоге, сервер программного лицензирования не справится с нагрузкой – и сеть «ляжет», и процессоры «лягут», и вся система хором «ляжет». Поэтому нагружать сервер лицензирования программными серверными лицензиями не надо. А клиентские лицензии он выдает очень успешно, поскольку они выдаются гораздо реже. 1000 штук – не проблема.


Настроить сервер лицензирования – это всего лишь пара «Требований назначения функциональности».

Что первое мы должны указать? Раз у него собственной лицензии нет, мы должны для него указать, что этот сервер для всех сервисов «Не назначать». Чтобы, когда механика сервера делала выбор, куда ей назначить данное соединение или сервер, она ни в коем случае не назначила его на сервер лицензирования (поскольку для клиентского соединения нужна программная лицензия, а у сервера лицензирования ее нет). Если вы так не настроите, механика сервера в какой-то момент выберет его из-за высокой производительности, запустит туда бухгалтера, и он получит ошибку «Отсутствует программная лицензия сервера».

Вторая настройка, которую нужно сделать в «Требовании назначения функциональности» – это, наоборот, назначить ему и только ему сервис лицензирования. В кластере в идеале может быть только один сервер лицензирования. Можете сделать и два с разными приоритетами, но особого смысла в этом нет, поскольку программная лицензия – это не HASP, можно и 300 файлов положить, и ничего страшного не случится.

Единственный момент, который нужно соблюсти, когда вы в свою инфраструктуру встраиваете сервер лицензирования – это стабильное «железо».

  • Это может быть локальная машина.
  • Либо это может быть виртуалка, но тогда у нее должны быть заданы полностью статические параметры.
  • Либо у вас может быть настроен отказоустойчивый кластер виртуальных машин, где виртуалки переезжают с одного хоста на другой. В этом случае на этих хостах должно быть все одинаково, вплоть до модели процессора.

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

Во всех последних версиях платформы: 8.3.10 и 8.3.9 (начиная с версии 2170) есть защитный механизм, который немного спасает в таких случаях. Если лицензия сбросилась из-за смены железа на сервере лицензирования, 1С еще сутки будет работать. Ровно через сутки она выдаст ошибку, что время вышло и теперь сервер нужно перелицензировать. После переактивации пин-кода сервера для новых параметров системы можно счастливо пользоваться 1С дальше.

Оригинал статьи: https://infostart.ru/public/907443/


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку
Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: