В этой статье мы запустим кластер 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</p> 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 </p>
Мы запускаем стандартный образ 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.