В этой статье мы запустим кластер InterSystems IRIS с помощью docker и файлов Merge CPF (CMF) — новой функции, позволяющей легко конфигурировать серверы InterSystems IRIS. В UNIX и Linux вы можете изменить стандартный iris.cpf с помощью декларативного файла Merge CPF. Файл Merge CPF — это частичный CPF, который устанавливает нужные значения для любых параметров при запуске InterSystems IRIS. С помощью Merge CPF легко можно запускать сложные конфигурации InterSystems IRIS.


Конфигурация платформы данных InterSystems IRIS во многом определяется файлом iris.cpf. При каждом запуске InterSystems IRIS считывает этот конфигурационный файл (далее CPF) для получения значений параметров работы инстанса. Это позволяет в любой момент изменить конфигурацию инстанса, изменив его CPF и перезапустив InterSystems IRIS.


Merge CPF использует те же параметры, содержащиеся в файле CPF. Новые элементы или значения этих элементов мёржатся в файл CPF при старте инстанса. Это позволяет обновлять любую часть CPF файла во время инициализации инстанса. Если переменная окружения ISC_CPF_MERGE_FILE установлена и содержит путь до файла Merge CPF, то содержимое этого файла мёржится в активный CPF файл.


Вот минимальный пример — этот файл Merge CPF устанавливает буфер глобалов равным 800 Мб:


[config]
globals=0,0,800,0,0,0

Actions


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


Секция Actions позволяет выполнять набор действий при старте InterSystems IRIS. Набор действий основан на существующих API с классами Security и Config. Действия, которые могут быть выполнены, могут быть "Создать", "Изменить" или "Удалить". Например, для управления пользователями Actions позволят выполнять следующие действия: CreateUser, ModifyUser и DeleteUser. Вот пример:


[Actions]
DeleteUser:Name=Admin
CreateUser:Name=User1,Password=SYS,ChangePassword=1,Roles=%All,%Developer,%Manager
CreateUser:Name=User2,Password=SYS,ChangePassword=1,Roles=%Developer
ModifyUser:Name=_SYSTEM,ChangePassword=1

Параметры, передаваемые вызовам, являются именами свойств для соответствующего класса, в данном случае Security.Users. В приведенном выше сценарии Security.Users:Delete() вызывается для удаления пользователя Admin, Security.Users:Create() вызывается для создания пользователей User1 и User2, а Security.Users:Modify() вызывается для изменения пользователя _SYSTEM.


При выполнении слияния будут выполнены все действия, указанные в разделе Action. Обратите внимание, что действия выполняются в заранее определенном порядке, а не в том, в котором они указаны в файле CMF. Порядок в примере ниже будет таким: ModifySystem, CreateResource, CreateRole, CreateUser.


[Actions]
CreateUser:Name=User1,Password=SYS,ChangePassword=1,Roles=%All,%Developer,%Manager
CreateUser:Name=User2,Password=SYS,ChangePassword=1,Roles=%Developer,NewRole1
CreateUser:Name=User3,Password=SYS,ChangePassword=1,Roles=%Manager,NewRole2
CreateUser:Name=User4,Password=SYS,ChangePassword=1
CreateRole:Name=NewRole1,Description=NewRole1 Description,Resources=Resource1:READ,W
CreateRole:Name=NewRole2,Description=NewRole2 Description,Resources=Resource2:RW
CreateResource:Name=Resource1,Description=Resource1 Description,PublicPermission=R
CreateResource:Name=Resource2,Description=Resource2 Description
ModifySystem:AuditEnabled=1,SecurityDomains=1
ActivateCPF

Поведение операций Create / Modify / Delete следующее:


  • Create — Если создаваемый элемент уже существует, то операция игнорируется, и возвращается 1.
  • Modify — Если изменяемый элемент не существует, то операция игнорируется, и возвращается 1.
  • Удалить — Если удаляемый элемент не существует, то операция игнорируется, и возвращается 1.

Вот все возможные Actions:


Название Класс
ModifySystem Security.System
ModifyService Security.Services
CreateResource, ModifyResource, DeleteResource Security.Resources
CreateRole, ModifyRole, DeleteRole Security.Roles
CreateUser, ModifyUser, DeleteUser Security.Users
CreateApplication, ModifyApplication, DeleteApplication Security.Applications
CreateLDAPConfig, ModifyLDAPConfig, DeleteLDAPConfig Security.LDAPConfigs
CreateEvent, ModifyEvent, DeleteEvent Security.Events
CreateSSLConfig, ModifySSLConfig, DeleteSSLConfig Security.SSLConfigs
CreateKMIPServer, ModifyKMIPServer, DeleteKMIPServer Security.KMIPServers
CreateDocDB, ModifyDocDB, DeleteDocDB Security.DocDBs
CreateDatabaseFile, ModifyDatabaseFile, DeleteDatabaseFile SYS.Database
CreateDatabase, ModifyDatabase, DeleteDatabase SYS.Database
CreateNamespace, ModifyNamespace, DeleteNamespace Config.Namespaces
CreateGlobalMap, ModifyGlobalMap, DeleteGlobalMap Config.MapGlobals
CreateRoutineMap, ModifyRoutineMap, DeleteRoutineMap Config.MapRoutines
CreatePackageMap, ModifyPackageMap, DeletePackageMap Config.MapPackages

