Серверы кластера

Общая информация

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

Система «1С:Шина» предоставляет следующие возможности:
  • Получить список администраторов кластера серверов с помощью метода ПолучитьАдминистраторов(). Также предоставляется возможность создать нового администратора с помощью метода СоздатьАдминистратора().
  • Получить список кластеров, которые зарегистрированы в данном центральном сервере (массив экземпляров типа КластерV8). Это можно осуществить методом ПолучитьКластеры(). Создание нового кластера возможно с помощью метода СоздатьКластер(). Если известен идентификатор кластера серверов, то с помощью метода ПолучитьКластер() можно получить экземпляр, предназначенный для управления конкретным кластером серверов.

Запуск сервера администрирования

конст ПутиV8 = {"eq": "c:\\Program Files\\1Cv8\\", "ne": "c:\\Program Files (x86)\\1Cv8\\"}

метод ЗапускСервераАдминистрирования(Версия: Строка, Сервер: Строка, Порт: Число, Архитектура: Число)
    пер АрхитектураОС: Число = ТекущаяАрхитектура()
    пер АрхитектураV8: Число
    пер ПутьV8: Строка
    
    если Версия.ЧислоВхождений(".") != 3
        выбросить новый ИсключениеНедопустимыйАргумент("Номер версии указан некорректно")
    ;
    выбор
    когда Архитектура == АрхитектураОС
        АрхитектураV8 = АрхитектураОС
        ПутьV8 = ПутиV8["eq"]
    когда АрхитектураОС == 64
        АрхитектураV8 = Архитектура
        ПутьV8 = ПутиV8["ne"]
    иначе
        выбросить новый ИсключениеНедопустимоеСостояние("64-разрядная платформа V8 не может быть установлена на 32-разрядной ОС")
    ;
    пер Образ = новый Файл("%ПутьV8\\%Версия\\bin\\ras.exe")
    если не Образ.Существует()
        выбросить новый ИсключениеНедопустимоеСостояние("Сервер администрирования кластера не обнаружен в каталоге: " + Образ.Каталог)
    ;
    пер Процесс = новый ПроцессОс(Образ.Путь, ["cluster", "--port=" + Порт, Сервер])
    Процесс.Запустить(СредаИсполнения.ПолучитьПеременную("temp"))
    если не Процесс.Живой()
        выбросить новый ИсключениеНедопустимоеСостояние("Что-то пошло не так. Процесс RAS - не живой :(")
    иначе
        пер Результат = "Запуск RAS выполнен успешно"
    ;
;

метод ТекущаяАрхитектура(): Число
    пер Архитектура = СредаИсполнения.ПолучитьПеременную("PROCESSOR_ARCHITECTURE")
    пер Результат = 0
    выбор Архитектура.ВВерхнийРегистр()
    когда == "AMD64"
        Результат = 64
    когда == "X86"
        Результат = 32
    иначе
        Результат = 32
    ;
    возврат Результат
;

Пример получения списка кластеров

метод ПолучениеСпискаКластеров()
    пер Сервер = новый АдминистрированиеСервераV8("localhost", 1545)
    пер СписокКластеров = Сервер.ПолучитьКластеры()
    для ТекущийКластер из СписокКластеров
        пер ИмяКластера = ТекущийКластер.Имя
    ;
;

Рабочие серверы

Как можно узнать в документации, кластер серверов состоит из одного или нескольких рабочих серверов. Система «1С:Шина» предоставляет возможность получить доступ к текущему составу рабочих серверов кластера, а также создать новый рабочий сервер. Для описания рабочего сервера предназначен тип РабочийСерверV8. Описание параметров рабочего сервера приведено в документации к системе «1С:Предприятие».

Для того чтобы получить доступ к рабочему серверу, можно воспользоваться следующими способами:
  1. Получить список всех текущих рабочих серверов. Метод КластерV8.ПолучитьРабочиеСерверы() вернет массив экземпляров типа РабочийСерверV8. Из полученного массива можно выбрать описание требуемого рабочего сервера.
  2. Получить описание конкретного рабочего сервера с помощью метода КластерV8.ПолучитьРабочийСервер(). В этом случае нужно предварительно знать идентификатор рабочего сервера типа Ууид.
  3. Создать новый рабочий сервер с помощью метода КластерV8.СоздатьРабочийСервер().
Важно: Для систем, находящихся в промышленной эксплуатации, не рекомендуется размещать несколько рабочих серверов на одном физическом компьютере.

Если в свойства рабочего сервера вносились изменения (или был создан новый рабочий сервер), то, для того чтобы изменения вступили в силу, нужно выполнить метод РабочийСерверV8.Записать().

Свойство РабочийСерверV8.ИдРабочегоСервера позволит в дальнейшем получать описание конкретного рабочего сервера напрямую, с помощью метода КластерV8.ПолучитьРабочийСервер(). Если на одном физическом компьютере создается несколько рабочих серверов, то у каждого рабочего сервера должен быть уникальный IP-порт (свойство РабочийСерверV8.Порт) и диапазон IP-портов (свойство РабочийСерверV8.ДиапазоныПортов). Уникальность должна поддерживаться в рамках одного компьютера. Для того чтобы указать один или несколько диапазонов портов, предназначен метод РабочийСерверV8.ДобавитьДиапазонПортов().

Получение рабочих серверов

метод ПеречислитьРабочиеСерверы()
    пер мойКластер = ПолучитьКластер()
    мойКластер.ВыполнитьАутентификацию("", "")
    пер РабочиеСерверы = мойКластер.ПолучитьРабочиеСерверы()
    для Сервер из РабочиеСерверы
        пер ИмяРабочегоСервера = Сервер.Имя
        пер ЦентральныйСервер = Сервер.ЦентральныйСервер
        пер ИмяКомпьютера = Сервер.ИмяКомпьютера
        пер ИДРабочегоСервера = Сервер.ИдРабочегоСервера
    ;
;

метод ПолучитьКластер(): КластерV8
    пер Сервер = новый АдминистрированиеСервераV8("localhost", 1545)
    возврат Сервер.ПолучитьКластеры()[0]
;