Заметки из Зазеркалья

24.08.2018

Развитие кластера серверов

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.14.1565.

Мы повысили отказоустойчивость кластера серверов и реализовали возможность администрирования кластера из встроенного языка.

Отказоустойчивость сервиса фоновых заданий

Реализована отказоустойчивость сервиса фоновых заданий. Теперь в кластере с уровнем отказоустойчивости, большем 0, при аварийном завершении работы менеджера кластера, на котором работает сервис заданий, информация реплицируется на другие менеджеры кластера, на которых присутствуют экземпляры сервиса фоновых заданий.

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

Теперь сбои в работе одного из менеджеров не отразятся на работе фоновых и регламентных заданий, если такой произойдет. В результате пользователи не должны заметить сбоя в работе кластера.

Администрирование из встроенного языка

Ранее платформа 1С:Предприятие содержала несколько различных инструментов, с помощью которых можно было администрировать кластер серверов.

Во-первых, это интерактивная Windows-утилита администрирования, реализованная в виде консоли управления Microsoft (Microsoft Management Console).

Во-вторых, это программный интерфейс кластера, доступный во встроенном языке через технологию COM (Component Object Model). Технология COM используется в операционных системах Microsoft Windows.

В-третьих, для обеспечения кроссплатформенности были реализованы сервер администрирования кластера (ras) и утилита командной строки (rac) для взаимодействия с этим сервером. Это кроссплатформенные инструменты, которые могут работать в операционных системах Microsoft Windows и Linux. Однако они не имеют графического интерфейса.

В-четвертых, для создания приложений, администрирующих кластер, был реализован программный Java-интерфейс, который представляет собой набор Java-пакетов. Он позволяет взаимодействовать с сервером администрирования (ras) из программы на языке Java, без помощи консольной утилиты администрирования (rac).

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

Кроме этого перечисленные инструменты имели чисто технические недостатки, затруднявшие их использование. Например, Windows-утилита администрирования не позволяет работать с кластерами разных версий, каждый раз необходимо было перерегистрировать библиотеку в операционной системе. Интерфейсы, использующие COM и Java, не имеют перечислений, поэтому, например, вместо понятных значений «Незащищенное», «ЗащищенноеПриУстановкеСоединения» и «Защищенное» приходилось обрабатывать цифровые значения 0, 1 и 2, по справке определяя, какому уровню безопасности соединения они соответствуют.

Поэтому, чтобы унифицировать администрирование кластера и облегчить управление серверами 1С:Предприятия в unix системах, мы реализовали во встроенном языке программный интерфейс, взаимодействующий с сервером администрирования кластера (ras).

Теперь прямо из клиентского приложения 1С:Предприятия вы можете передавать управляющие команды кластеру серверов 1С:Предприятия через сервер администрирования (ras), а также получать обратно информацию о структуре и состоянии кластера. Из одного клиентского приложения вы можете одновременно администрировать кластеры разных версий.

Основу нового программного интерфейса составляет объект АдминистрированиеСервера, который позволяет вам установить соединение с агентом центрального сервера, выполнить аутентификацию, а также получить доступ к кластерам и администраторам центрального сервера. В каждом кластере вы имеете доступ к информационным базам, рабочим серверам, администраторам, менеджерам кластера, рабочим процессам, сеансам, блокировкам, соединениям, профилям безопасности, счетчикам потребления ресурсов и ограничениям потребления ресурсов. Все они описываются соответствующими объектами с приставкой «Администрирование», например, АдминистрированиеИнформационнаяБаза, АдминистрированиеРабочийСервер и так далее.

Далее приведен небольшой пример, завершающий все сеансы работы пользователей, например, для выполнения административных действий.

­

   Агент = Новый АдминистрированиеСервера(АдресСервераRAS, 1545); Агент.ВыполнитьАутентификацию(Пользователь, Пароль); // Перебрать все кластеры. Кластеры = Агент.ПолучитьКластеры(); Для Каждого Кластер из Кластеры Цикл Кластер.ВыполнитьАутентификацию(ПользовательКластера, ПарольПользователяКластера); // Завершить все сеансы в кластере. Сеансы = Кластер.ПолучитьСеансы(); Для Каждого Cеанс из Сеансы Цикл Cеанс.ЗавершитьСеанс(Сообщение); КонецЦикла; КонецЦикла;

Этот пример, помимо прочего, демонстрирует еще одно преимущество нового программного интерфейса. За счет перехода к объектной модели новый интерфейс имеет более простые и короткие команды:

  • Раньше: TerminateSession(<Кластер>, <Сеанс>, <Сообщение>);
  • Теперь: Cеанс.ЗавершитьСеанс(Сообщение).
Второй пример показывает работу со счетчиками потребления ресурсов. Раньше работа со счетчиками через COM интерфейс, например, была невозможна, т.к. в этом интерфейсе отсутствуют перечисления. В новом интерфейсе это возможно, и выполняется довольно просто:

­

   Агент = Новый АдминистрированиеСервера(АдресСервераRAS, 1545);

­

   Агент.ВыполнитьАутентификацию(Пользователь, Пароль); // Перебрать все кластеры.

­

   Кластеры = Агент.ПолучитьКластеры();

­

­

   Для Каждого Кластер Из Кластеры Цикл

­

       Кластер.ВыполнитьАутентификацию(ПользовательКластера, ПарольПользователяКластера); // Перебрать все счетчики потребления ресурсов.

­

       Счетчики = Кластер.ПолучитьСчетчикиПотребленияРесурсов();

­

­

       Для Каждого Счетчик Из Счетчики Цикл

­

           Сообщить("Имя счетчика: " + Счетчик.Имя); Сообщить("Описание: " + Счетчик.Описание); // Перебрать все значения счетчика.

­

           ЗначенияСчетчика = Счетчик.ПолучитьЗначения();

­

­

           Для Каждого Значение Из ЗначенияСчетчика Цикл

­

                Сообщить("Длительность вызова = " + Значение.ДлительностьВызова);

­

                Сообщить("Процессорное время = " + Значение.ПроцессорноеВремя);

­

                Сообщить("Потребление памяти = " + Значение.ПотреблениеПамяти);

­

                ...

­

           КонецЦикла;

­

      КонецЦикла;

­

­

      // Создать новый счетчик потребления ресурсов.

­

      Счетчик = Кластер.СоздатьСчетчикПотребленияРесурсов();

­

      Счетчик.Имя = "Счетчик1";

­

      Счетчик.ДлительностьНакопления = 10000;

­

      Счетчик.СчитатьДлительностьВызовов = Истина;

­

      Счетчик.ТипОтбора = АдминистрированиеТипОтбораСчетчикаПотребленияРесурсов.Все;

­

      ...

­

      Счетчик.Записать();

­

   КонецЦикла ;

­

Подробнее о планируемой реализации механизма управления потреблением ресурсов мы рассказывали некоторое время тому назад: Механизм управления потреблением ресурсов.

Теги: кластер  8.3.14