Пример: Шард-кластер


Шардирование является важной функцией горизонтального масштабирования платформы данных InterSystems IRIS. Кластер InterSystems IRIS разделяет хранение и кэширование данных между несколькими серверами, обеспечивая гибкое и недорогое масштабирование производительности запросов чтения и записи данных при максимальном уменьшении стоимости инфраструктуры за счет высокоэффективного использования ресурсов. Шардинг легко сочетается со значительными возможностями вертикального масштабирования InterSystems IRIS, что значительно расширяет спектр рабочих нагрузок, поддерживаемых InterSystems IRIS.


Наш кластер будет состоять из одного Node1 (главный узел) и двух Data Nodes (вот все возможные роли). К сожалению, docker-compose не может развертываться на нескольких серверах (хотя он может развертываться на удаленных узлах), поэтому такой шард-кластер можно использовать для локальной разработки моделей данных с поддержкой шардинга, тестов и т.д. Для развертывания кластера InterSystems IRIS на нескольких серверах следует использовать либо ICM, либо IKO.


Docker-compose.yml


Начнём с конфигурации docker-compose:


version: '3.7'
services:
  iris1:
    image: containers.intersystems.com/intersystems/iris:2021.1.0.215.0
    init: true
    command: --key /ISC/iris.key
    hostname: iris1
    environment:
     - ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys1
     - ISC_CPF_MERGE_FILE=/ISC/CPF2merge-master-instance.conf
    volumes:
     - ./:/ISC:delegated
    ports:
      - 9011:1972
      - 9012:52773

  iris2:
    image: containers.intersystems.com/intersystems/iris:2021.1.0.215.0
    command: --key /ISC/iris.key --before 'sleep 60'
    init: true
    hostname: iris2
    environment:
     - ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys2
     - ISC_CPF_MERGE_FILE=/ISC/CPF2merge-data-instance.conf
    volumes:
     - ./:/ISC:delegated
    depends_on:
      - iris1
    ports:
      - 9021:1972
      - 9022:52773

  iris3:
    image: containers.intersystems.com/intersystems/iris:2021.1.0.215.0
    command: --key /ISC/iris.key --before 'sleep 60'
    init: true
    hostname: iris3
    environment:
     - ISC_DATA_DIRECTORY=/ISC/iris.sys.d/sys3
     - ISC_CPF_MERGE_FILE=/ISC/CPF2merge-data-instance.conf
    volumes:
     - ./:/ISC:delegated
    depends_on:
      - iris1
    ports:
      - 9031:1972
      - 9032:52773

Мы запускаем стандартный образ intersystems/iris:2021.1.0.215.0 с лицензионным ключом с поддержкой шардинга, сохраняем данные с помощью Durable %SYS и предоставляем ISC_CPF_MERGE_FILE, указывающий на наши файлы Merge CPF (которые отличаются для Node1 и Data Nodes). Кроме того, Data Nodes запускаются на минуту позже, чем Node1, но это крайне консервативная оценка, на большинстве серверов время запуска занимает максимум несколько секунд.


Конфигурация кластера происходит в файлах Merge CPF.


CPF2merge-data-instance.conf


[Startup]
PasswordHash=FBFE8593AEFA510C27FD184738D6E865A441DE98,u4ocm4qh
ShardRole=node1

[config]
MaxServerConn=64
MaxServers=64
globals=0,0,400,0,0,0
errlog=1000
routines=32
gmheap=256000
locksiz=1179648

Что здесь происходит?


В части [Startup] мы включаем шардинг, назначая роль Node1 этому инстансу и устанавливаем пароль SYS для всех пользователей. В секции [config] мы немного расширяем наш сервер. Вот и всё!


CPF2merge-data-instance.conf


[Startup]

ShardClusterURL=IRIS://iris1:1972/IRISCLUSTER
ShardRole=DATA

Для нод данных достаточно установить адрес Node1 и роль ноды в кластере.


Репозиторий


Оба примера доступны в репозитории:


git clone https://github.com/intersystems-ru/iris-container-recipes.git
cd iris-container-recipes
cd cluster
// copy iris.key in cluster folder
docker-compose up -d

После запуска кластера Intersystems IRIS можно получить к нему доступ из браузера. Логин/пароль: _SYSTEM/SYS.
Также в репозитории, в папке mirror представлен пример запуска зеркалированной конфигурации из двух нод — основной и резервной и арбитра.


Ссылки



Выводы


Merge CPF files — это отличный и простой инструмент, позволяющий легко конфигурировать InterSystems IRIS. С его помощью легко можно запускать сложные конфигурации InterSystems IRIS.

Комментарии (0)