Руководство по системному администрированию#
Термины и определения#
Термин/Аббревиатура |
Определение |
|---|---|
JDBC |
Java Database Connectivity, платформенно независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД |
JDK |
Java Development Kit, комплект разработчика приложений на языке Java |
JMX |
Java Management Extensions, управленческие расширения Java |
JVM |
Java Virtual Machine, виртуальная машина Java |
LFS |
Local File System, локальная файловая система |
PDS |
Persistent Data Store, постоянное хранилище данных |
SPI |
Service Programming Interface, программный интерфейс сервиса |
LFS |
Local File System, локальная файловая система |
WAL |
Write-Ahead Logging, журнал предзаписи |
КУ |
Клиентский узел |
ОС |
Операционная система |
СУ |
Серверный узел |
УЗ |
Учетная запись |
УЦ |
Удостоверяющий центр |
WAL (Write-Ahead Logging) — журнал предзаписи.
Сценарии администрирования#
Резервное копирование и восстановление в Platform V DataGrid#
Существующие ограничения#
С существующими ограничениями можно ознакомиться в подразделе «Ограничения» раздела «Безопасность данных» документа «Руководство по безопасному использованию».
Создание полной резервной копии (снепшота)#
Благодаря использованию Persistence, Platform V DataGrid позволяет создавать резервные копии (снепшоты). Резервная копия Ignite включает в себя согласованную копию всех данных кластера, сохраненных на диске.
Структура резервной копии схожа со структурой директории постоянного хранилища с некоторыми исключениями. На рисунке ниже приведен пример такой структуры:

снепшот находится в директории
work\snapshotsи называетсяbackup23012020, гдеwork– рабочая директория Ignite;снепшот создается для кластера с тремя узлами. При этом, все узлы запускаются на одной машине. В данном примере узлы называются
node1,node2иnode3, однако на практике названия узлов эквивалентны согласованным ID узлов;снепшот содержит в себе копию кеша
my-sample-cache;в файлах
part-N.binиcache_data.datдиректорииdbсодержится копия записей данных. Процессы упреждающей журнализации и создания контрольных точек не включены в снепшот, поскольку это не требуется для корректной работы имеющейся процедуры восстановления;директории
binary_metaиmarshallerхранят информацию, относящуюся к метаданным и marshaller.
Внимание
Создаваемый снепшот должен иметь уникальное имя. В случае попытки создания снепшота с именем, которое уже использовалось ранее, Ignite выдаст следующую ошибку:
Cluster-wide snapshot operation failed: class org.apache.ignite.IgniteException: Create snapshot request has been rejected. Snapshot with given name already exists on local node.
Конфигурация директории хранения резервной копии (снепшота)#
По умолчанию, сегмент снепшота сохраняется в рабочей директории соответствующего узла Platform V DataGrid и использует то же пространство, в котором хранятся данные, индексы, WAL-журнал и другие файлы Persistence.
Примечание
Поскольку снепшот может потреблять столько же пространства на диске, сколько занимают файлы Ignite Persistence, и снижать производительность приложения за счет использования I/O жесткого диска совместно с рутинными задачами Ignite Persistence, рекомендуется хранить снепшот и файлы Persistence на разных дисках.
Чтобы избежать неравномерного распределения нагрузки между Persistence и механизмом резервного копирования (создания снепшотов), необходимо либо изменить директорию для файлов Persistence, либо сконфигурировать директорию хранения резервной копии (снепшота), как показано ниже:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<!--
Sets a path to the root directory where snapshot files will be persisted.
By default, the `snapshots` directory is placed under the `IGNITE_HOME/db`.
-->
<property name="snapshotPath" value="/snapshots"/>
<property name="cacheConfiguration">
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="snapshot-cache"/>
</bean>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
File exSnpDir = U.resolveWorkDirectory(U.defaultWorkDirectory(), "ex_snapshots", true);
cfg.setSnapshotPath(exSnpDir.getAbsolutePath());
Создание резервной копии (снепшота)#
Для создания резервных копий в поставку Platform V DataGrid входят следующие интерфейсы:
утилита
control.sh;JMX;
Java API.
При создании снепшота, в директории $IGNITE_HOME/work/db/.../snp создаются файлы партиций с грязными страницами. Каждый такой файл партиции будет иметь расширение .delta.
Пример
part-467.bin.delta
После успешного завершения операции по созданию снепшота данные файлы будут автоматически применены к созданному снепшоту и удалены.
Отображение начала и окончания процесса создания снепшота в логах Platform V DataGrid#
В момент запуска операции создания снепшота в журналах Platform V DataGrid появляется следующая запись:
[IgniteSnapshotManager] Cluster-wide snapshot operation started [snpName=MySnapshot, grps=[1794698200]]
где:
snpName– имя снепшота;grps– список кеш-групп в снепшоте.
Когда операция создания снепшота завершается, в логах появляется следующая запись:
[IgniteSnapshotManager] Cluster-wide snapshot operation finished successfully: SnapshotOperationRequest [rqId=1a24fa7d-4e50-4714-ae68-959892c6d5a3, srcNodeId=b7b71afb-32c5-4730-b0dc-5090920cf4f0, snpName=MySnapshot, grpIds=ArrayList [1794698200], bltNodes=HashSet [b7b71afb-32c5-4730-b0dc-5090920cf4f0], err=null]
Использование утилиты control.sh#
Утилита администрирования control.sh поддерживает следующие команды для управления резервными копиями (снепшотами):
#Create a cluster snapshot:
control.(sh|bat) --snapshot create snapshot_name
#Cancel a running snapshot:
control.(sh|bat) --snapshot cancel snapshot_name
#Kill a running snapshot:
control.(sh|bat) --kill SNAPSHOT snapshot_name
Примечание:
Команды
--snapshot cancelи--kill SNAPSHOTничем не отличаются и используют один и тот же API.
Использование интерфейса JMX#
Для проведения операций, связанных с созданием резервных копий через интерфейс JMX, используйте SnapshotMXBean:
Метод |
Описание |
|---|---|
|
Создать снепшот |
|
Отменить создание снепшота на узле-инициаторе этой операции |
Использование Java API#
Создать снепшот также можно и из кода, используя Java API:
CacheConfiguration<Long, String> ccfg = new CacheConfiguration<Long, String>("snapshot-cache");
try (IgniteCache<Long, String> cache = ignite.getOrCreateCache(ccfg)) {
cache.put(1, "Maxim");
// Start snapshot operation.
ignite.snapshot().createSnapshot("snapshot_02092020").get();
}
finally {
ignite.destroyCache(ccfg);
}
Восстановление из резервной копии (снепшота)#
Восстановление из снепшота происходит на остановленном кластере и состоит из копирования на каждом узле кластера данных из директории снепшота в рабочую директорию. Текущие данные при этом удаляются или копируются в резервную директорию.
На схеме ниже продемонстрирован алгоритм работы процесса восстановления из снепшота:

Примечание
Скрипт запуска восстановления и набор скриптов (playbook), позволяющий управлять процедурой восстановления, находятся на каждом узле и поставляются с релизом.
Ручное восстановление из снепшота#
Для ручного восстановления из снепшота выполните следующие действия:
Остановите работу кластера, который нужно восстановить.
Удалите все данные из директории контрольной точки
$IGNITE_HOME/work/cp(данные Persistence и прочие данные).На каждом узле выполните следующие действия:
удалите все файлы, относящиеся к
{nodeId}из директории$IGNITE_HOME/work/db/binary_meta.удалите все файлы, относящиеся к
{node_id}из директории$IGNITE_HOME/work/db/marshaller.удалите все файлы и субдиректории, принадлежащие к узлу с
{nodeId}в директории$IGNITE_HOME/work/db. Очистите директориюdb/{nodeId}отдельно, если она отсутствует в директорииwork.скопируйте файлы, относящиеся к узлу с
{node_id}, из снепшота в директорию$IGNITE_HOME/work/. Если директорияdb/{node_id}не находится в директорииwork, скопируйте файлы с данными туда.
Перезапустите кластер.
Восстановление кластера из снепшота кластера с другой топологией#
При возникновении ситуации неожиданного выхода кластера из строя (например, при сбоях) может потребоваться его восстановление. Однако топологии кластеров могут отличаться, равно как и топологии снепшотов этих кластеров. Таблица ниже описывает ситуации, когда нужно создать снепшот кластера с количеством узлов N и восстановить кластер с количеством узлов M:
Условие |
Описание |
|---|---|
N == M |
Рекомендованный случай. Создание и использование снепшота на кластерах с похожей топологией |
N < M |
Запуск первых N узлов кластера с M узлов и применение снепшота. Далее необходимо добавить остальные узлы кластера с M узлов в топологию и дождаться окончания ребалансировки данных и обновления индексов |
N > M |
Не поддерживается |
Восстановление кластера Ignite из резервной копии с использованием скрипта восстановления snapshot_restore.sh#
Для запуска процесса восстановления кластера из резервной копии используйте скрипт snapshot_restore.sh. Он использует следующие переменные:
storagePath– путь к каталогу с данными на хосте;snapshotName– имя снепшота;snapshotPath– путь к каталогу, в котором хранится снепшот.
Ниже приведен пример запуска скрипта восстановления:
$ snapshot_restore.sh --workPath="/ignite/server/work" --storagePath="/ignite/server/data"--snapshotName="snapshot_simple_1" --snapshotPath="/ignite/server/work/snapshots"
Перед запуском скрипта необходимо задать переменные с путем к каталогу, в котором хранится снепшот, а также с путем к LFS.
Примечание
Вы также можете передавать переменные скрипту при запуске с помощью следующих аргументов:
snapname– имя снепшота;
snapfullpath– путь к каталогу, в котором хранится снепшот;
IGNITE_DATA;
IGNITE_WORK;
IGNITE_HOME.
Playbook для управления процессом восстановления#
Playbook — это набор скриптов для управления восстановлением из резервной копии. В playbook также содержатся метаданные, необходимые для его исполнения.
Для запуска playbook предварительно заполните файл hosts, в котором заданы хосты кластера.
hosts
[srv_hosts]
1.1.1.1
2.2.2.2
3.3.3.3
....
n.n.n.n
Для запуска передайте следующие переменные:
Имя переменной |
Описание |
|---|---|
|
|
|
(опция) Если LFS вынесен из db |
|
|
|
Имя снепшота для восстановления |
|
(опция) По умолчанию определяется как |
|
(опция) если требуется сохранять LFS перед восстановлением из снепшота |
|
(опция) По умолчанию пишется в |
Переменные передаются как extravars:
$ ansible-playbook playbooks/restore_snapshots.yml -i ./hosts -e "run_on=srv_hosts ignite_se_instance_home='/ignite/server/' ignite_se_data_dir='/ignite/server/data' ignite_se_work_dir='/ignite/server/work' ignite_se_snapshot_dir='/ignite/server/work/snapshots' ignite_se_snapshot_name='snapshot_simple_1'"
Постоянное хранилище данных (Persistent Data Store)#
Подробную информацию о постоянном хранилище данных можно найти в документе «Детальная архитектура». В настоящем документе приводится описание включения и конфигурации хранилища.
Включение постоянного хранилища данных#
Native Persistence конфигурируется отдельно для каждого региона данных.
Чтобы включить постоянное хранилище данных, установите значение true для свойства persistenceEnabled в файле конфигурации региона данных.
Примечание
Регионы данных могут одновременно храниться и в ОЗУ (in-memory data regions), и в постоянном хранилище (data regions with persistence).
Пример ниже показывает, как можно включить постоянное хранилище для стандартного региона данных.
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
//data storage configuration
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
C#/.NET
var cfg = new IgniteConfiguration
{
DataStorageConfiguration = new DataStorageConfiguration
{
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
PersistenceEnabled = true
}
}
};
Ignition.Start(cfg);
Конфигурация директории постоянного хранилища данных#
При включенном Persistence узел сохраняет данные пользователей, индексы и WAL-файлы в директории {IGNITE_WORK_DIR}/db. Данная директория считается директорией хранилища. Ее можно изменить, установив свойство storagePath объекта DataStorageConfiguration, как показано ниже.
Каждый узел обслуживает следующие субдиректории хранилища, в котором будут храниться кешированные данные, WAL-файлы, а также файлы архива WAL:
Субдиректория |
Описание |
|---|---|
|
Данная директория содержит кешированные данные и индексы |
|
Данная директория содержит WAL-файлы |
|
Данная директория содержит файлы архива WAL |
nodeId здесь — это либо согласованный ID узла (consistent node ID), если он определен конфигурацией узла, либо автоматически сгенерированный ID узла. Он используется для обеспечения уникальности директорий для узла.
Примечание
Если несколько узлов используют одну директорию, то в ней создаются субдиректории для каждого из узлов.
Если рабочая директория содержит файлы постоянного хранения для нескольких узлов (т. е. существует несколько субдиректорий {nodeId} с разными ID узлов), то узел выбирает первую неиспользуемую субдиректорию.
Внимание
Чтобы убедиться в том, что узел всегда использует определенную субдиректорию и, следовательно, определенные партиции данных даже после его перезагрузки, установите в конфигурации узла уникальное для кластера значение метода
IgniteConfiguration.setConsistentId.
Директорию можно изменить следующим образом:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
<property name="storagePath" value="/opt/storage"/>
</bean>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
//data storage configuration
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
storageCfg.setStoragePath("/opt/storage");
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
C#/.NET
var cfg = new IgniteConfiguration
{
DataStorageConfiguration = new DataStorageConfiguration
{
StoragePath = "/ssd/storage",
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
PersistenceEnabled = true
}
}
};
Ignition.Start(cfg);
Конфигурация#
В таблице ниже перечислены некоторые свойства класса DataStorageConfiguration.
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|
|
Максимальный размер архива WAL-журнала в файловой системе в байтах |
Размер буфера контрольных точек (checkpointing buffer) * 4 |
|
Для включения Native Persistence установите значение true |
false |
|
Путь, по которому хранятся данные |
|
|
Путь к архиву WAL-журнала |
|
|
Для включения сжатия архива WAL-журнала установите значение |
|
|
Уровень сжатия архива WAL-журнала. 1 — самое быстрое сжатие, 9 — лучшее сжатие |
1 |
|
Режим работы WAL-журнала |
|
|
Путь к директории, в которой хранятся активные сегменты WAL-журнала |
|
|
Размер файла сегмента WAL-журнала в байтах |
64MB |
WAL-журнал#
Подробнее о WAL-журнале вы можете прочитать в документе «Детальная архитектура». В этом документе приведены только примеры конфигурации.
Изменение размера сегмента WAL-журнала#
Для изменения размера сегмента WAL-журнала выполните следующий код:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!-- set the size of wal segments to 128MB -->
<property name="walSegmentSize" value="#{128 * 1024 * 1024}"/>
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
storageCfg.setWalSegmentSize(128 * 1024 * 1024);
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
Отключение WAL-журнала#
Java
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
ignite.cluster().state(ClusterState.ACTIVE);
String cacheName = "myCache";
ignite.getOrCreateCache(cacheName);
ignite.cluster().disableWal(cacheName);
//load data
ignite.cluster().enableWal(cacheName);
C#/.NET
var cacheName = "myCache";
var ignite = Ignition.Start();
ignite.GetCluster().DisableWal(cacheName);
//load data
ignite.GetCluster().EnableWal(cacheName);
SQL
ALTER TABLE Person NOLOGGING
//...
ALTER TABLE Person LOGGING
Сжатие записей WAL-журнала#
Java
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration dsCfg = new DataStorageConfiguration();
dsCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true);
//WAL page compression parameters
dsCfg.setWalPageCompression(DiskPageCompression.LZ4);
dsCfg.setWalPageCompressionLevel(8);
cfg.setDataStorageConfiguration(dsCfg);
Ignite ignite = Ignition.start(cfg);
Отключение архива WAL-журнала#
Для отключения архивирования укажите одно и то же значение как для walPath, так и для walArchivePath. В этом случае Platform V DataGrid не копирует сегменты в архив. Вместо этого он создает новые сегменты в папке WAL-журнала, а старые сегменты удаляются по мере роста самого WAL-журнала. Этот рост зависит от настроек размера архива WAL-журнала.
Безопасность и аудит#
Плагин безопасности для Platform V DataGrid#
Сокращения#
КУ — клиентский узел кластера Platform V DataGrid;
СУ — серверный узел кластера Platform V DataGrid;
ТК — тонкий клиент Platform V DataGrid;
УЗ — учетная запись;
ИБ — информационная безопасность.
Подготовка сертификатов пользователей#
Описание сертификатов пользователей содержится в разделе «Управление ключами и сертификатами» документа «Руководство по безопасному использованию». Этапы создания сертификата перечислены ниже.
Генерация сертификата#
При генерации сертификата укажите уникальный пароль, удовлетворяющий требованиям ИБ к его составу.
keytool -genkey \
-alias <Alias> \
-keystore <FileName>-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-dname "CN=<CN>, OU=00CA, O=Savings Bank of the Russian Federation, C=RU"
где:
Alias— псевдоним сертификата вjks-файле;FileName— имя файла сертификата;CN— ЗначениеCommon Name.
Пример:
keytool -genkey \
-alias ntsecuritySgg_server \
-keystore ntsecuritySgg_server-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-dname "CN=00CA0000Sgg_server@snnode.nt.security.sbrf.ru, OU=00CA, O=Savings Bank of the Russian Federation, C=RU"
Создание запроса на подпись сертификата#
keytool -keystore <FileName>-keystore.jks \
-alias <Alias> \
-certreq \
-file <FileName>-certreq.csr \
-ext ExtendedkeyUsage=serverAuth,clientAuth
Пример:
keytool -keystore ntsecuritySgg_server-keystore.jks \
-alias ntsecuritySgg_server \
-certreq \
-file ntsecuritySgg_server-certreq.csr \
-ext ExtendedkeyUsage=serverAuth,clientAuth
Дальнейшие действия совпадают с вышеописанными пунктами.
Создание запроса на подпись сертификата#
Администратор создает запрос на подпись сертификата и прикладывает к нему файл с расширением .csr.
Импорт сертификатов УЦ#
Импортируйте сертификаты УЦ в JKS-хранилище. Этими сертификатами подписаны сертификаты на шаге создания запроса на подпись сретификата (см. раздел "Создание запроса на подпись сертификата). Этот шаг является необходимым для последующего импорта подписанного сертификата, поскольку при импорте keytool проверяет корректность всей цепочки сертификации.
Пример:
keytool -keystore <FileName>-keystore.jks \
-alias "Test Root CA 2" \
-import \
-file "Test Root CA 2.cer"
keytool -keystore <FileName>-keystore.jks \
-alias "Company Test Issuing CA 2" \
-import \
-file "Company Test Issuing CA 2.cer"
Примечание
Сертификаты УЦ обычно приложены к запросу на подпись сертификата.
Импорт подписанного сертификата#
Импортируйте подписанный сертификат в JKS-хранилище:
keytool -keystore <FileName>-keystore.jks \
-alias <Alias> \
-import \
-file <FileName>-certreq.csr_cert.cer
Удаление сертификатов УЦ#
Удалите из jks-хранилища сертификаты УЦ, добавленные при импорте подписанных сертификатов (см. раздел "Импорт подписанного сертификата"). Это необходимо, поскольку текущая реализация менеджера ключей в Platform V DataGrid и плагине использует первый встретившийся сертификат, поэтому он должен быть один.
keytool -keystore <FileName>-keystore.jks \
-alias "Test Root CA 2" \
-delete
keytool -keystore <FileName>-keystore.jks \
-alias "Company Test Issuing CA 2" \
–delete
Генерация truststore, содержащего сертификаты УЦ#
keytool -keystore truststore.jks \
-alias "Test Root CA 2" \
-import \
-file "Test Root CA 2.cer"
keytool -keystore truststore.jks \
-alias "Company Test Issuing CA 2" \
-import \
-file "Company Test Issuing CA 2.cer"
Проверка корректности созданных сертификатов#
keytool -v --list --keystore <FileName>-keystore.jks | awk '/Owner:|Issuer:|Your keystore contains|Certificate chain length/'
Пример вывода:
Your keystore contains 1 entry
Certificate chain length: 3
Owner: CN=00CA0000Sgg_server@snnode.nt.security.sbrf.ru, OU=00CA, O=Company, C=RU
Issuer: CN=Company Test Issuing CA 2, DC=ca, DC=sbrf, DC=ru
Owner: CN=Company Test Issuing CA 2, DC=ca, DC=sbrf, DC=ru
Issuer: CN=Test Root CA 2
Owner: CN=Test Root CA 2
Issuer: CN=Test Root CA 2
Вывод должен содержать следующую информацию:
Your keystore contains 1 entry;Certificate chain length: 3;Issuer:— УЦ компании.
Подготовка сертификатов для утилиты управления пользователями#
Для работы утилиты сгенерируйте сертификат узла, на котором будет запускаться утилита. Данный сертификат имеет следующие особенности:
в нем должно быть указано соответствующее DNS-имя данного узла (браузер проверяет FQDN);
в
CNуказывается имя сервера.
В примерах ниже используется сервер grid785.
Генерация сертификата#
keytool -genkey \
-alias grid785 \
-keystore grid785-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-dname "CN=grid785.delta.sbrf.ru, OU=00CA, O=Savings Bank of the Russian Federation, C=RU"
Создание запроса на подпись сертификата#
keytool -keystore \
grid785-keystore.jks \
-alias grid785 \
-certreq \
-file grid785-certreq.csr \
-ext SAN="dns:grid785.delta.sbrf.ru,dns:grid785" \
-ext ExtendedkeyUsage=serverAuth
Дальнейшие этапы совпадают с вышеописанными пунктами.
Утилита управления использует аутентификацию клиентов, поэтому создайте копию keystore в формате PKCS12 и импортируйте ее в браузер:
keytool -importkeystore \
-srckeystore petrov-keystore.jks \
-destkeystore petrov-keystore.p12 \
-srcstoretype JKS \
-deststoretype PKCS12
Импорт копии keystore в браузер выполняется стандартными средствами ОС. Например, для Windows — через контекстное меню файла *.p12.
Конфигурирование серверного узла#
Включение Persistence#
Внимание
Текущая реализация не поддерживает кластеры, хранящие данные только в памяти. В следующих версиях это ограничение может быть снято.
Убедитесь, что режим persistence включен:
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="dataStorageConfiguration" ref="dataStorage"/>
...
</bean>
...
<bean id="dataStorage" class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
Конфигурирование плагина безопасности#
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="pluginProviders">
<list>
<ref bean="securityPlugin"/>
</list>
</property>
...
</bean>
...
<bean id="creds" class="org.apache.ignite.plugin.security.SecurityCredentials">
<!-- При наличии интеграции с Конфигуратором использовать value="${SecurityPluginConfiguration.nodeLogin}" -->
<constructor-arg value="serverNode"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SecurityPluginConfiguration.nodePassword}" -->
<constructor-arg value="default-password"/>
</bean>
<bean id="credentialsProvider" class="org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider">
<constructor-arg ref="creds"/>
</bean>
<bean id="dataProvider" class="com.sbt.security.ignite.core.storage.metastorage.MetaStorageSecurityDataProvider">
<constructor-arg>
<bean class="com.sbt.security.ignite.core.storage.metastorage.DefaultSecurityDataSupplierImpl">
<constructor-arg ref="credentialsProvider"/>
<constructor-arg>
<bean class="com.sbt.security.ignite.core.storage.metastorage.JsonSecurityDataSupplierImpl"/>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
<bean id="evtRecorder" class="com.sbt.security.ignite.core.events.EventRecorderImpl" />
<util:list id="components" value-type="SecurityLifecycleAware">
<ref bean="evtRecorder"/>
. . .
</util:list>
<bean id="securityPluginConfiguration" class="com.sbt.security.ignite.core.SecurityPluginConfiguration">
<property name="securityDataProvider" ref="dataProvider"/>
<property name="authenticator">
<bean class="com.sbt.security.ignite.core.authenticator.TwoFactorSecurityAuthenticatorImpl">
<constructor-arg ref="dataProvider"/>
</bean>
</property>
<property name="authorizer">
<bean class="com.sbt.security.ignite.core.authorizer.SecurityAuthorizerImpl">
<constructor-arg ref="dataProvider"/>
</bean>
</property>
<property name="securityCredentialsProvider" ref="credentialsProvider"/>
<property name="selfKeyStorePath" value="/path/to/serverNode-key-and-certificate.jks"/>
<!-- При наличии интеграции с Конфигуратором необходимо использовать value="${SecurityPluginConfiguration.selfKeyStorePwd}" -->
<property name="selfKeyStorePassword" value="123456"/>
<property name="components" ref="components"/>
</bean>
<bean id="securityPlugin" class="com.sbt.security.ignite.core.SecurityPluginProvider">
<constructor-arg ref="securityPluginConfiguration"/>
</bean>
Настройка TLS#
Для протоколов, по которым узлы Platform V DataGrid обмениваются данными между собой (discovery, communication), используется TLS без шифрования. Соответствующие наборы шифров (в названиях присутствует фрагмент WITH_NULL) по умолчанию отключены в JVM. Чтобы избежать плохо диагностируемых ошибок при TLS handshake, включите эти шифры явно: уберите значение NULL из параметра jdk.tls.disabledAlgorithms файла lib/security/java.security в JRE. Переход на TLS с шифрованием возможен, но повлечет существенное падение производительности, что в большинстве случаев неприемлемо.
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="sslContextFactory" ref="nullSslContextFactory"/>
<property name="connectorConfiguration" ref="connectorConfiguration"/>
<property name="clientConnectorConfiguration" ref="clientConnectorConfiguration"/>
...
</bean>
...
<!-- Настройка подключений GridClient -->
<bean id="connectorConfiguration" class="org.apache.ignite.configuration.ConnectorConfiguration">
<property name="idleTimeout" value="180000"/>
<property name="sslEnabled" value="true"/>
<property name="sslClientAuth" value="true"/>
<property name="sslFactory" ref="sslContextFactory"/>
</bean>
<!-- Настройка подключений IgniteClient и JDBC -->
<bean id="clientConnectorConfiguration" class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="useIgniteSslContextFactory" value="false"/>
<property name="sslEnabled" value="true"/>
<property name="sslClientAuth" value="true"/>
<property name="sslContextFactory" ref="sslContextFactory"/>
</bean>
<!-- TLS без шифрования -->
<bean id="nullSslContextFactory" class="org.apache.ignite.ssl.SslContextFactory">
<property name="keyStoreFilePath" value="/path/to/serverNode-key-and-certificate.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.keyStorePassword}" -->
<property name="keyStorePassword" value="123456"/>
<property name="trustStoreFilePath" value="/path/to/Sberbank-CA-truststore.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.trustStorePassword}" -->
<property name="trustStorePassword" value="123456"/>
<property name="cipherSuites"
value="TLS_RSA_WITH_NULL_SHA256, TLS_ECDHE_ECDSA_WITH_NULL_SHA, TLS_ECDH_RSA_WITH_NULL_SHA"/>
</bean>
<!-- TLS с шифрованием -->
<bean id="sslContextFactory" class="org.apache.ignite.ssl.SslContextFactory">
<property name="keyStoreFilePath" value="/path/to/serverNode-key-and-certificate.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.keyStorePassword}" -->
<property name="keyStorePassword" value="123456"/>
<property name="trustStoreFilePath" value="/path/to/Sberbank-CA-truststore.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.trustStorePassword}" -->
<property name="trustStorePassword" value="123456"/>
<property name="trustManagers" ref="trustManager"/>
</bean>
<!-- Расширенный trust manager -->
<bean id="trustManager" class="com.sbt.security.ignite.core.ssl.ExtendedX509TrustManagerImpl">
<constructor-arg index="0" ref="evtRecorder"/>
<constructor-arg index="1" value="/path/to/Sberbank-CA-truststore.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.trustStorePassword}" -->
<constructor-arg index="2" value="123456"/>
<constructor-arg index="3" value="JKS"/>
<constructor-arg index="4" value="PKIX"/>
</bean>
Настройка отправки событий ИБ в систему аудита#
При использовании конфигуратора для системы аудита проверьте актуальность версий библиотек Технологического Ядра. В classpath не должны попадать одинаковые библиотеки разных версий.
С событиями ИБ, отправляемыми в систему аудита, вы можете ознакомиться в соответствующей таблице в разделе «Аудит» документа «Руководство по безопасному использованию».
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="includeEventTypes" ref="eventTypes"/>
<property name="localEventListeners" ref="eventListeners"/>
...
<property name="pluginProviders">
<list>
...
<ref bean="restProcessorPluginProvider"/>
</list>
</property>
...
<property name="eventStorageSpi" ref="eventStorageSpi"/>
</bean>
...
<util:list id="eventTypes" value-type="java.lang.Integer">
<util:constant static-field="org.apache.ignite.events.EventType.EVT_NODE_JOINED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_NODE_LEFT"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_NODE_FAILED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_NODE_VALIDATION_FAILED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_STARTED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_STOPPED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED"/>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_AUTHORIZATION_SUCCEEDED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_AUTHORIZATION_FAILED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_AUTHENTICATION_SUCCEEDED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_AUTHENTICATION_FAILED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_CERTIFICATE_EXPIRED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SECURITY_SUBJECT_CREATED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SECURITY_SUBJECT_REMOVED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SECURITY_SUBJECT_OPERATION_UNSUPPORTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_USER_ROLES_GRANTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_USER_ROLES_REVOKED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_USER_PASSWORD_UPDATED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_CACHE_PERMISSIONS_GRANTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_CACHE_PERMISSIONS_REVOKED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_TASK_PERMISSIONS_GRANTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_TASK_PERMISSIONS_REVOKED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SERVICE_PERMISSIONS_GRANTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SERVICE_PERMISSIONS_REVOKED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SYSTEM_PERMISSIONS_GRANTED.eventCode()}</value>
<value>#{T(com.sbt.security.ignite.core.events.SecurityEventType).EVT_SYSTEM_PERMISSIONS_REVOKED.eventCode()}</value>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_REST_REQ_SUCCEEDED"/>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_REST_REQ_FAILED"/>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_REST_REQ_AUTHENTICATION_FAILED"/>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_REST_REQ_AUTHORIZATION_FAILED"/>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_REST_REQ_ILLEGAL_ARGUMENT"/>
<util:constant static-field="com.sbt.security.ignite.integration.audit.EventType.EVT_UNEXPECTED_REST_REQ_EXECUTION_STATUS"/>
</util:list>
<bean id="auditEventListener" class="com.sbt.security.ignite.integration.audit.AuditEventListenerImpl" >
<constructor-arg ref="dataProvider"/>
<!-- Ссылка на существующую в контексте Spring реализацию com.sbt.audit2.AuditClientFactory. -->
<constructor-arg ref="auditClientFactory"/>
</bean>
<util:map id="eventListeners"
map-class="java.util.HashMap"
key-type="org.apache.ignite.lang.IgnitePredicate"
value-type="java.lang.Integer[]">
<entry key-ref="auditEventListener" value-ref="eventTypes"/>
</util:map>
<!-- Ниже - настройка обработки событий от GridClient-подключений. -->
<util:list id="cmdEventIgnoreList" value-type="java.lang.String">
<!--Имена команд org.apache.ignite.internal.processors.rest.GridRestCommand,
запись в аудит для которых вестись не будет -->
<value>NOOP</value>
</util:list>
<bean id="restProcessorConfiguration" class="com.sbt.security.ignite.integration.audit.rest.RestProcessorPluginConfiguration">
<property name="commandEventIgnoreList" ref="cmdEventIgnoreList"/>
</bean>
<bean id="restProcessorPluginProvider" class="com.sbt.security.ignite.integration.audit.rest.RestProcessorPluginProvider">
<property name="configuration" ref="restProcessorConfiguration"/>
</bean>
<bean id="eventsFilter" class="com.sbt.security.ignite.core.events.IgnoreEventsFilter">
<constructor-arg>
<list>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED"/>
<util:constant static-field="org.apache.ignite.events.EventType.EVT_QUERY_EXECUTION"/>
</list>
</constructor-arg>
</bean>
<bean id="eventStorageSpi" class="org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi">
<property name="filter" ref="eventsFilter"/>
</bean>
...
</beans>
Отключение возможности подключений IgniteClient и JDBC#
Требуется только если кластер не должен принимать подключения IgniteClient или JDBC.
Оба вида клиентских подключений используют одно и то же свойство IgniteConfiguration — clientConnectorConfiguration или его устаревший аналог sqlConnectorConfiguration. Для отключения возможности подключений установите оба параметра в null:
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="clientConnectorConfiguration">
<null/>
</property>
<property name="sqlConnectorConfiguration">
<null/>
</property>
...
</bean>
Системные свойства JVM#
На СУ обязательно установите следующие системные свойства:
Свойство |
Описание |
|---|---|
|
Тип кластера. Должен быть одинаковым на всех узлах. Этот же тип кластера должен использоваться в |
|
Имя кластера. Должно быть одинаковым на всех узлах. Это же имя кластера должно использоваться в |
|
Отключает регистрацию Ignite JMX management beans, если их использование не планируется |
Помимо соблюдения структуры CN плагин выполняет следующие проверки имени и типа кластера:
При попытке входа клиентского или серверного узла Platform V DataGrid в кластер значение
cluster_nameв его сертификате должно быть равным значению системного свойстваIGNITE_CLUSTER_NAMEаутентифицирующего узла (следовательно, это свойство обязательно должно быть установлено для успешного запуска плагина).При любой аутентификации значение
cluster_typeиз сертификата аутентифицируемого узла должно быть равным системному свойствуIGNITE_CLUSTER_TYPEаутентифицирующего узла. Для сертификатов администраторов эксплуатации (тип ключа — 'A') эту проверку можно отключить отдельным системным свойством:-DSKIP_A_CERT_CLUSTER_TYPE_CHECK=false, чтобы упростить проведение работ на тестовых стендах.
Конфигурирование клиентского узла#
Конфигурирование плагина безопасности#
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true"> ... <property name="pluginProviders"> <list> <ref bean="securityPlugin"/> </list> </property> ...</bean>...<bean id="creds" class="org.apache.ignite.plugin.security.SecurityCredentials"> <!-- При наличии интеграции с Конфигуратором необходимо использовать value="${SecurityPluginConfiguration.nodeLogin}" --> <constructor-arg value="clientNode"/> <!-- При наличии интеграции с Конфигуратором необходимо использовать value="${SecurityPluginConfiguration.nodePassword}" --> <constructor-arg value="default-password"/></bean>
<bean id="credentialsProvider" class="org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider"> <constructor-arg ref="creds"/></bean>
<bean id="dataProvider" class="com.sbt.security.ignite.core.storage.metastorage.MetaStorageSecurityDataProvider"/>
<bean id="securityPluginConfiguration" class="com.sbt.security.ignite.core.SecurityPluginConfiguration"> <property name="securityDataProvider" ref="dataProvider"/>
<property name="authenticator"> <bean class="com.sbt.security.ignite.core.authenticator.TwoFactorSecurityAuthenticatorImpl"> <constructor-arg ref="dataProvider"/> </bean> </property>
<property name="authorizer"> <bean class="com.sbt.security.ignite.core.authorizer.SecurityAuthorizerImpl"> <constructor-arg ref="dataProvider"/> </bean> </property>
<property name="securityCredentialsProvider" ref="credentialsProvider"/>
<property name="selfKeyStorePath" value="/path/to/clientNode-key-and-certificate.jks"/>
<!-- При наличии интеграции с Конфигуратором необходимо использовать value="${SecurityPluginConfiguration.selfKeyStorePwd}" --> <property name="selfKeyStorePassword" value="123456"/>
</bean>
<bean id="evtRecorder" class="com.sbt.security.ignite.core.events.EventRecorderImpl" />
<bean id="securityPlugin" class="com.sbt.security.ignite.core.SecurityPluginProvider"> <constructor-arg ref="securityPluginConfiguration"/> <constructor-arg ref="evtRecorder"/></bean>
Настройка TLS#
В отличие от СУ, на КУ коннекторы для клиентских подключений не используются. Сведения из пункта о включении/отключении шифрования актуальны и для КУ.
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true">
...
<property name="sslContextFactory" ref="nullSslContextFactory"/>
...
</bean>
...
<!-- TLS без шифрования -->
<bean id="nullSslContextFactory" class="org.apache.ignite.ssl.SslContextFactory">
<property name="keyStoreFilePath" value="/path/to/clientNode-key-and-certificate.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.keyStorePassword}" -->
<property name="keyStorePassword" value="123456"/>
<property name="trustStoreFilePath" value="/path/to/Sberbank-CA-truststore.jks"/>
<!-- При наличии интеграции с Конфигуратором использовать value="${SslContextFactory.trustStorePassword}" -->
<property name="trustStorePassword" value="123456"/>
<property name="cipherSuites"
value="TLS_RSA_WITH_NULL_SHA256, TLS_ECDHE_ECDSA_WITH_NULL_SHA, TLS_ECDH_RSA_WITH_NULL_SHA"/>
</bean>
Конфигурирование безопасных клиентских подключений#
В плагине безопасности реализована поддержка следующих типов клиентских подключений:
Тонкий клиент, реализация для Java
IgniteClient client = Ignition.startClient(configuration);.Platform V DataGrid JDBC-driver.
GridClient. Он используется для выполнения задач map-reduce, и не имеет прямого доступа к данным кешей.
Для успешного подключения на серверных узлах кластера должны быть настроены коннекторы:
ClientConnectorConfiguration— для тонких клиентов и JDBC;ConnectorConfiguration— дляGridClient. Подробности настройки содержатся в п. 4.3.
Конфигурирование IgniteClient#
Логин и пароль устанавливаются в ClientConfiguration:
ClientConfiguration cfg = new ClientConfiguration()
.setUserName("myLogin")
.setUserPassword("myPassword")
...
Конфигурирование GridClient#
Логин и пароль устанавливаются в GridClientConfiguration:
GridClientConfiguration cfg = new GridClientConfiguration()
.setSecurityCredentialsProvider(() -> new SecurityCredentials("myLogin", "myPassword"))
...
Конфигурирование JDBC#
Пример создания подключения:
// Register JDBC driver.
Class.forName("org.apache.ignite.IgniteJdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/?"
+ "sslMode=require"
+ "&user=" + login
+ "&password=" + pwd
+ "&sslClientCertificateKeyStoreUrl=" + keyStorePath
+ "&sslClientCertificateKeyStorePassword=" + keyStorePassword
+ "&sslClientCertificateKeyStoreType=" + "JKS"
+ "&sslTrustCertificateKeyStoreUrl=" + trustStorePath
+ "&sslTrustCertificateKeyStorePassword=" + trustStorePassword
+ "&sslTrustCertificateKeyStoreType=" + "JKS");
Конфигурирование JMX#
Плагин позволяет создать защищенный JMX-сервер. Для подключающегося пользователя компонентами плагина выполняется аутентификация с использованием логина, пароля и клиентского сертификата и авторизация разрешения org.apache.ignite.plugin.security.SecurityPermission.ADMIN_OPS (проверка, является ли он администратором эксплуатации). Если используется защищенный сервер, то следует запретить возможность незащищенного подключения:
если для запуска узла используется
control.sh, то укажите параметр-nojmx;если узел запускается из Java-кода, то не устанавливайте свойство
com.sun.management.jmxremote.
Защита JMX-подключений реализована с использованием JAAS Login Modules, поэтому создайте файл конфигурации, содержащий описание модуля, и задействуйте этот файл с помощью системного свойства java.security.auth.login.config.
Файл конфигурации JAAS Login Modules#
Пример файла (my.login.modules.config):
JmxModule {
com.sbt.security.ignite.core.jmx.JmxLoginModule required igniteInstanceName="serverNode";
};
где:
JmxModule— имя модуля;igniteInstanceName— имя узла Platform V DataGrid. Оно должно соответствовать параметруIgniteConfiguration.igniteInstanceName.
Если в приложении создается несколько узлов, то для каждого узла, предполагающего возможность защищенного JMX-подключения, в файл конфигурации добавьте описание отдельного модуля с уникальным именем.
Файл из примера выше указывается при запуске JVM с помощью -Djava.security.auth.login.config=my.login.modules.config. Более подробную информацию о структуре файла вы можете найти в документации Oracle.
Дополнения в конфигурации серверного узла#
Для настройки защищенного JMX-сервера в конфигурации плагина используются следующие свойства:
...
<bean id="securityPluginConfiguration" class="com.sbt.security.ignite.core.SecurityPluginConfiguration">
...
<property name="selfKeyStorePath" value="/path/to/serverNode-key-and-certificate.jks"/>
<property name="selfKeyStorePassword" value="123456"/>
<property name="jmxPort" value="3000"/>
<property name="jmxTrustStorePath" value="/path/to/Sberbank-CA-truststore.jks"/>
<property name="jmxTrustStorePassword" value="123456"/>
<!-- Имя модуля из файла конфигурации JAAS Login Modules. -->
<property name="jmxLoginModuleName" value="JmxModule"/>
...
</bean>
...
Если свойство jmxPort не указано, то сервер не будет создан.
Подключение к JMX-коннектору при помощи внешнего Java-клиента#
Пример создания и использования javax.management.remote.JMXConnector:
import java.util.HashMap;
import java.util.Map;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
...
System.setProperty("javax.net.ssl.keyStore", "/path/to/admin/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.trustStore", "/path/to/Sberbank-CA-truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
String jmxHost = "localhost";
int jmxPort = 3000;
JMXServiceURL url = new JMXServiceURL(String.format("service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi", jmxHost, jmxPort));
Map<String, Object> jmxEnv = new HashMap<>();
jmxEnv.put(JMXConnector.CREDENTIALS, new String[] { "admin", "passw0rd" });
try (JMXConnector jmxc = JMXConnectorFactory.connect(url, jmxEnv)) {
jmxc.getMBeanServerConnection().invoke(...);
...
}
Подключение к JMX-коннектору с помощью JConsole#
Для запуска jconsole выполните:
jconsole \
-J-Djavax.net.ssl.keyStore=/path/to/admin/keystore.jks \
-J-Djavax.net.ssl.keyStorePassword=123456 \
-J-Djavax.net.ssl.trustStore=/path/to/Sberbank-CA-truststore.jks \
-J-Djavax.net.ssl.trustStorePassword=123456
Затем заполните поля Remote Process (="host:port"), Username, Password и подключитесь.
Поддержка InMemory кластера, обновление файла с пользователями и ролями#
Для настройки выполните следующие шаги:
Создайте bean
dataFileProviderSupplierвJsonSecurityDataSupplierImpl, указав в конструкторе путь до файла.Создайте bean
metaStorageListenerвSecurityDataListener, указав в конструктореdataFileProviderSupplier.Добавьте bean
metaStorageListenerвSecurityPluginConfiguration.
Пример:
<bean id="dataFileProviderSupplier" class="com.sbt.security.ignite.core.storage.metastorage.JsonSecurityDataSupplierImpl">
<constructor-arg value="path/to/security-data.json"/>
</bean>
<bean id="metaStorageListener" class="com.sbt.security.ignite.core.storage.metastorage.SecurityDataListener">
<constructor-arg ref="dataFileProviderSupplier"/>
</bean>
<util:list id="components" value-type="SecurityLifecycleAware">
<ref bean="evtRecorder"/>
<ref bean="metaStorageListener"/>
. . .
</util:list>
<bean id="securityPluginConfiguration" class="com.sbt.security.ignite.core.SecurityPluginConfiguration">
<property name="components" ref="components"/>
. . .
</bean>
Примечание
Обновление файла будет происходить при каждой записи в MetaStorage.
Утилита для генерации Salt и Salted-хеша пароля#
Пример запуска:
# java -jar security-core.jar --hash
PBKDF2 hash calculator
Password:
Once again:
Salt: A2DA8C5E73C7D90853E41514A5EA99BF119F91698A49FDDD97B68E844C146699
Salted hash: AECA32F27FD4AC0147547CC7632025504151462B5615AD7DE71895843E48F43630D8D19A002DC8B6088751D5881F4861B39230AED3429A1967DB09726DC447E3
Использование консольной утилиты управления пользователями#
Утилита управления используется как скрипт на технологическом сервере:
ise-user-control.sh connection_parameters command command_parameters
где:
connection_parameters— параметры для созданияGridClient-подключения, такие как: имя пользователя, путь к хранилищу сертификатов, наборы шифрования;command— команда администрирования;command_parameters— параметры команды администрирования;ise-user-control.sh --help— для получения справки об используемых командах. §
Проверка используемых сертификатов#
Проверка сертификатов выполняется путем подключения к JVM по JMX по адресу:
org.apache.<process_id>.<consistent_id>.Security.com.sbt.security.ignite.core.expiration.CertificateMBeanImpl.Attributes
Список атрибутов:
DistinguishedName— имя сертификата.Fingerprint— отпечаток пальца.ExpirationDate— дата окончания действия.ExpirationTimestamp— дата окончания срока действия в формате UNIX timestamp.
Примечание:
Сертификат выпускается и подписывается по запросу на обслуживание для соответствующего доменного имени технологического сервера (оно различно для ПСИ- и ПРОМ-контуров). Пользователи консоли управления будут подключаться из браузера, используя это имя.
Если порт 443 занят, то следует выбрать другой свободный порт и далее в браузере обращаться по нему.
В браузере пользовательский интерфейс утилиты управления доступен по адресу:
https://<IP-адрес технологического узла>:443/
При первом запуске кластера с плагином безопасности создается учетная запись администратора безопасности root с паролем changeit. Для успешного входа в утилиту управления потребуется сертификат категории «администратор безопасности», созданный по правилам, описанным в п. 2. Сертификат должен присутствовать в каталоге, заданном в --certificates.dir.path. Далее будет использоваться следующий стандартный алгоритм действий:
Администратор доступа устанавливает себе стойкий пароль (см. «Руководство по безопасности»).
Используя интерфейс утилиты управления, администратор доступа создает необходимые роли и учетные записи, в том числе УЗ администраторов эксплуатации.
Каждый администратор эксплуатации, используя интерфейс утилиты управления, должен сменить свой пароль (до этого никакие его действия не будут авторизованы).
Кроме root первоначально создается УЗ серверного узла, а ее логин и пароль берутся из сконфигурированного на СУ security credentials provider.
Быстрое развертывание в тестовых средах#
Для быстрого запуска Platform V DataGrid с настроенным SSL и плагином безопасности существуют:
config/serverExampleConfig.xml— конфигурации серверного узла;config/clientExampleConfig.xml— конфигурации клиентского узла;config/default-security-data.json— файл с начальными пользователями;config/certs/— сертификаты для SSL.
Установка переменной IGNITE_HOME#
$ export IGNITE_HOME=/path/to/Platform-V-Data-Grid-<version>
Редактирование JVM-опции для тестовых сертификатов#
Добавляем JVM_OPTS="$JVM_OPTS -DREQUIRE_AUDIT=false -DIGNITE_CLUSTER_TYPE=prom -DIGNITE_CLUSTER_NAME=mycluster" в $IGNITE_HOME/bin/ignite.sh
Запуск серверного узла#
$ $IGNITE_HOME/bin/ignite.sh $IGNITE_HOME/config/serverExampleConfig.xml
Запуск клиентского узла#
$ $IGNITE_HOME/bin/ignite.sh $IGNITE_HOME/config/clientExampleConfig.xml
Активация кластера#
$ $IGNITE_HOME/bin/control.sh --activate --host localhost --user operationAdmin --password default-password --keystore $IGNITE_HOME/config/certs/operationAdmin.jks --keystore-password 123456 --truststore $IGNITE_HOME/config/certs/truststore.jks --truststore-password 123456
Запуск утилиты управления пользователями#
$ java -jar $IGNITE_HOME/libs/security-plugins/ui-\<version\>.jar --server.port=8990 --ssl.disabled=true --certificates.dir.path=$IGNITE_HOME/config/certs
Подключение к кластеру через браузер#
В браузере перейдите по адресу
http://localhost:8990/.Затем заполните поля в окне авторизации:
Поле |
Значение |
|---|---|
Хост |
|
Порт |
|
Логин |
|
Пароль |
|
Протокол |
|
Алгоритм |
|
Шифр |
Оставьте поле пустым |
Key store |
|
Trust store |
|
Пароль к обоим хранилищам |
|
Начальные пароли и пользователи#
Логин |
Пароль |
Права |
|---|---|---|
|
|
Серверный узел |
|
|
Клиентский узел |
|
|
Администратор пользователей |
|
|
Администратор эксплуатации |
|
|
Администратор эксплуатации с ограниченными правами до изменения собственного пароля |
Аудит#
Аудит описывается в документе «Руководство по безопасному использованию». В настоящем руководстве приводится лишь конфигурация REST-интерфейса.
Описание REST API для внешнего аудита#
REST-интерфейс аудита#
Слушатель событий
com.sbt.security.ignite.integration.audit.rest.AuditEventListenerImplпри запуске узла регистрирует метамодель событий, отправляя ее на веб-страницуAUDIT_URL/metamodel.События, которые необходимо записывать в аудит, отправляются на веб-страницу
AUDIT_URL/event.Содержимое запросов описывается в файле
audit-client-openapi.yml.
Конфигурация для интеграции с подсистемой аудита#
Добавление в конфигурацию Ignite beans обработчика аудита событий и списка событий, необходимых для отправки в аудит#
<!-- Следующий bean содержит описание метамодели данных, которые отправляются в подсистему аудита. -->
<bean id="auditMetamodelProvider" class="com.sbt.security.ignite.integrationaudit.rest.AuditMetamodelProvider">
<!-- Наименование системы, которая записывает метамодели в аудит. -->
<constructor-arg>MODULE_ID</constructor-arg>
</bean>
<!-- Следующий bean отвечает за отправку данных в подсистему аудита. -->
<bean id="auditSender" class="com.sbt.security.ignite.integration.audit.restAuditSender">
<!-- URL, на который отправляются данные. -->
<constructor-arg>AUDIT_URL</constructor-arg>
</bean>
<bean id="auditEventListener" class="com.sbt.security.ignite.integration.auditrest.AuditEventListenerImpl">
<constructor-arg ref="auditMetamodelProvider"/>
<constructor-arg ref="auditSender"/>
</bean>
<util:list id="eventTypes" value-type="java.lang.Integer">
<!-- Коды событий, необходимые для отправки в аудит (см. пункт 3.4). -->
<value>2010</value>
<value>2011</value>
</util:list>
<util:map id="eventListeners"
map-class="java.util.HashMap"
key-type="org.apache.ignite.lang.IgnitePredicate"
value-type="java.lang.Integer[]">
<entry key-ref="auditEventListener" value-ref="eventTypes"/>
</util:map>
Добавление свойства org.apache.ignite.configuration.IgniteConfiguration в bean класса#
<property name="localEventListeners" ref="eventListeners"/>
Регистрация в подсистеме аудита событий, связанных с выполнением REST-запросов#
Добавление соответствующих beans в конфигурацию Platform V DataGrid#
<util:list id="cmdEventIgnoreList" value-type="java.lang.String">
<!-- Имена REST-команд, по которым запись в аудит вестись не будет. -->
<value>NOOP</value>
</util:list>
<bean id="restProcessorConfiguration" class="com.sbt.security.ignite.integration.audit.rest.RestProcessorPluginConfiguration">
<property name="commandEventIgnoreList" ref="cmdEventIgnoreList"/>
</bean>
<bean id="restProcessorPluginProvider" class="com.sbt.security.ignite.integration.audit.rest.RestProcessorPluginProvider">
<property name="configuration" ref="restProcessorConfiguration"/>
</bean>
Добавление свойства org.apache.ignite.configuration.IgniteConfiguration в bean класса#
<property name="pluginProviders">
<list>
<ref bean="restProcessorPluginProvider"/>
</list>
</property>
Механизм Change Data Capture (CDC) и межкластерная репликация#
Введение#
Change Data Capture (CDC) — это сценарий обработки данных, использующийся для асинхронного получения данных, измененных на локальном узле. При этом, получение записей происходит таким образом, чтобы затем с ними можно было совершать какие-либо действия.
CDC используется в следующих сценариях:
потоковая передача изменений в Хранилище;
обновление поисковых индексов;
аудит логов;
асинхронное взаимодействие со внешней системой (модерирование, запуск бизнес-процессов и прочее).
Именно на механизме CDC основывается процесс межкластерной репликации в Platform V Data Grid. CDC здесь обрабатывает сегменты WAL-журнала, а затем доставляет локальные изменения до потребителей. Информация о межкластерной репликации в Platform V Data Grid находится в разделе "Межкластерная репликация и CDC в Platform V Data Grid" ниже.
CDC запускается на всех серверных узлах кластера Platform V Data Grid в отдельной JVM, что исключает прямое влияние на основной функционал грида.
CDC в своей работе использует подход fail-fast. Это означает, что в случае неисправности CDC просто прекращает работу без автоматического восстановления.
Алгоритм работы механизма CDC#
Схема работы механизма:

При включенном механизме CDC серверный узел Platform V Data Grid создает в специальной директории
db/cdc/{consistent_id}(значение по умолчанию) жесткую ссылку на каждый сегмент архива WAL-журнала.Затем, приложение
ignite-cdc.shзапускается на отдельной JVM и обрабатывает сегменты WAL-журнала, которые были перенесены в архив совсем недавно.После обработки сегмента приложением, он удаляется. Само дисковое пространство освобождается при удалении обеих ссылок (в архиве WAL-журнала и в директории CDC).
Конфигурация#
Параметры конфигурации#
Параметры конфигурации узла Platform V Data Grid#
Имя |
Описание |
Значение по умолчанию |
|---|---|---|
|
Свойство включает CDC на серверном узле |
false |
|
Путь к директории CDC |
"db/wal/cdc" |
|
Таймаут для принудительной отправки сегмента WAL-журнала в архив (даже если обработка сегмента не завершена). |
-1 (disabled) |
Параметры конфигурации приложения CDC#
Имя |
Описание |
Значение по умолчанию |
|---|---|---|
|
Таймаут для ожидания блокировки. При запуске CDC устанавливает блокировку на директорию во избежание параллельной обработки этой директории параллельно работающим приложением |
1000 мс |
|
Время между последовательными проверками, в течение которого приложение находится в спящем режиме, если новые файлы отсутствуют |
1000 мс |
|
Свойство, определяющее, должны ли ключ и значение измененных записей быть предоставлены в бинарном формате |
true |
|
Реализация |
null |
|
Ряд интерфейсов, предназначенных для экспорта метрик CDC. Для получения более подробной информации, перейдите в раздел "Метрики" данного раздела |
null |
Описание CDC API#
org.apache.ignite.cdc.CdcEvent
Имя |
Описание |
|---|---|
|
Ключ измененной записи |
|
Значение измененной записи. Метод вернет |
|
ID кеша, на котором происходит изменение. Значение метода равно значению параметра |
|
Партиция измененной записи. Возвращает номер партиции. Platform V Data Grid разбивает набор данных на более мелкие части для их распределения по кластеру. Реализации |
|
Свойство, определяющее, на каком узле происходит операция — на основном или резервном. Возвращает |
|
|
org.apache.ignite.cdc.CdcConsumer
org.apache.ignite.cdc.CdcConsumer — это потребитель событий-изменений. Потребитель может быть реализован пользователем самостоятельно. Кроме того, в дистрибутиве поставляется две реализации CDC: Platform V Data Grid to Platform V Data Grid, Platform V Data Grid to Platform V Corax to Platform V Data Grid.
Имя |
Описание |
|---|---|
|
Вызывается один раз при запуске приложения CDC. Реестр |
|
Основной метод обработки изменений. Когда данный метод возвращает |
|
Вызывается один раз при остановке приложения CDC |
CacheEntryVersion
Имя |
Описание |
|---|---|
|
Версия записи |
|
ID кеша |
|
Порядок события записи. Два параллельных обновления одной и той же записи могут быть расположены в порядке, основанном на сравнении |
|
Порядок обновления. Значение — суммирующий счетчик. Область действия счетчика — узел. Возвращает порядок версии |
|
Возвращает порядок (номер) узла, в котором была назначена данная версия |
|
ID кластера — это значение, которое определяет наличие обновлений в случае, если пользователь хочет собрать и рассортировать обновления от нескольких кластером Platform V Data Grid. |
|
Возвращает версию топологии плюс число секунд со времени запуска первого узла в кластере |
|
Если источником обновления является "локальный" кластер, то возвращается |
Межкластерная репликация и CDC в Platform V Data Grid#
Механизм межкластерной репликации основан на механизме CDC, описанном выше.
Механизм репликации асинхронный.
В зависимости от архитектуры сети и требований безопасности доступны две схемы межкластерной репликации:
Репликация Platform V Data Grid to Platform V Data Grid.
Рекликация Platform V Data Grid to Kafka to Platform V Data Grid.
Для разрешения возможных конфликтов изменения данных при использовании Active-Active режима репликации необходимо настраивать модуль ConflictResolver для обеих схем межкластерной репликации. Подробное описание этого модуля содержится в следующем разделе.
Описание и настройка модуля conflictResolver#
В случае одновременного изменения данных на обоих кластерах (режим Active-Active), для корректного применения событий репликации необходимо настраивать модуль ConflictResolver. Этот модуль может быть разработан пользователем самостоятельно и подключен к Platform V Data Grid в виде плагина. В состав дистрибутива Platform V Data Grid включен плагин с CacheVersionConflictResolver, который позволяет разрешать конфликты на основании идентификатора кластера (clusterId), версии записи и на основании специального поля, по которому производится сравнение в случае применения конфликтующих событий репликации с разных кластеров. Данное поле должно задаваться бизнес-логикой пользователя и изменяться прикладным кодом в объектах, вставляемых в кеши, которые реплицируются посредством CDC.
Механизм работы модуля#
Алгоритм применения изменений основывается на трех принципах:
При отсутствии пересечений данные отправляются на запись.
При наличии конфликта в зависимости от настройки принимается решение о его разрешении в порядке убывания приоритета:
Если изменение локальное, т.е.
clusterIdсоответствует текущему кластеру, то оно приоритетнее любого удалённого.Если изменение удалённое, то предпочтение отдаётся изменению с большей версией (
CacheEntryVersion).На основании сравнения по пользовательскому полю (
conflictResolveField). Поле должно быть добавлено в пользовательские объекты, хранимые в реплицируемых кешах, его значение должно обновляться посредством пользовательского кода. Так как решение принимается на основании значения поля (применятся изменение с большим значением поля), поле должно реализовывать интерфейсСomparable.
При невозможности разрешить конфликт изменение отбрасывается, что приводит к потере консистентности между кластерами.
Примечание
Для обеспечения максимальной производительности и во избежание ситуации, описанной в пункте 3, рекомендуется избегать пересечений по ключам при проектировании, а при наличии пересечений обоснованно выбирать поля для сравнения изменений.
Пример настройки плагина CacheVersionConflictResolver#
<property name="pluginProviders">
<list>
<bean class="org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider">
<property name="clusterId" value="1"/>
<property name="caches">
<set>
<value>terminator</value>
</set>
</property>
<property name="conflictResolveField" value="modificationDate"/>
</bean>
</list>
</property>
Репликация Platform V Data Grid to Platform V Data Grid#
Данная схема репликации требует возможности организации прямого соединения между двумя кластерами Platform V Data Grid.
Примечание
На текущий момент данная схема позволяет обеспечить репликацию только между двумя кластерами. Для соединения более двух кластером можно воспользоваться схемой Platform V Data Grid to Platform V Corax to Plstform V Data grid.

Основным элементом схемы является приложение IgniteToIgniteCDCStreamer. Это приложение захватывает и передает изменения записей из WAL-журнала на сторонний узел. Приложение содержит клиентский узел Platform V Data Grid, подключающийся к узлу в кластере назначения (на схеме — Ignite#2).
Пример и описание конфигурации#
Примечание
Данная конфигурация предназначена для локального развертывания (на localhost). Настройки указаны для примера.
Конфигурация кластера-источника:
Имя файла: ignite-1984.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-1984-server" />
<property name="consistentId" value="ignite-1984-server" />
<property name="peerClassLoadingEnabled" value="true" />
<property name="localHost" value="127.0.0.1" />
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47500" />
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses"
value="127.0.0.1:47500..47510" />
</bean>
</property>
<property name="joinTimeout" value="10000" />
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true" />
</bean>
</property>
<property name="cdcEnabled" value="true" />
<!--Свойство cdcEnabled выше включает функционал CDC.-->
<property name="walForceArchiveTimeout" value="5000"/>
<!--При данном значении свойства walForceArchiveTimeout выше каждый сегмент WAL-журнала будет доступен для обработки через 5 секунд после перенесения его в архив-->
</bean>
</property>
<!--Ниже необходимо указать конфигурацию модуля conflictResolver-->
<property name="pluginProviders">
<bean class="org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider">
<property name="clusterId" value="1" />
<!--clusterId (выше) должен быть разным для каждого кластера-->
<!--Ниже необходимо сконфигурировать кeши, для которых будет срабатывать conflictResolver-->
<property name="caches">
<util:list>
<bean class="java.lang.String">
<constructor-arg type="String" value="terminator" />
<property name="conflictResolveField" value="modificationDate"/>
</bean>
</util:list>
</property>
</bean>
</property>
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="atomicityMode" value="ATOMIC"/>
<property name="name" value="terminator"/>
</bean>
</list>
</property>
</bean>
<!--Ниже указывается конфигурация механизма CDC. Утилита ignite-cdc.sh должна запускаться на всех серверных узлах кластера Platform V Data Grid, поэтому конфигурация CDC хранится в том же файле, в котором хранится конфигурация серверного узла.-->
<bean id="cdc.cfg" class="org.apache.ignite.cdc.CdcConfiguration">
<!--Конфигурация здесь отличается от конфигурации по умолчанию только свойством consumer (потребитель). Здесь оно имеет класс `IgniteToIgniteCdcStreamer`-->
<property name="consumer" ref="cdc.streamer" />
</bean>
<!--Внутри класса передается конфигурация клиентского узла, который будет подключаться к кластеру-получателю данных.-->
<bean id="cdc.streamer" class="org.apache.ignite.cdc.IgniteToIgniteCdcStreamer">
<constructor-arg index="0">
<!--0 здесь означает параметр destIgniteCfg — конфигурацию узла-получателя-->
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-2029-cdc-client" />
<property name="clientMode" value="true" />
<property name="peerClassLoadingEnabled" value="true" />
<property name="localHost" value="127.0.0.1" />
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47600" />
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<!--В свойстве ниже указываются адреса кластера-получателя-->
<property name="addresses"
value="127.0.0.1:47600..47610" />
</bean>
</property>
<property name="joinTimeout" value="10000" />
</bean>
</property>
</bean>
</constructor-arg>
<!--1 ниже обозначает свойство onlyPrimary — оно отвечает за то, какие партиции будут реплицироваться: либо только primary-партиции, либо все, чтобы в случае выхода primary-партиции из строя изменения поступили от backup-партиций-->
<constructor-arg index="1" value="false" />
<!--2 ниже означает параметр caches — список реплицируемых кешей.-->
<constructor-arg index="2">
<util:list>
<bean class="java.lang.String">
<constructor-arg type="String" value="terminator" />
</bean>
</util:list>
</constructor-arg>
<!--3 ниже обозначает параметр maxBatchSize — максимальный размер пакета изменений, которые необходимо применить-->
<constructor-arg index="3" value="256" />
</bean>
</beans>
Конфигурация кластера-получателя:
Примечание
Представленная ниже конфигурация актуальна для режима репликации Active-Active. При использовании режима Active-Passive на кластере-получателе
org.apache.ignite.cdc.CdcConfigurationне настраивается. Также при Active-Passive на обоих кластерах не потребуется настройкаconflictResolver. Для получения более подробной информации о режимах репликации, перейдите к разделу "Режимы репликации" ниже.
Имя файла: ignite-2029.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-2029" />
<property name="consistentId" value="ignite-2029" />
<property name="peerClassLoadingEnabled" value="true" />
<property name="localHost" value="127.0.0.1" />
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47600" />
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses"
value="127.0.0.1:47600..47610" />
</bean>
</property>
<property name="joinTimeout" value="10000" />
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true" />
</bean>
</property>
<property name="cdcEnabled" value="true" />
<property name="walForceArchiveTimeout" value="5000"/>
</bean>
</property>
<property name="pluginProviders">
<bean class="org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider">
<property name="clusterId" value="2" />
<property name="caches">
<util:list>
<bean class="java.lang.String">
<constructor-arg type="String" value="terminator" />
<property name="conflictResolveField" value="modificationDate"/>
</bean>
</util:list>
</property>
</bean>
</property>
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="atomicityMode" value="ATOMIC"/>
<property name="name" value="terminator"/>
</bean>
</list>
</property>
</bean>
<bean id="cdc.cfg" class="org.apache.ignite.cdc.CdcConfiguration">
<property name="consumer" ref="cdc.streamer" />
</bean>
<bean id="cdc.streamer" class="org.apache.ignite.cdc.IgniteToIgniteCdcStreamer">
<constructor-arg index="0">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-1984-cdc-client" />
<property name="clientMode" value="true" />
<property name="peerClassLoadingEnabled" value="true" />
<property name="localHost" value="127.0.0.1" />
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47500" />
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses"
value="127.0.0.1:47500..47510" />
</bean>
</property>
<property name="joinTimeout" value="10000" />
</bean>
</property>
</bean>
</constructor-arg>
<constructor-arg index="1" value="false" />
<constructor-arg index="2">
<util:list>
<bean class="java.lang.String">
<constructor-arg type="String" value="terminator" />
</bean>
</util:list>
</constructor-arg>
<constructor-arg index="3" value="256" />
</bean>
</beans>
После конфигурирования кластеров необходимо запустить утилиту ignite-cdc.sh на каждом серверном узле. Для запуска выполните следующие действия:
Выполните команду
ignite-cdc.sh ignite-1984.xml.Выполните команду
ignite-cdc.sh ignite-2029.xml.
Репликация Platform V Data Grid to Platform V Corax to Platform V Data Grid#
Вторая схема предполагает использование Platform V Corax для передачи изменений в другой кластер. Подойдут конфигурации стратегии доставки at least once и exactly once. Идемпотентность потребителя гарантируется модулем conflictResolver, гарантирующим что повторно отправленное изменение не будет применено дважды. Кроме того, в отличие от схемы Platform V Data Grid to Platform V Data Grid, данная схема позволяет производить репликацию данных между несколькими ЦОД (3 и более).

Модуль IgniteToKafkaCDCStreamer записывает захваченные изменения в топик Kafka. На принимающей стороне на кластере должен быть сконфигурирован CDC и включен модуль conflictResolver (для режима репликации Active-Active, в режиме Active-Passive conflictResolver не настраивается). Модуль KafkaToIgniteCDCStreamer на удалённом сервере выполняет функцию чтения изменений из топика и их применения.
Пример и описание конфигурации#
Примечание
В настоящем примере описывается конфигурация для локального развертывания (на localhost) и передачи данных между двумя ЦОД. Настройки указаны для примера.
Перед началом работы необходимо запустить Corax и Zookeeper. Затем создать топики:
bin/kafka-topics.sh --create --partitions 16 --replication-factor 1 --topic dc1_to_dc2 --bootstrap-server localhost:9092
bin/kafka-topics.sh --create --partitions 16 --replication-factor 1 --topic dc2_to_dc1 --bootstrap-server localhost:9092
Конфигурация кластера-источника для ЦОД-1:
Имя файла: ignite-dc1-kafka.xml
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
https://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-2029-server"/>
<property name="consistentId" value="ignite-2029-server"/>
<property name="peerClassLoadingEnabled" value="true"/>
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="terminator"/>
</bean>
</list>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47800"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses" value="127.0.0.1:47800"/>
</bean>
</property>
<property name="joinTimeout" value="10000"/>
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
<!--Свойство cdcEnabled (ниже) включает функционал CDC.-->
<property name="cdcEnabled" value="true"/>
<property name="walForceArchiveTimeout" value="5000"/>
<!--При данном значении свойства walForceArchiveTimeout (выше) каждый сегмент WAL-журнала будет доступен для обработки через 5 секунд после перенесения его в архив-->
</bean>
</property>
<property name="clientConnectorConfiguration" ref="clientConnectorConfiguration"/>
<property name="communicationSpi" ref="communicationSpi"/>
<property name="connectorConfiguration" ref="connectorConfiguration"/>
<!--Ниже необходимо указать конфигурацию модуля conflictResolver-->
<property name="pluginProviders">
<list>
<bean class="org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider">
<property name="clusterId" value="1"/>
<!--clusterId (выше) должен быть разным для каждого кластера-->
<property name="caches">
<!--Ниже необходимо сконфигурировать кеши, для которых будет срабатывать conflictResolver-->
<set>
<value>terminator</value>
</set>
</property>
<property name="conflictResolveField" value="modificationDate"/>
</bean>
</list>
</property>
</bean>
<!--Ниже указывается конфигурация сервера.-->
<bean id="clientConnectorConfiguration" class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="port" value="11000"/>
</bean>
<!--Ниже указывается конфигурация сервера.-->
<bean id="connectorConfiguration" class="org.apache.ignite.configuration.ConnectorConfiguration">
<property name="port" value="11300"/>
</bean>
<!--Ниже указывается конфигурация сервера.-->
<bean id="communicationSpi" class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="localPort" value="48800"/>
</bean>
<util:properties id="kafkaProperties" location="file:/config/path/kafka.properties"/>
<bean id="cdc.cfg" class="org.apache.ignite.cdc.CdcConfiguration">
<property name="consumer">
<!--Ниже указывается конфигурация механизма CDC. Утилита ignite-cdc.sh должна запускаться на всех серверных узлах кластера Platform V Data Grid, поэтому конфигурация CDC хранится в том же файле, в котором хранится конфигурация серверного узла.-->
<bean class="org.apache.ignite.cdc.kafka.IgniteToKafkaCdcStreamer">
<constructor-arg name="topic" value="dc1_to_dc2"/>
<constructor-arg name="kafkaParts" value="16"/>
<constructor-arg name="caches">
<list>
<value>terminator</value>
</list>
</constructor-arg>
<constructor-arg name="maxBatchSize" value="256"/>
<constructor-arg name="onlyPrimary" value="false"/>
<constructor-arg name="kafkaProps" ref="kafkaProperties"/>
</bean>
</property>
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
</bean>
</beans>
Конфигурация кластера-источника для ЦОД-2:
Имя файла: ignite-dc2-kafka.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="ignite-1984-server"/>
<property name="consistentId" value="ignite-1984-server"/>
<property name="peerClassLoadingEnabled" value="true"/>
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="terminator"/>
</bean>
</list>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47850"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses" value="127.0.0.1:47850"/>
</bean>
</property>
<property name="joinTimeout" value="10000"/>
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
<!--Свойство cdcEnabled включает функционал CDC.-->
<property name="cdcEnabled" value="true"/>
<property name="walForceArchiveTimeout" value="5000"/>
<!--При данном значении свойства walForceArchiveTimeout каждый сегмент WAL-журнала будет доступен для обработки через 5 секунд после перенесения его в архив-->
</bean>
</property>
<!--Ниже необходимо указать конфигурацию модуля conflictResolver-->
<property name="pluginProviders">
<list>
<bean class="org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider">
<!--clusterId должен быть разным для каждого кластера-->
<property name="clusterId" value="2"/>
<property name="caches">
<!--Здесь необходимо сконфигурировать кеши, для которых будет срабатывать conflictResolver-->
<set>
<value>terminator</value>
</set>
</property>
<property name="conflictResolveField" value="modificationDate"/>
</bean>
</list>
</property>
<property name="clientConnectorConfiguration" ref="clientConnectorConfiguration"/>
<property name="communicationSpi" ref="communicationSpi"/>
<property name="connectorConfiguration" ref="connectorConfiguration"/>
</bean>
<bean id="clientConnectorConfiguration" class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="port" value="11050"/>
</bean>
<bean id="connectorConfiguration" class="org.apache.ignite.configuration.ConnectorConfiguration">
<property name="port" value="11350"/>
</bean>
<bean id="communicationSpi" class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="localPort" value="48850"/>
</bean>
<util:properties id="kafkaProperties" location="file:/config/path/kafka.properties"/>
<bean id="cdc.cfg" class="org.apache.ignite.cdc.CdcConfiguration">
<property name="consumer">
<bean class="org.apache.ignite.cdc.kafka.IgniteToKafkaCdcStreamer">
<constructor-arg name="topic" value="dc2_to_dc1"/>
<constructor-arg name="kafkaParts" value="16"/>
<constructor-arg name="caches">
<list>
<value>terminator</value>
</list>
</constructor-arg>
<constructor-arg name="maxBatchSize" value="256"/>
<constructor-arg name="onlyPrimary" value="false"/>
<constructor-arg name="kafkaProps" ref="kafkaProperties"/>
</bean>
</property>
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
</bean>
</beans>
Конфигурация Platform V Corax:
Примечание
Настройки ниже являются содержимым файла
kafka.properties. В данном примере его содержимое одинаково для обоих ЦОД.
bootstrap.servers=127.0.0.1:9092
request.timeout.ms=10000
Конфигурация клиента Platform V Corax to Platform V Data Grid на ЦОД-1, вычитывающего изменения от ЦОД-2:
Примечание
Представленная ниже конфигурация актуальна для режима репликации Active-Active. При использовании режима Active-Passive на кластере-получателе
org.apache.ignite.cdc.CdcConfigurationиconflictResolverне настраивается. Для получения более подробной информации о режимах репликации, перейдите к разделу "Режимы репликации" ниже.
Имя файла: kafka2ignite_dc1.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="streamer.cfg" class="org.apache.ignite.cdc.kafka.KafkaToIgniteCdcStreamerConfiguration">
<property name="topic" value="dc2_to_dc1"/>
<property name="kafkaPartsFrom" value="0"/>
<property name="kafkaPartsTo" value="16"/>
<property name="threadCount" value="4"/>
<property name="caches">
<list>
<value>terminator</value>
</list>
</property>
</bean>
<util:properties id="kafkaProperties" location="file:/config/path/kafka2ignite_dc1.properties"/>
<bean id="ignIgniteConfiguration" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
<property name="discoverySpi" ref="ignTcpDiscoverySpi"/>
<property name="clientMode" value="true"/>
<property name="consistentId" value="kafka-to-ignite_dc2"/>
<property name="peerClassLoadingEnabled" value="true"/>
</bean>
<!--TcpDiscoverySpi-->
<bean id="ignTcpDiscoverySpi" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47801"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>127.0.0.1:47800..47809</value>
</list>
</property>
</bean>
</property>
</bean>
</beans>
Конфигурация KafkaConsumer для ЦОД-1:
Файл kafka2ignite_dc1.properties
bootstrap.servers=127.0.0.1:9092
request.timeout.ms=10000
group.id=kafka-to-ignite-dc1
auto.offset.reset=earliest
enable.auto.commit=false
Конфигурация клиента Platform V Corax to Platform V Data Grid на ЦОД-2, вычитывающего изменения от ЦОД-1:
Имя файла: kafka2ignite_dc2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="streamer.cfg" class="org.apache.ignite.cdc.kafka.KafkaToIgniteCdcStreamerConfiguration">
<property name="topic" value="dc1_to_dc2"/>
<property name="kafkaPartsFrom" value="0"/>
<property name="kafkaPartsTo" value="16"/>
<property name="threadCount" value="4"/>
<property name="caches">
<list>
<value>terminator</value>
</list>
</property>
</bean>
<util:properties id="kafkaProperties" location="file:/config/path/kafka2ignite_dc2.properties"/>
<bean id="ignIgniteConfiguration" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
</list>
</property>
<property name="discoverySpi" ref="ignTcpDiscoverySpi"/>
<property name="clientMode" value="true"/>
<property name="consistentId" value="kafka-to-ignite_dc2"/>
<property name="peerClassLoadingEnabled" value="true"/>
</bean>
<!--TcpDiscoverySpi-->
<bean id="ignTcpDiscoverySpi" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="47851"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>127.0.0.1:47850..47859</value>
</list>
</property>
</bean>
</property>
</bean>
</beans>
Конфигурация KafkaConsumer для ЦОД-2:
Файл kafka2ignite_dc2.properties
bootstrap.servers=127.0.0.1:9092
request.timeout.ms=10000
group.id=kafka-to-ignite-dc2
auto.offset.reset=earliest
enable.auto.commit=false
После конфигурирования кластеров необходимо запустить утилиту ignite-cdc.sh на каждом серверном узле, а на принимающем узле необходимо запустить утилиту kafka-to-ignite.sh. В ignite-cdc.sh необходимо передавать путь до XML-конфигурации серверных узлов, а в kafka-to-ignite.sh — путь до XML-конфигурации Platform V Corax to Platform V Data Grid:
Запуск Platform V Data Grid to Platform V Corax:
ignite-cdc.sh ignite-dc1-kafka.xmlignite-cdc.sh ignite-dc2-kafka.xmlЗапуск Platform V Corax to Platform V Data Grid:
kafka-to-ignite.sh kafka2ignite_dc1.xmlkafka-to-ignite.sh kafka2ignite_dc2.xml
Режимы репликации#
Существует два режима репликации:
Active-Active: в данном режиме прикладные приложения записывают данные в оба кластера. Возвращаясь к примеру, это означает, что можно реплицировать данные как из кластера ignite-1984 в кластер ignite-2029, так и наоборот;
Active-Passive: в данном режиме прикладные приложения записывают данные только в один кластер. Второй кластер в данном режиме неактивен и используется только в случае возникновения проблем или запросов на чтение (например, для составления отчетов).
Данные режимы работают для обеих представленных схем репликации.
Возможные проблемы в работе репликации и методы их устранения#
Чтобы
CdcStreamerне завершил работу с ошибкой, до запуска репликации необходимо:Активировать кластер-получатель.
Создать реплицируемый кеш на кластере-получателе.
Загрузить на кластер-получатель все необходимые binary-meta (вставка в кеш,
IgniteBinary#registerClass), т.к. автоматическая репликация binary-meta на текущий момент не реализована. В процессе работы все обновления binary-meta также необходимо делать на обоих кластерах.
Во избежание возникновения сбоев на серверных узлах
cdcWalPathиwalArchivePathдолжны быть расположены в одном разделе файловой системы. В противном случае, серверный узел завершит работу с ошибкой.Во избежание зацикливания сообщений при репликации в режиме Active-Active необходимо убедиться, что:
Для всех реплицируемых кешей настроен
conflictResolver.В
conflictResolverуказаны разныеclusterIdдля разных кластеров.Если conflictResolveField не указано в conflictResolver, то для уже имеющихся локально записей приходящие с удаленного кластера изменения будут вызывать конфликт и разрешаться не будут.
Утилиты#
Утилита для работы с кешами Cache Configurations Migration Tool#
Введение#
В дистрибутив Platform V Data Grid входит консольная утилита, предназначенная для миграции конфигураций кешей на кластер Platform V Data Grid — Cache Configurations Migration Tool. Данная утилита сравнивает текущую конфигурацию кешей кластера с новой, создает недостающие кеши, индекса и поля.
Утилита Cache Configurations Migration Tool поддерживает Spring XML-конфигурацию кешей. Также, утилита поддерживает следующие действия:
создание новых кешей;
создание новых таблиц;
создание полей в таблицах;
удаление полей в таблицах;
создание новых индексов.
Схема работы Cache Configurations Migration Tool#

При запуске скрипта migrate-cache-configurations.sh выполняются следующие действия:
Скрипт запускает Java-приложение, которое производит запуск клиентского узла Platform V Data Grid;
Клиентский узел запрашивает необходимые метаданные из кластера при помощи подзадачи (job).
После получения метаданных происходит вычисление необходимых изменений в конфигурациях и кешах.
Отправка подзадачи (job) в кластер. Эта подзадача применит изменения на кластере и вернет выполненное действие. Также, выполненное действие будет отображено в логе узла, на котором выполнялась подзадача.
Сборка утилиты Cache Configurations Migration Tool#
Для сборки утилиты выполните следующую команду:
mvn clean install -Dmaven.test.skip=true
Результатом сборки будет архив target/ignite-migrate-cache-configuration.zip.
Конфигурация утилиты Cache Configurations Migration Tool#
Разместите скрипт
mirgate-cache-configuration.shв директорииIGNITE_HOME/bin/migrate-cache-configuration.sh.Убедитесь в том, что в class path на всех узлах кластера присутствует директория
libs/ignite-migrate-cache-configuration.
Утилита использует IgniteLogger из конфигурации клиентского узла для логирования. Утилита логируется в отдельный файл как отдельное приложение migrate-cache-configuration.
Использование утилиты Cache Configurations Migration Tool#
Утилита Cache Configurations Migration Tool поддерживает следующие команды:
Команда |
Описание |
|---|---|
|
Запуск для просмотра изменений (в режиме "read-only") |
|
Запуск для миграции конфигурации кешей на кластер Platform V Data Grid |
|
Вывод справочной информации |
Параметры и ключи#
Имя |
Описание |
|---|---|
|
Путь до XML-конфигурации клиентского узла |
|
Путь до XML-конфигурации кешей |
|
Опциональный ключ для подтверждения миграции |
Вывод утилиты Cache Configurations Migrate Tool содержит следующую информацию:
конфигурация кластера до вызова утилиты;
вычисленные изменения;
произведенные действия;
конфигурация кластера после вызова утилиты.
Пример использования утилиты Cache Configurations Migration Tool#
Данный пример содержит конфигурацию серверного и клиентского узлов, а также конфигурацию кешей для миграции на другой кластер.
Конфигурация серверного узла
Имя файла: server-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Ignite Spring configuration file.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="server"/>
<property name="localHost" value="127.0.0.1"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>127.0.0.1:47500..47501</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="dataStorageConfiguration" >
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
<!--Ниже приводится пример кеш-конфигурации. Поддерживается изменение уже существующих кеш-конфигураций, даже если они статические. Ниже приводится пример такого кеша, запущенного на кластере. -->
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="test-static-cache"/>
<property name="queryEntities">
<list>
<bean class="org.apache.ignite.cache.QueryEntity">
<property name="keyType" value="java.lang.Long"/>
<property name="keyFieldName" value="id"/>
<property name="valueType" value="org.apache.ignite.migration.model.Person"/>
<property name="fields">
<map>
<entry key="id" value="java.lang.Long"/>
<entry key="orgId" value="java.lang.Integer"/>
</map>
</property>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
</beans>
Конфигурация клиентского узла
Конфигурация клиентского узла используется для подключения утилиты к кластеру.
Имя файла: client-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Ignite Spring configuration file.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="igniteInstanceName" value="client"/>
<property name="clientMode" value="true"/>
<property name="localHost" value="127.0.0.1"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>127.0.0.1:47500..47501</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
Конфигурация кешей
Имя файла: cache-configurations.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Ignite configuration.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Configure new cache. -->
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="new-cache1"/>
</bean>
<!-- Configure new cache. -->
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="new-cache2"/>
</bean>
<!-- Configure static cache. -->
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="test-static-cache"/>
<!-- Change query entities -->
<property name="queryEntities">
<list>
<bean class="org.apache.ignite.cache.QueryEntity">
<property name="keyType" value="java.lang.Long"/>
<property name="keyFieldName" value="id"/>
<property name="valueType" value="org.apache.ignite.migration.model.Person"/>
<property name="fields">
<map>
<entry key="id" value="java.lang.Long"/>
<entry key="name" value="java.lang.String"/>
</map>
</property>
<property name="indexes">
<list>
<!-- Single field (aka. column) index -->
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="name"/>
</bean>
<!-- Group index. -->
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg>
<list>
<value>id</value>
<value>name</value>
</list>
</constructor-arg>
<constructor-arg value="SORTED"/>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
</beans>
Запуск утилиты
Перед запуском утилиты активируйте кластер при помощи вызова утилиты
control.sh. На неактивном кластере утилита работать не будет и выдаст ошибку.Запустите утилиту при помощи следующей команды:
bin/migrate-cache-configuration.sh config/client-config.xml config/cache-configurations.xmlПримечание
Параметр
config/client-config.xmlнеобходим для подключения к кластеру. Параметрconfig/cache-configurations.xmlнеобходим для самой миграции.
После запуска утилиты лог Platform V Data Grid выводится в консоль, а лог утилиты записывается в отдельный файл. Логирование реализовано через log4j2:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
...
<property name="gridLogger">
<bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
<constructor-arg type="java.lang.String" value="config/ignite-log4j2.xml"/>
</bean>
</property>
...
</bean>
Логирование осуществляется через сконфигурированный IgniteLogger.
В логах утилиты записана информация о кластере до выполнения миграции (таблицы, колонки и индексы), изменения, обнаруженные утилитой, а также сообщение о том, что изменения не будут применены, поскольку при запуске не был указан ключ --migrate.
Пример вывода
...
Cluster info before migration:
...
Cache configurations changes:
New caches:
[cacheName=new-cache1]
[cacheName=new-cache2]
Table changes [cacheName=test-static-cache, tableName=test-static-cache]
Dropped fields:
[name=ORGID]
New fields:
[name=name, type=java.lang.String]
New indexes:
[indexName=PERSON_NAME_ASC_IDX]
[indexName=PERSON_ID_ASC_NAME_ASC_IDX]
...
New caches created [cacheNames=[new-cache1, new-cache2]]
Executed SQL [sql=ALTER TABLE PERSON DROP COLUMN IF EXISTS "ORGID"]
Executed SQL [sql=ALTER TABLE PERSON ADD COLUMN IF NOT EXISTS "NAME" VARCHAR]
Executed SQL [sql=CREATE INDEX IF NOT EXISTS PERSON_NAME_ASC_IDX ON PERSON ("name" ASC)]
Executed SQL [sql=CREATE INDEX IF NOT EXISTS PERSON_ID_ASC_NAME_ASC_IDX ON PERSON ("id" ASC, "name" ASC)]
...
Cluster info after migration:
...
События системного журнала#
Событие |
Запись |
Описание |
|---|---|---|
|
|
Успешное завершение обмена топологиями с узлом-координатором |
Added new node to topology |
|
В топологию добавлен новый узел |
Node left topology |
|
Узел покинул топологию |
Sending activate request |
|
Запрос на активацию кластера |
Sending deactivate request |
|
Запрос на деактивацию кластера |
Partition Map Exchange crd node |
|
PME. Журнал узла-координатора |
Starting rebalance routine |
|
Начало процесса ребалансировки |
Completed rebalance future |
|
|
>>>Transaction |
|
LRT |
deadlock |
|
Взаимная блокировка |
Cluster-wide snapshot operation started |
|
Запуск операции создания снимка |
Cluster-wide snapshot operation finished successfully |
|
Завершение операции создания снимка |
События мониторинга#
Введение#
Под мониторингом кластера Platform V DataGrid понимается мониторинг каждого узла топологии (как серверных, так и клиентских).
Основной задачей мониторинга является отслеживание критически важных атрибутов системы и оповещение администраторов при наличии проблем.
Помимо мониторинга кластера, рекомендуется производить мониторинг JVM и ОС, в рамках которых происходит запуск Platform V DataGrid.
Platform V DataGrid имеет несколько механизмов мониторинга:
Legacy;
New Metrics System;
System Views.
Legacy#
Под Legacy понимают подход публикации метрик, который использовался до версии Platform V DataGrid 2.8.
Метрики при данном подходе публикуются преимущественно через JMX.
При данном подходе разработчик сам определяет:
формат имени метрики;
тип метрики;
способ публикации.
Доступ к метрикам осуществляется через JMX.
Архитектура legacy-системы#
Через JMX доступно следующее дерево групп метрик:
Имя группы |
Описание |
|---|---|
|
Метрики PDS (Persistent Data Store) |
|
Свойства Timeout для SQL |
|
Метрики системных потоков |
|
Свойства Baseline |
|
Информация об подключенных тонких клиентах |
|
Метрики кеш-групп |
|
Метрики Data Region |
|
Дополнительные свойства PDS |
|
Информация об ключах безопасности |
|
Информация об идентификации кластера |
|
Метрики локального узла Platform V DataGrid и кластера Platform V DataGrid |
|
Метрики различных подсистем (SPI) Platform V DataGrid |
|
Метрики транзакций |
|
Настройки свойств транзакций (Timeout/Threshold) |
|
Метрики плагина безопасности |
|
Метрики кеша |
Описание метрик доступно в официальной документации Apache Ignite.
New Metrics System#
Начиная с версии Platform V DataGrid 2.8, доступен новый механизм сбора метрик — New Metrics System. Он заменяет собой старую систему сбора метрик — Legacy. Данный механизм доступен и в Platform V DataGrid.
У каждой метрики в системе есть название и значение, которое она возвращает. Это значение может быть представлено в виде переменных типов long, String или double, либо в виде Java-объекта. Некоторые метрики представлены в виде гистограмм.
Благодаря появлению New Metrics System, стало возможным экспортировать метрики, используя различные технологии, например:
JMX;
SQL View;
Prometheus (http);
OpenCensus.
Примечание:
В New Metrics System предусмотрена возможность создания пользовательских экспортеров при помощи интерфейса
MetricExporterSpi.
Архитектура New Metrics System#
В New Metrics System применены следующие решения относительно архитектуры:
В отличие от legacy-системы, метрики в New Metrics System — локальные. Они отражают состояние конкретного узла, на котором выполняется мониторинг.
Данный подход обусловлен тем, что при использовании глобальных метрик Platform V DataGrid занимался подсчетом метрики для всего кластера, и это было затратной операцией, так как кластер может состоять из множества узлов.
В New Metrics System используется иерархическая структура метрик.
Использование такой системы обусловлено наличием в Platform V DataGrid множества различных подсистем (SPI) на разных уровнях. Каждая из этих подсистем имеет определенный набор метрик. Среди этих подсистем есть те, которые обладают собственной иерархией, например, кеш. Метрики кеша собираются отдельно для каждого кеша, а не для всех сразу.
Был разработан стандарт названия метрик. Он основан на иерархической структуре метрик:
<register_name>.<metric_name>.Пример:
tx.LastCommitTimeгде:
tx– имя регистра;LastCommitTime– имя метрики.
В New Metrics System доступно следующее дерево групп метрик:
Имя регистра |
Описание |
|---|---|
|
Метрики кеша |
|
Метрики кеш-группы |
|
Метрики кластера |
|
Метрики Communication SPI |
|
Метрики вычислительных задач |
|
Метрики локального узла |
|
IO метрики PDS |
|
IO метрики Data Region |
|
IO метрики Communication SPI |
|
IO метрики кеш-группы |
|
Метрики PME |
|
Метрики snapshot |
|
Системные метрики |
|
Метрики системных потоков |
|
Метрики транзакций |
Описание метрик доступно в официальной документации Apache Ignite.
System Views#
Platform V DataGrid имеет ряд встроенных SQL-представлений, которые содержат информацию о процессах, протекающих внутри Platform V DataGrid. Доступ к метрикам осуществляется через SYS-схему.
Примечание:
Для доступа к данным, можно воспользоваться утилитой SQLLine:
./sqlline.sh -u jdbc:ignite:thin://127.0.0.1/SYS
Пример запроса данных по узлам:
`select * from NODES;`
В System Views доступно следующее дерево групп метрик:
Имя View |
Описание |
|---|---|
|
Информация по кешам |
|
Информация по кеш-группам |
|
Информация о вычислительных задачах ( |
|
Информация о вычислительных задачах( |
|
Информация о сервисах |
|
Информация о транзакциях |
|
Информация об узлах |
|
Информация об атрибутах узла |
|
Информация о Baseline (базовой топологии) |
|
Информация о подключенных тонких клиентах |
|
Информация о задачах в рамках striped thread pool (распределенного пула потоков) |
|
Информация о задачах в рамках data streamer stripped thread pool |
|
Информация о запущенных scan queries |
|
Информация о запущенных continuous queries |
|
Информация о запущенных SQL queries |
|
Информация об истории выполнения SQL queries |
|
Информация о схемах SQL |
|
Информация о метриках узла |
|
Информация о SQL tables |
|
Информация о SQL table columns |
|
Информация о SQL views |
|
Информация о SQL views columns |
|
Информация о SQL indexes |
|
Информация о PAGE LISTS кеш-групп |
|
Информация о PAGE LISTS в Data Region (области памяти) |
|
Информация о состоянии партиций |
|
Информация о существующих binary-типах |
|
Информация о metastorage |
Описание метрик доступно в официальной документации Apache Ignite.
Включение метрик#
Для доступа к метрикам по JMX включите возможность использования удаленного подключения к JVM:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1098
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Также рекомендуется отключать отображение CLASS LOADER ID в MBean-путях:
-DIGNITE_MBEAN_APPEND_CLASS_LOADER_ID=false`
Внимание
Если в рамках одной JVM происходит запуск нескольких экземпляров Platform V DataGrid, отключать отображение
CLASS LOADER IDне рекомендуется.
Включение кеш-метрик#
Для включения сбора метрик по кешам явно укажите опцию statisticsEnabled со значением true.
Примечание
Данную опцию требуется указать для каждого кеша, по которому требуется получать статистику:
XML
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="mycache"/>
<property name="statisticsEnabled" value="true"/>
</bean>
</list>
</property>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
CacheConfiguration cacheCfg = new CacheConfiguration("test-cache");
// Enable statistics for the cache.
cacheCfg.setStatisticsEnabled(true);
cfg.setCacheConfiguration(cacheCfg);
// Start the node.
Ignite ignite = Ignition.start(cfg);
Включение метрик для регионов данных#
Для включения сбора метрик по Data region явно укажите опцию metricsEnabled со значением true.
Примечание
Данную опцию нужно указать для каждого Data region, по которому требуется получать статистику.
Пример включения метрик для региона данных по умолчанию и одного дополнительного региона данных:
XML:
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="metricsEnabled" value="true"/>
</bean>
</property>
<property name="dataRegionConfigurations">
<list>
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="myDataRegion"/>
<property name="metricsEnabled" value="true"/>
<property name="persistenceEnabled" value="true"/>
</bean>
</list>
</property>
</bean>
</property>
</bean>
Java:
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
DataRegionConfiguration defaultRegion = new DataRegionConfiguration();
defaultRegion.setMetricsEnabled(true);
storageCfg.setDefaultDataRegionConfiguration(defaultRegion);
// Create a new data region.
DataRegionConfiguration regionCfg = new DataRegionConfiguration();
// Region name.
regionCfg.setName("myDataRegion");
// Enable metrics for this region.
regionCfg.setMetricsEnabled(true);
// Set the data region configuration.
storageCfg.setDataRegionConfigurations(regionCfg);
// Other properties
// Apply the new configuration.
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
Включение Persistence-метрик#
Метрики, относящиеся к Persistence, также требуют указания опции metricsEnabled со значением true в org.apache.ignite.configuration.DataStorageConfiguration:
XML:
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="metricsEnabled" value="true"/>
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.setMetricsEnabled(true);
// Apply the new configuration.
cfg.setDataStorageConfiguration(storageCfg);
Ignite ignite = Ignition.start(cfg);
Конфигурация экспортеров и включение метрик в New Metrics System#
Для включения возможности экспорта метрик укажите конкретный экспортер, который должна использовать подсистема метрик:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="metricExporterSpi">
<list>
<bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
<bean class="org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi"/>
<bean class="org.apache.ignite.spi.metric.log.LogExporterSpi"/>
<bean class="org.apache.ignite.spi.metric.opencensus.OpenCensusMetricExporterSpi"/>
</list>
</property>
</bean>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setMetricExporterSpi(new JmxMetricExporterSpi(), new SqlViewMetricExporterSpi());
Ignite ignite = Ignition.start(cfg);
Метрики в Platform V DataGrid#
Базовые задачи мониторинга в Platform V DataGrid включают в себя метрики. Для доступа к метрикам существует несколько подходов:
использование New Metrics System;
доступ к метрикам из кода;
использование System views.
Виды метрик в Platform V DataGrid#
Метрики в Platform V DataGrid бывают двух видов:
глобальные;
относящиеся к определенному узлу;
относящиеся к кешам.
Глобальные метрики#
Глобальные метрики предоставляют общую информацию о кластере, например, о количестве узлов и состоянии кластера.
Данная информация доступна на любом из узлов кластера.
Метрики, относящиеся к определенному узлу#
Данный вид метрик предоставляет информацию о конкретном узле кластера, на котором администратор запрашивает метрики. К примеру, такие метрики предоставляют информацию, касающуюся:
потребления памяти;
региона данных;
размера WAL-журнала;
размера очереди и т. д.
Метрики, относящиеся к кешам#
Метрики, относящиеся к кешам, могут быть как глобальными, так и относиться к определенному узлу.
Пример:
Общее количество записей - это глобальная метрика, и получить ее можно на любом узле.
Также можно получить количество записей в кеше определенного узла, но в этом случае метрика будет относиться к определенному узлу.
Включение метрик в Platform V DataGrid#
Внимание:
Сбор метрик – затратная операция, которая может привести к снижению производительности приложения. По этой причине некоторые метрики по умолчанию отключены.
Включение кеш-метрик#
Для включения кеш-метрик необходимо использовать любой из указанных ниже методов для каждого кеша, для которого необходим мониторинг:
XML
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="mycache"/>
<!-- Enable statistics for the cache. -->
<property name="statisticsEnabled" value="true"/>
</bean>
</list>
</property>
Java
IgniteConfiguration cfg = new IgniteConfiguration();
CacheConfiguration cacheCfg = new CacheConfiguration("test-cache");
// Enable statistics for the cache.
cacheCfg.setStatisticsEnabled(true);
cfg.setCacheConfiguration(cacheCfg);
// Start the node.
Ignite ignite = Ignition.start(cfg);
C#/.NET
var cfg = new IgniteConfiguration
{
CacheConfiguration = new[]
{
new CacheConfiguration("my-cache")
{
EnableStatistics = true
}
}
};
var ignite = Ignition.Start(cfg);
Для каждого кеша на узле Ignite создает два JMX Bean:
bean, содержащий информацию о кеше на определенном узле.
bean, содержащий общую информацию о кешах всех узлов кластера.
MBean с информацией о локальном кеше конкретного узла:
group=<Cache_Name>,name="org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl"
Mbean с общей информацией о кешах всех узлов кластера:
group=<Cache_Name>,name="org.apache.ignite.internal.processors.cache.CacheClusterMetricsMXBeanImpl"
Включение метрик для регионов данных#
Метрики регионов данных отражают информацию о регионах данных и включают в себя информацию об объеме памяти и размере хранилища в регионе.
Метрики региона данных можно включить двумя способами:
В конфигурации региона данных.
Пример включения метрик для одного региона данных по умолчанию и одного дополнительного региона данных:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg"> <property name="dataStorageConfiguration"> <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> <property name="defaultDataRegionConfiguration"> <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> <!-- enable mertrics for the default data region --> <property name="metricsEnabled" value="true"/> <!-- other properties --> </bean> </property> <property name="dataRegionConfigurations"> <list> <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> <!-- Custom region name. --> <property name="name" value="myDataRegion"/> <!-- Enable metrics for this data region --> <property name="metricsEnabled" value="true"/> <property name="persistenceEnabled" value="true"/> <!-- other properties --> </bean> </list> </property> </bean> </property> </bean>Java
IgniteConfiguration cfg = new IgniteConfiguration(); DataStorageConfiguration storageCfg = new DataStorageConfiguration(); DataRegionConfiguration defaultRegion = new DataRegionConfiguration(); defaultRegion.setMetricsEnabled(true); storageCfg.setDefaultDataRegionConfiguration(defaultRegion); // Create a new data region. DataRegionConfiguration regionCfg = new DataRegionConfiguration(); // Region name. regionCfg.setName("myDataRegion"); // Enable metrics for this region. regionCfg.setMetricsEnabled(true); // Set the data region configuration. storageCfg.setDataRegionConfigurations(regionCfg); // Other properties // Apply the new configuration. cfg.setDataStorageConfiguration(storageCfg); Ignite ignite = Ignition.start(cfg);C#/.NET
var cfg = new IgniteConfiguration { DataStorageConfiguration = new DataStorageConfiguration { DefaultDataRegionConfiguration = new DataRegionConfiguration { Name = DataStorageConfiguration.DefaultDataRegionName, MetricsEnabled = true }, DataRegionConfigurations = new[] { new DataRegionConfiguration { Name = "myDataRegion", MetricsEnabled = true } } } }; var ignite = Ignition.Start(cfg);используя JMX Beans.
org.apache:group=DataRegionMetrics,name=<Data Region Name>
Включение метрик, относящихся к Persistence#
Метрики, относящиеся к Persistence, также можно включить или отключить двумя способами:
В конфигурации хранилища:
XML
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg"> <property name="dataStorageConfiguration"> <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> <!-- persistent storage metrics --> <property name="metricsEnabled" value="true"/> <property name="defaultDataRegionConfiguration"> <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> <property name="persistenceEnabled" value="true"/> <!-- enable mertrics for the default data region --> <!--property name="metricsEnabled" value="true"/--> <!-- other properties --> </bean> </property> </bean> </property> </bean>Java
IgniteConfiguration cfg = new IgniteConfiguration(); DataStorageConfiguration storageCfg = new DataStorageConfiguration(); storageCfg.setMetricsEnabled(true); // Apply the new configuration. cfg.setDataStorageConfiguration(storageCfg); Ignite ignite = Ignition.start(cfg);C#/.NET
var cfg = new IgniteConfiguration { DataStorageConfiguration = new DataStorageConfiguration { MetricsEnabled = true } }; var ignite = Ignition.Start(cfg);Используя следующий MXBean (во время работы приложения):
org.apache:group="Persistent Store",name=DataStorageMetricsОперация
Описание
EnableMetricsВключение метрик постоянного хранилища данных
Метрики Legacy#
Использование оперативной памяти#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
float |
Средний размер данных в страницах в качестве множителя размера страницы. Когда режим Native Persistence включен, данная метрика применяется только для постоянного хранилища (страниц, хранящихся на диске) |
Узел |
|
long |
Число используемых в текущий момент страниц с данными. Когда режим Native Persistence включен, данная метрика применяется только для постоянного хранилища (страниц, хранящихся на диске) |
Узел |
|
long |
Число страниц, размещенных в ОЗУ |
Узел |
|
long |
Место, занятое в ОЗУ в байтах |
Узел |
Размер хранилища#
Когда включен режим Persistence, сохраняет все данные приложения на диске. Общее количество данных, которые каждый узел содержит на диске состоит из постоянного хранилища (данные приложений), файлы WAL-журнала, а также файлы архива WAL-журнала.
Размер постоянного хранилища#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Место, занятое на диске для всего хранилища данных в байтах. Когда режим Persistence отключен, метрика показывает общий размер занятого пространства в ОЗУ |
Узел |
|
long |
Общий размер WAL-файлов в байтах, включая файлы архива WAL-журнала |
Узел |
|
int |
Число сегментов WAL-журнала в архиве |
Узел |
Размер региона данных#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Место, занятое для конкретного региона данных в байтах. Когда режим Persistence отключен, метрика показывает общий размер занятого пространства в ОЗУ |
Узел |
|
float |
Среднее количество данных в страницах в качестве множителя размера страницы |
Узел |
|
long |
Число используемых в настоящий момент страниц с данными |
Узел |
|
long |
Число страниц с данными в конкретном регионе данных, содержащееся в ОЗУ |
Узел |
|
long |
Занятое место в ОЗУ в байтах |
Узел |
Операция |
Описание |
|---|---|
|
Включить сбор метрик для конкретного региона данных |
|
Отключить сбор метрик для конкретного региона данных |
Размер кеш-группы#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Место, занятое на конкретном узле для кеш-группы |
Узел |
Операции создания контрольных точек#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Число страниц в памяти, которые были изменены, но еще не были синхронизированы с диском. Таке страницы будут записаны на диск при создании следующей контрольной точки |
Узел |
|
long |
Время, за которое была создана последняя контрольная точка (в миллисекундах) |
Узел |
|
long |
Размер буфера контрольной точки |
Глобально |
Ребалансировка#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Показывает время начала ребалансировки локальных партиций для кеша. Если локальные партиции не участвуют в ребалансировке, данная метрика возвращает 0. Время возвращается в миллисекундах |
Узел |
|
long |
Ожидаеvое время завершения процесса ребалансировки |
Узел |
|
long |
Число ключей на узле, которые необходимо ребалансировать. Данную метрику можно отслеживать, чтобы понимать, когда заканчивается процесс ребалансировки |
Узел |
Топология#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Число серверных узлов в кластере |
Глобально |
|
long |
Число клиентских узлов в кластере |
Глобально |
|
long |
Число узлов, зарегистрированных в базовой топологии. При отключении узла, он остается зарегистрированным в базовой топологии и удалять его необходимо вручную |
Глобально |
|
long |
Число активных узлов в базовой топологии |
Глобально |
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
String |
ID текущего узла координатора |
Глобально |
|
String |
Подробная информация об узле-координаторе. Пример: |
кеши#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Общее количество записей в кеше по всем узлам в кластере |
Глобально |
|
long |
Число записей кеша, сохраненных на локальном узле |
Узел |
Транзакции#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
long |
Число ключей, заблокированных на узле |
Узел |
|
long |
Число транзакций, зафиксированных на узле |
Узел |
|
long |
Число транзакций, которые «откатились» |
Узел |
|
long |
Число транзакций, инициированных в узле |
Узел |
|
long |
Число открытых транзакций, которые имеют блокировку как минимум на один ключ на узле |
Узел |
Клиентские подключения#
Имя |
Тип |
Описание |
|---|---|---|
Connections |
java.util.List |
Список строк. Каждая строка содержит информацию о подключении: |
Операция |
Описание |
|---|---|
|
Отключить определенного клиента |
|
Отключить всех клиентов |
Очереди сообщений#
Когда очереди в пулах потоков растут, это означает, что узел не справляется с нагрузкой, либо что при обработке сообщений в очереди произошла ошибка. Постоянное увеличение очереди может привести к возникновению ошибки ООМ (OutOfMemoryError).
Очередь communication-сообщений#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
int |
Размер очереди исходящих communication-соообщений |
Узел |
Очередь discovery-сообщений#
Имя |
Тип |
Описание |
Покрытие |
|---|---|---|---|
|
int |
Размер очереди discovery-сообщений, ожидающих отправки на другие узлы |
Узел |
|
long |
Среднее время обработки сообщений |
Узел |
Метрики New Metrics System#
Система#
Имя реестра: sys
Имя |
Тип |
Описание |
|---|---|---|
|
double |
Нагрузка на процессор |
|
long |
|
|
long |
|
|
integer |
|
|
double |
Нагрузка на процессор при сборке мусора |
|
integer |
|
|
java.lang.Double |
|
|
integer |
|
|
long |
Общее количество выполненных задач |
|
long |
|
|
long |
|
|
long |
|
|
long |
|
|
long |
|
|
long |
|
|
long |
|
|
long |
|
|
long |
|
Кеши#
Имя реестра: cache.{cache_name}.{near}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Общее число вытеснений из кеша |
|
long |
Общее число |
|
long |
Число выполненных кешем |
|
long |
«Промах» (miss) – это невыполненный |
|
long |
Общее число |
|
long |
Общее число удалений из кеша |
|
long |
Общее число фиксаций транзакций |
|
long |
Общее число откатов транзакций |
|
long |
Размер локального кеша |
|
histogram |
Время фиксирования в наносекундах |
|
long |
Общее время фиксирования в наносекундах |
|
long |
Общее количество вызовов ключей, существующих в кеше |
|
long |
Общее время вызова кеша в наносекундах |
|
long |
Максимальное время, требуемое для исполнения вызовов кеша |
|
long |
Минимальное время, требуемое для исполнения вызовов кеша |
|
long |
Общее количество вызовов на ключи, которых нет в кеше |
|
long |
Общее количество вызовов кеша, обусловленных обновлением |
|
long |
Общее количество вызовов кеша, обусловленных отсутствием обновлений |
|
long |
Общее количество вызовов кеша, обусловленных удалениями |
|
long |
Число ключей, которые необходимо ребалансировать |
|
histogram |
Время |
|
long |
Общее количество |
|
long |
Число записей в heap-памяти |
|
long |
Число ключей с rebuilt-индексами |
|
boolean |
True if index build or rebuild is in progress |
|
long |
Число backup-записей в offheap-памяти |
|
long |
количество записей в offheap-памяти |
|
long |
Общее количество вытеснений из offheap-памяти |
|
long |
Общее количество |
|
long |
Число |
|
long |
Пропуск (miss) – |
|
long |
Число первичных записей в offheap-памяти |
|
long |
Общее число |
|
long |
Общее количество удалений из offheap-памяти |
|
histogram |
Время |
|
long |
Общее время |
|
long |
Число завершенных запросов |
|
long |
Число выполненных запросов |
|
long |
Число запросов, незавершенных из-за сбоя |
|
long |
Максимальное время исполнения запроса |
|
long |
Минимальное время исполнения запроса |
|
long |
Суммарное время запроса |
|
long |
Число партиций, которые необходимо очистить перед началом ребалансировки |
|
long |
Время начала ребалансировки |
|
long |
Число уже ребалансированных ключей |
|
long |
Расчетная скорость ребалансировки в байтах |
|
long |
Расчетная скорость ребалансировки в ключах |
|
histogram |
Время |
|
long |
общее время |
|
histogram |
Время отката в наносекундах |
|
long |
Общее время отката в наносекундах |
|
long |
Число уже ребалансированных байт |
Группы кешей#
Имя реестра: cacheGroups.{group_name}
Имя |
Тип |
Описание |
|---|---|---|
|
java.util.Map |
Карта назначения affinity-партиций |
|
java.util.ArrayList |
Список кешей |
|
long |
Число обработанных партиций, необходимое для завершения создания индексов или их создания ихи реорганизации |
|
integer |
Число партиций в состоянии |
|
integer |
Число партиций в состоянии |
|
long |
Число записей, которые осталось выместить в |
|
integer |
Число партиций в состоянии |
|
integer |
Максимальное число копий всех партиций конкретной кеш-группы |
|
integer |
Минимальное число копий всех для партиций конкретной кеш-группы |
|
java.util.Map |
Карта распределения партиций со статусом |
|
java.util.Map |
Карта распределения партиций со статусом |
|
java.util.ArrayList |
ID локальных партиций |
|
long |
Пространство в хранилище, настроенное на возможную низкую плотность данных в байтах |
|
long |
Пространство в хранилище, предназначенное для группы кешей в байтах |
|
long |
Общее количество страниц, размещенных в кеш-группе |
|
long |
Общий размер памяти, выделенной для кеш-группы в байтах |
|
long |
Число байт, которые осталось перешифровать |
|
boolean |
Имя, обозначающий окончание перешифрования |
Транзакции#
Имя реестра: tx
Имя |
Тип |
Описание |
|---|---|---|
|
java.util.HashMap |
Карта транзакций в статусе |
|
long |
Число ключей, заблокированных на узле |
|
long |
Число активных транзакций, для который узел является инициатором |
|
long |
Число активных транзакций как минимум с одной блокировкой по ключу |
|
long |
Время последнего коммита |
|
histogram |
Системное время транзакций на узле в виде гистограммы |
|
histogram |
Пользовательское время транзакций в виде гистограммы |
|
long |
Время последнего отката |
|
long |
Общее системное время транзакций на узле |
|
long |
Общее пользовательское время транзакций на узле |
|
integer |
Число фиксаций транзакцийNumber of transaction commits |
|
integer |
Число откатов транзакций |
Обмен картами партиций (Partition Map Exchange (PME))#
Имя реестра: pme
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Продолжительность заблокированных текущих операций PME на кешах в миллисекундах |
|
histogram |
Гистограмма продолжительности операций PME на кешах в миллисекундах |
|
long |
Продолжительность текущего PME в миллисекундах |
|
histogram |
Гистограмма продолжительности PME в миллисекундах |
Compute Jobs#
Имя реестра: compute.jobs
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Число активных джобов, исполняемых в настоящий момент |
|
long |
Число отмененных джобов, которые все еще запущены |
|
long |
Общее время исполнения джобов |
|
long |
Число завершенных джобов |
|
long |
Число джобов, отклоненных после самой свежей операции по устранению конфликтов |
|
long |
Число запущенных джобов |
|
long |
Число джобов в очереди на исполнение |
|
long |
Общее время, в течение которого джобы находились в очереди |
Пулы потоков#
Имя реестра: threadPools.{thread_pool_name}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Приблизительное число потоков, активно исполняющих задачи |
|
long |
Приблизительное общее количество выполненных задач |
|
long |
Базовое число потоков |
|
long |
Keep-alive-время потока. Это время, в течение которого потоки, которые выходят за рамки базового размера пула потоков могут находиться в состоянии ожидания до завершения их работы |
LargestPoolSize |
long |
Самое большое число потоков, одновременно присутствовавших в пуле |
|
long |
Максимально допустимое число потоков |
|
long |
Текущее число потоков в пуле |
|
long |
Текущий размер очереди на исполнение |
|
string |
Имя класса для текущего обработчика отклонения выполнения |
|
boolean |
Верно, если текущий исполнитель отключен |
|
long |
Примерное общее число задач на исполнение |
|
boolean |
Верно, если все задачи завершены с последующим отключением |
|
long |
Верно, если завершается, но еще не завершено |
|
string |
Имя класса для фабрики потоков используемой для создания новых потоков |
I/O группы кешей#
Имя реестра: io.statistics.cacheGroups.{group_name}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Количество логических операций |
|
long |
Число физических операций |
|
integer |
ID группыGroup id |
|
string |
Имя индекса |
|
long |
Время начала сбора статистики |
Сортированные индексы#
Имя реестра: io.statistics.sortedIndexes.{cache_name}.{index_name}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Число логических |
|
long |
Число логических |
|
long |
Число физических |
|
long |
Число физических |
|
string |
Имя индекса |
|
string |
Имя кеша |
|
long |
Время начала сбора статистики |
Хэш-индексы#
Имя реестра: io.statistics.hashIndexes.{cache_name}.{index_name}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Число логических |
|
long |
Число логических |
|
long |
Число физических |
|
long |
Число физических |
|
string |
Имя индекса |
|
string |
Имя кеша |
|
long |
Время начала сбора статистики |
Communication I/O#
Имя реестра: io.communication
Имя |
Тип |
Описание |
|---|---|---|
|
integer |
Число активных TCP-сессий |
|
integer |
Размер очереди исходящих сообщений |
|
integer |
Число отправленных сообщений |
|
long |
Число отправленных байт |
|
long |
Число полученных байт |
|
integer |
Число полученных сообщений |
|
integer |
Число TCP-сессий, отклоненных из-за ошибок SSL (метрика экспортируется только при включенном SSL) |
|
boolean |
Метрика показывает, включен ли SSL |
|
histogram |
Гистограмма продолжительности SSL handshake в миллисекундах (метрика экспортируется только при включенном SSL) |
Коннектор тонкого клиента Platform V DataGrid#
Имя реестра: client.connector
Имя |
Тип |
Описание |
|---|---|---|
|
integer |
Число активных TCP-сессий |
|
long |
Число полученных байт |
|
integer |
Число TCP-сессий, отклоненных из-за ошибок SSL (метрика экспортируется только при включенном SSL) |
|
integer |
Число TCP-сессий, отклоненных из-за таймаута handshake |
|
integer |
Число TCP-сессий, отклоненных из-за неудачной аутентификации |
|
integer |
Общее число отклоненных TCP-соединений |
|
integer |
Количество успешно установленных соединений для клиента |
|
integer |
Число активных сессий для клиента |
|
long |
Число отправленных байт |
|
boolean |
Метрика, показывающая, включен ли SSL |
|
histogram |
Гистограмма продолжительности SSL handshake в миллисекундах (метрика экспортируется только при включенном SSL) |
Коннектор REST-клиента Platform V DataGrid#
Имя реестра: rest.client
Имя |
Тип |
Описание |
|---|---|---|
|
integer |
Число активных TCP-сессий |
|
long |
Число полученных байт |
|
integer |
Число TCP-сессий, отклоненных из-за ошибок SSL (метрика экспортируется только при включенном SSL) |
|
long |
Число отправленных байт |
|
boolean |
Метрика, показывающая, включен ли SSL |
|
histogram |
Гистограмма продолжительности SSL handshake в миллисекундах (метрика экспортируется только при включенном SSL) |
Discovery I/O#
Имя реестра: io.discovery
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Временная отметка, после которой локальный узел стал узлом-координатором (метрика экспортируется только с серверных узлов) |
|
UUID |
ID координатора (метрика экспортируется только с серверных узлов) |
|
long |
Текущая версия топологии |
|
integer |
Число присоединившихся к топологии узлов |
|
integer |
Число покинувших топологию узлов |
|
integer |
Текущий размер очереди обработчика сообщений |
|
integer |
Число ожидающих зарегистрированных сообщений |
|
integer |
Число соединений TCP discovery, отклоненных из-за ошибок SSL |
|
boolean |
Метрика, показывающая, включен ли SSL |
|
integer |
Общее число обработанных сообщений |
|
integer |
Общее число полученных сообщений |
I/O региона данных#
Имя реестра: io.dataregion.{data_region_name}
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Соотношение распределения (страниц в секунду) в среднем по |
|
long |
Размер буфера контрольных точек в байтах |
|
long |
Число страниц в памяти, которые еще не были синхронизированы с постоянным хранилищем |
|
long |
Метрика, подсчитывающая число пустых страниц с данными для конкретного региона данных. Метрика подсчитывает только свободные страницы, которые могут быть использованы повторно (например, страницы, содержащиеся в хранилище страниц для повторного использования) |
|
long |
Уровень замещений (страниц в секунду) |
|
long |
Количество страниц, занятых большими записями, размер которых превышает размер страницы |
|
long |
Размер offheap-памяти в байтах |
|
long |
Размер использованной offheap-памяти в байтах |
|
double |
Процент использованного пространства |
|
long |
Число страниц, прочитанных после последнего перезапуска |
|
long |
Средний возраст страниц в памяти, по наступлении которого они замещаются страницами из постоянного хранилища (в миллисекундах) |
|
long |
Норма, при которой страницы в памяти замещаются страницами из постоянного хранилища (страниц в секунду) |
|
long |
Число страниц, замещенных после последнего перезапуска |
|
long |
Число страниц, записанных после последнего перезапуска |
|
long |
Число страниц, находящихся в физической оперативной памяти |
|
long |
Собирает общий размер страниц, загруденных в ОЗУ в байтах |
|
long |
Общее число размещенных страниц |
|
long |
Собирает общий размер памяти в регионе данных в байтах |
|
long |
Общее время зависания потоков в миллисекундах. Ignite тормозит потоки, создающие «грязные» страницы в ходе процесса создания контрольной точки |
|
long |
Собирает размер использованного пространства в буфере контрольной точки в байтах |
Хранилище данных#
Имя реестра: io.datastorage
Имя |
Тип |
Описание |
|---|---|---|
|
histogram |
Гистограмма действия по созданию контрольной точки до получения блокировки на запись в миллисекундах |
|
histogram |
Гистограмма продолжительности |
|
histogram |
Гистограмма продолжительности создания контрольной точки в миллисекундах |
|
histogram |
Гистограмма продолжительности работы слушателей исполнения контрольной точки в миллисекундах |
|
histogram |
Гистограмма длительности удержания блокировки контрольной точки в миллисекундах |
|
histogram |
Гистограмма длительности ожидания блокировки контрольной точки в миллисекундах |
|
histogram |
Гистограмма продолжительности маркирования контрольной точки в миллисекундах |
|
histogram |
Гистограмма продолжительности |
|
histogram |
Гистограмма продолжительности разделения и сортировки страниц контрольной точки в миллисекундах |
|
long |
Общая продолжительность контрольной точки |
|
histogram |
Гистограмма продолжительности |
|
histogram |
Гистограмма продолжительности записи в файл входного буфера в миллисекундах |
|
long |
Продолжительность действия контрольной точки до получения блокировки на запись в миллисекундах |
|
long |
Количество страниц, скопированных во временный буфер контрольной точки во время создания последней контрольной точки |
|
long |
Общее число страниц с данными, записанных во время создания последней контрольной точки |
|
long |
Продолжительность создания последней контрольной точки в миллисекундах |
|
long |
Продолжительность фазы синхронизации последней контрольной точки в миллисекундах |
|
long |
Продолжительность работы слушателей исполнения контрольной точки при блокировке на запись в миллисекундах |
|
long |
Продолжительность удержания блокировки контрольной точки в миллисекундах |
|
long |
Продолжительность ожидания блокировки контрольной точки в миллисекундах |
|
long |
Продолжительность маркировки контрольной точки в миллисекундах |
|
long |
Продолжительность |
|
long |
Общее число страниц, записанных во время создания последней контрольной точки |
|
long |
Продолжительность разделения и сортировки страниц последней контрольной точки в миллисекундах |
|
long |
Временная метка начала последней контрольной точки |
|
long |
Продолжительность |
|
long |
Продолжительность записи входного буфера в файл последней контрольной точки в миллисекундах |
|
long |
Пространство в хранилище, настроенное под возможную низкую плотность данных в байтах |
|
long |
Пространство в хранилизе в байтах |
|
integer |
Текущее число сегментов WAL-журнала в архиве WAL-журнала |
|
long |
Число повторов опроса буфера WAL-журнала за последний временной интервал |
|
long |
Общая продолжительность |
|
long |
Общее число операций |
|
long |
Время последней выгрузки сегмента WAL-журнала |
|
long |
Среднее число записей WAL-журнале в секунду, созданных за последний временной интервал |
|
long |
Общий размер пространства для хранения файлов WAL-журнала в байтах |
|
long |
Среднее скорость записи за последний временной интервал (байт/сек) |
Кластер#
Имя реестра: cluster
Имя |
Тип |
Описание |
|---|---|---|
|
integer |
Количество активных узлов в базовой топологии (baseline) |
|
boolean |
Верно, если кластер полностью ребалансирован. Если кластер неактивен, данная метрика всегда имеет значение |
|
integer |
Общее количество узлов в базовой топологии (baseline) |
|
integer |
Число клиентских узлов |
|
integer |
Количество серверных узлов |
Метрики System Views#
CACHES#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Имя кеша |
|
int |
ID кеша |
|
string |
Тип кеша |
|
string |
Режим работы кеша |
|
string |
Атомарный режим |
|
string |
Имя группы кешей |
|
string |
|
|
string |
|
|
int |
Число резервных копий |
|
int |
ID группы кешей |
|
string |
|
|
string |
|
|
string |
|
|
string |
Имя региона данных |
|
long |
Таймаут блокировки в миллисекундах |
|
string |
|
|
string |
|
|
string |
|
|
string |
|
|
boolean |
Атрибут, который обозначает сохранение значения в on-heap-кеше |
|
boolean |
Атрибут, который обозначает немедленное удаление записей из кеша |
|
boolean |
Верно, если данные в кеше зашифрованы |
|
boolean |
Верно, если события для данного кеша отключены |
|
boolean |
Верно, если значения станут недействительными при фиксации в near-кеше |
|
boolean |
Верно, если значение загружается из хранилища и не находится в кеше |
|
boolean |
|
|
boolean |
Верно, если кеш включен |
|
boolean |
Верно, если heap-кеш включен |
|
boolean |
Верно, если чтение должно производиться из резервного узла |
|
boolean |
Верно, если включено чтение из стороннего хранилища |
|
boolean |
Если верно, то все имена SQL-таблиц и полей будут экранироваться двойными кавычками |
|
boolean |
Верно, когда включен SQL on-heap-кеш. Когда он включен, Ignite будет кешировать SQL-строки по мере доступа к ним системы обработки запросов. Строки обнуляются и вытесняются из кеша при изменении или вытеснении из кеша соответствующей записи |
|
boolean |
Верно, если включена статистика по кешам |
|
boolean |
Атрибут, который указывает на то, что реализация |
|
boolean |
Атрибут, указывающий на то, что Ignite должен использовать для хранилища кешей стратегию write-behind |
|
boolean |
Верно, если включена запись в стороннее хранилище |
|
int |
Максимальное число разрешенных параллельных асинхронных операций. Если возвращаемое значение "0", то число таких операций неограниченно |
|
int |
Максимальное число сохраняемых итераторов запроса. Итераторы сохраняются для поддержки разбиения запроса на страницы, когда каждая страница данных отправляется на узел пользователя только при необходимости |
|
string |
|
|
int |
Изначальный размер near cache, который будет использоваться для создания черновика внутренней хэш-таблицы после запуска |
|
string |
|
|
string |
|
|
int |
Размер подробных метрик запросов, которые сохраняются в памяти для целей мониторинга. Если значение "0", статистика собираться не будет |
|
int |
Указание на систему исполнения запросов при необходимой степени параллелизма внутри одного узла |
|
int |
Размер данных, загружаемых внутри одного сообщения ребалансировки (в байтах) |
REBALANCE_BATCHES_PREFETCH_COUNT |
int |
Число пакетов, созданных питающим узлом при начале процесса ребалансировки |
|
long |
Задержка ребалансировки в миллисекундах |
|
string |
Режим ребалансировки |
|
int |
Порядок ребалансировки |
|
long |
Время ожидания между сообщениями ребалансировки для избежания перегрузки процессора или сети |
|
long |
Таймаут ребалансировки в миллисекундах |
|
int |
Размер подстановки индекса в байтах |
|
int |
Максимальный размер SQL on-heap-кеша. изеряется в количестве строк. При достижении максимального числа строк самые старые из них вымещаются из кеша |
|
string |
Имя схемы |
|
string |
|
|
int |
Максимальный размер пакета для write-behind-операций хранилища кешей |
|
boolean |
Объединяющий атрибут записи для write-behind-операций хранилища кешей. Операции хранения ( |
WRITE_BEHIND_FLUSH_FREQUENCY |
long |
Частота, с которой write-behind-кеш перемещается в хранилище кешей (в миллисекундах) |
|
int |
Максимальный размер write-behind-кеша. Если размер кеша превышает значение этой метрики, все содержимое кеша перемещается в хранилище кешей, а кеш записи очищается |
|
int |
Количество потоков, которые будут производить перемещение кеша |
|
string |
Получает данные о режиме синхронизации write-операций |
CACHE_GROUPS#
Имя |
Тип данных |
Описание |
|---|---|---|
|
VARCHAR |
Строковая репрезентация (возвращаемая методом |
|
VARCHAR |
Атомарный режим работы кеш-группы |
|
INT |
Число резервных партиций, сконфигурированных для группы кешей |
|
INT |
Количество кешей в группе |
|
INT |
ID группы кешей |
|
VARCHAR |
Имя кеш-группы |
|
VARCHAR |
Режим работы кеша |
|
VARCHAR |
Имя региона данных |
|
BOOLEAN |
Если конкретная группа кешей содержит больше одного кеша |
|
VARCHAR |
Строковая репрезентация (возвращаемая методом |
|
VARCHAR |
Политика потери партиций |
|
INT |
Число партиций |
|
LONG |
Задержка ребалансировки |
|
VARCHAR |
Режим ребалансировки |
|
INT |
Порядок ребалансировки |
|
VARCHAR |
Строковая репрезентация (возвращаемая методом |
TASKS#
Имя |
Тип |
Описание |
|---|---|---|
|
UUID |
ID задачи |
|
UUID |
ID сессии |
|
UUID |
ID узла, происходящий от задачи |
|
string |
Имя задачи |
|
string |
Имя класса задачи |
|
int |
ID партиции кеша |
|
string |
Имя кеша |
|
long |
Время начала |
|
long |
Время окончания |
|
string |
Имя пула потоков, исполняющего задачу |
|
boolean |
Верно, если задача является внутренней |
|
string |
Версия пользователя задачи |
JOBS#
Данные метрики отражают список compute jobs, начатых узлом как часть compute task. Для просмотра статуса compute task необходимо обратиться к метрикам TASKS.
Имя |
Тип |
Описание |
|---|---|---|
|
UUID |
ID подзадачи |
|
UUID |
ID сессии подзадачи. Для подзадач, принадлежащих к определенной задаче |
|
UUID |
ID узла, который начал подзадачу |
|
string |
Имя задачи |
|
string |
Имя класса задачи |
|
string |
ID одного или нескольких кешей, если подзадача исполняется посредством одного из методов |
AFFINITY_PARTITION_ID |
int |
ID одной или нескольких партиций, если подзадача исполняется посредством одного из методов |
|
long |
Время создания подзадачи |
|
long |
Время начала подзадачи |
|
long |
Время окончания подзадачи |
|
string |
Имя исполнителя задачи |
|
boolean |
Верно, если подзадача завершается |
|
boolean |
Верно, если подзадача является внутренней |
|
boolean |
Верно, если подзадача началась |
|
boolean |
Верно, если время на выполнение подзадачи вышло до ее завершения |
|
string |
Возможные значения: |
SERVICES#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Значение affinity-ключа для сервиса |
|
string |
Имя кеша |
|
int |
Максимальное количество экземпляров сервиса на один узел |
|
string |
Имя сервиса |
|
string |
|
|
UUID |
ID начального узла |
|
string |
Имя класса сервиса |
|
UUID |
ID сервиса |
|
boolean |
Верно, если сервис сконфигурирован статически |
|
int |
Общее число экземпляров сервиса |
NODES#
Имя |
Тип данных |
Описание |
|---|---|---|
|
BOOLEAN |
Показывает, локальный ли узел или удаленный |
|
VARCHAR |
Отображает адреса узла |
|
VARCHAR |
Согласованный идентификатор (consistent ID) узла |
|
VARCHAR |
Имена хостов узла |
|
BOOLEAN |
Показывает, является ли узел клиентом |
|
BOOLEAN |
Показывает, является ли узел демоном |
|
UUID |
ID узла |
|
INT |
Порядок расположения узлов в топологии |
|
VARCHAR |
Версия узла |
NODE_ATTRIBUTES#
Имя |
Тип данных |
Описание |
|---|---|---|
|
UUID |
ID узла |
|
VARCHAR |
Имя аттрибута |
BASELINE_NODES#
Имя |
Тип данных |
Описание |
|---|---|---|
|
VARCHAR |
Согласованный идентификатор (consistent ID) узла |
|
BOOLEAN |
Показывает доступность и активность узла |
CLIENT_CONNECTIONS#
Имя |
Тип |
Описание |
|---|---|---|
|
long |
ID соединения |
|
IP |
IP-адрес локального узла |
|
IP |
IP-адрес удаленного узла |
|
string |
Тип соединения |
|
string |
Имя пользователя |
|
string |
Версия протокола |
STRIPED_POOL_QUEUE#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
|
|
int |
Индекс части потока |
|
string |
Имя класса задачи |
|
string |
Имя части потока |
DATASTREAM_THREADPOOL_QUEUE#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
|
|
int |
Индекс части потока |
|
string |
Имя класса задачи |
|
string |
Имя части потока |
SCAN_QUERIES#
Имя |
Тип |
Описание |
|---|---|---|
|
int |
ID группы кешей |
|
string |
Имя группы кешей |
|
int |
ID кеша |
|
string |
Имя кеша |
|
boolean |
Верно, если запрос отменен |
|
long |
Продолжительность запроса |
|
string |
|
|
boolean |
Верно при включенном |
|
boolean |
Верно, если запрос только локальный |
|
UUID |
ID узла, инициировавшего запрос |
|
int |
Размер страницы |
|
int |
ID партиции запроса |
|
long |
ID запроса |
|
long |
Время начала запроса |
|
UUID |
ID пользователя, инициировавшего запрос |
|
string |
Имя класса задачи |
|
string |
Версия топологии |
|
string |
|
CONTINUOUS_QUERIES#
Имя |
Тип |
Описание |
|---|---|---|
|
boolean |
Верно, если запрос должен быть прекращен при отключении узла или выходе из топологии узла, инициировавшего запрос |
|
int |
Размер буфера пакета события |
|
string |
Имя кеша |
|
boolean |
Верно, если запрос инициируется при запуске соответствующего кеша |
|
long |
Интервал уведомлений |
|
boolean |
Верно, если используется для подписки на удаленные события |
|
boolean |
Верно, если используется для подписки на сообщения |
|
boolean |
Верно, если пользователь инициировал продолжительный запрос (continuous query) |
|
boolean |
Верно при включенном |
|
long |
Последний раз, когда пакет события отсылается на узел, инициировавший запрос |
|
string |
|
|
string |
|
|
UUID |
ID узла, инициировавшего запрос |
|
boolean |
Верно, если слушателя необходимо уведомить о существующих записях |
|
boolean |
Верно, если старое значение записи должно быть включено в событие |
|
string |
|
|
string |
|
|
UUID |
ID запроса |
|
string |
Имя топика запроса |
SQL_QUERIES#
Имя |
Тип |
Описание |
|---|---|---|
|
long |
Продолжительность исполнения запроса |
|
boolean |
Верно, если запрос только локальный |
|
UUID |
Узел, инициировавший запрос |
|
UUID |
ID запроса |
|
string |
Имя запроса |
|
string |
Текст заапроса |
|
date |
Время начала запроса |
SQL_QUERIES_HISTORY#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Имя схемы |
|
string |
Текст запроса |
|
boolean |
Верно, если запрос только локальный |
|
long |
Количество исполнений запроса |
|
long |
Число сбоев |
|
long |
Минимальная продолжительность исполнения запроса |
|
long |
Максимальная продолжительность исполнения запроса |
|
date |
Дата последнего исполнения запроса |
SCHEMAS#
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Имя схемы |
|
boolean |
Если верно, то схема определена заранее |
NODE_METRICS#
Имя |
Тип данных |
Описание |
|---|---|---|
|
UUID |
ID узла |
|
TIMESTAMP |
Последнее обновление метрик |
|
INT |
Максимальное число одновременно выполняющихся подзадач за все время работы узла |
|
INT |
Количество активных в настоящий момент активных подзадач на узле |
|
FLOAT |
Среднее число активных подзадач, параллельно исполняющихся на узле |
|
INT |
Максимальное количество подзадач, находящихся в ожидании, когда-либо существовали на конкретном узле в один момент времени |
|
INT |
Количество подзадач в очереди на выполнение на данный момент |
|
FLOAT |
Среднее число подзадач, находившихся в очереди за все время работы узла |
|
INT |
Максимальное количество подзадач во время выполнения отдельной операции по разрешению конфликтов |
|
INT |
Количество подзадач, которые были отклонены в результате выполнения последней операции по разрешению конфликтов |
|
FLOAT |
Среднее количество подзадач, отклоненных текущим узлом в результате выполнения операций по разрешению конфликтов |
|
INT |
Общее количество подзадач, отклоненных текущим узлом в результате выполнения операций по разрешению конфликтов с момента запуска узла |
|
INT |
Максимальное количество отмененных подзадач, которые когда-либо выполнявшихся на узле параллельно |
|
INT |
Количество отмененных, но все еще запущенных подзадач |
|
FLOAT |
Среднее количество отмененных подзадач, когда-либо выполнявшихся на текущем узле параллельно |
|
INT |
Общее количество подзадач, отмененных с момента запуска узла |
|
TIME |
Максимальное время, в течение которого подзадача находилась в очереди на исполнение |
|
TIME |
Самое продолжительное время ожидания среди подзадач, в данный момент находящихся в очереди на исполнение |
|
TIME |
Среднее время, в течение которого подзадачи находятся в очереди на исполнение |
|
TIME |
Максимальное время исполнения подзадачи |
|
TIME |
Самое продолжительное время, в течение которого исполняется текущая подзадача |
|
TIME |
Среднее время исполнения подзадачи на текущем узле |
|
TIME |
Общее время исполнения завершенных подзадач на текущем узле с момента его запуска |
|
INT |
Общее число подзадач, обработанных узлом с момента его запуска |
|
INT |
Общее количество задач, обработанных узлом |
|
TIME |
Общее время, в течение которого узел занимался выполнением задач |
|
TIME |
Общее время простоя текущего узла (без выполнения подзадач) |
|
TIME |
Время, в течение которого узел простаивал после выполнения последней подзадачи |
|
FLOAT |
Процентное соотношение времени выполнения подзадачи ко времени простоя |
|
FLOAT |
Процентное соотношение времени простоя ко времени выполнения задачи |
|
INT |
Количество ядер процессора, доступных для JVM |
|
DOUBLE |
Процентное соотношение использования процессора, выраженное фракцией в диапазоне [0, 1] |
|
DOUBLE |
Среднее соотношение использование процессора, выраженное фракцией в диапазоне [0, 1] |
|
DOUBLE |
Среднее время, потраченное на сборку мусора с момента последнего обновления метрик. По умолчанию, метрики обновляются каждые 2 секунды |
|
LONG |
Размер изначально запрашиваемой JVM у ОС heap-памяти для управления памятью. Если изначальный объем памяти не определен, значение метрики будет равно -1 |
|
LONG |
Текущий размер heap-памяти, используемый для размещения объекта. Heap состоит из одного или нескольких пулов памяти. Это значение является суммой значений использованной heap-памяти во всех пулах heap-памяти |
|
LONG |
Количество heap-памяти в байтах, выделенное для использования JVM. Heap состоит из одного или нескольких пулов памяти. Это значение является суммой значений выделенной heap-памяти во всех пулах heap-памяти |
|
LONG |
Максимальный объем heap-памяти в байтах, используемый для управления памятью. Метрика отображает -1, если максимальный объем памяти не задан |
|
LONG |
Общий объем heap-памяти в байтах. Если общий объем памяти не задан, метрика отображает -1 |
|
LONG |
Объем изначально запрашиваемой JVM у ОС off-heap-памяти в байтах для управления памятью. Метрика отображает -1, если изначальный объем памяти не задан |
|
LONG |
Текущий объем off-heap-памяти, используемый JVM. Off-heap-память состоит из одного или нескольких пулов памяти. Это значение является суммой значений использованной off-heap-памяти всех пулах памяти |
|
LONG |
Объем off-heap-памяти, выделенной JVM для использования. Off-heap-память состоит из одного или нескольких пулов памяти. Это значение является суммой значений выделенного объема off-heap-памяти всех пулах памяти |
NONHEAP_MEMORY_MAX |
LONG |
Возвращает максимальный объем off-heap-памяти, которая может использоваться для управления памятью в байтах. Метрика отображает -1, если максимальный объем памяти не задан |
|
LONG |
Общее количество off-heap-памяти, которая может быть использована для управления памятью. Метрика отображает -1, если общий объем памяти не задан |
|
TIME |
Время работы JVM |
|
TIMESTAMP |
Время запуска JVM |
|
TIMESTAMP |
Время запуска узла |
|
LONG |
IMDG присваивает всем кеш-операциям инкрементные версии. Эта метрика отображает последнюю версию данных на узле |
|
INT |
Число «живых» потоков, включая «daemon» и «non-daemon»-потоки |
|
INT |
Максимальное количество «живых» потоков с момента запуска JVM или сброса пиковой нагрузки |
|
LONG |
Общее количество потоков, запущенных с момента запуска JVM |
|
INT |
Количество «живых» «daemon»-потоков |
|
INT |
Число communication-сообщений, отправленных узлом |
|
LONG |
Число отправленных байт |
|
INT |
Число полученных узлом communication-сообщений |
|
LONG |
Число полученных байт |
|
INT |
Размер очереди исходящих сообщений |
TABLES#
Данные метрики содержат информацию об SQL-таблицах.
Имя |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя колонки ключа affinity |
|
int |
ID кеша для таблицы |
|
string |
Имя кеша для таблицы |
|
boolean |
Верно, если производится перестройка индекса для конкретной таблицы |
|
string |
Алиас для ключа |
|
string |
Имя типа ключа |
|
string |
Имя схемы таблицы |
|
string |
Имя таблицы |
|
string |
Алиас значения |
|
string |
Имя типа значения |
TABLE_COLUMNS#
Имя |
Тип |
Описание |
|---|---|---|
|
boolean |
Верно, если это колонка ключа affinity |
|
boolean |
Верно, если увеличивается автоматически |
|
string |
Имя колонки |
|
string |
Значение колонки по умолчанию |
|
boolean |
Верно, если допустимо пустое значение |
|
boolean |
Верно, если первичный ключ (primary key) |
|
int |
Точность колонки |
|
int |
Масштаб колонки |
|
string |
Имя схемы |
|
string |
Имя таблицы |
|
string |
Тип таблицы |
VIEWS#
Данная метрика отображает информацию об SQL Views.
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Имя |
|
string |
Схема |
|
string |
Описание |
VIEWS_COLUMNS#
Данная метрика отображает информацию о колонках SQL Views.
Имя |
Тип |
Описание |
|---|---|---|
|
string |
Имя колонки |
|
string |
Значение колонки по умолчанию |
|
boolean |
Верно, если значение колонки может быть пустым |
|
int |
Точность колонки |
|
int |
Масштаб колонки |
|
string |
Имя схемы |
|
string |
Тип колонки |
|
string |
Имя view |
INDEXES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя индекса |
|
string |
Тип индекса |
|
string |
Колонки, включенные в индекс |
|
string |
Имя схемы |
|
string |
Имя таблицы |
|
string |
Имя кеша |
|
int |
ID кеша |
|
int |
Объем подстановки в байтах |
|
boolean |
Верно, если это индекс первичного ключа (primary key) |
|
boolean |
Верно, если индекс уникален |
PAGE_LISTS#
Список страниц – это структура данных, использующаяся для хранения частично свободных страниц с данными (свободные списки) и полностью свободных выделенных страниц (списки страниц для повторного использования). Целью таких списков является быстрый поиск и локализация страницы с достаточным количеством места в ней для сохранения определенной записи, а также определение того, что такой страницы не существует и необходимо разместить в кеше новую. Списки страниц организуются в пакеты. Каждый такой пакет ссылается на страницы с примерно тем же объемом свободного места.
При включенном режиме persistence списки страниц создаются для каждой партиции каждой группы кешей. Для просмотра таких списков необходимо использовать метрику CACHE_GROUP_PAGE_LISTS.
При отключенном режиме persistence списки страниц создаются для каждого региона данных. В данном случае, необходимо использовать метрику DATA_REGION_PAGE_LISTS.
Эти метрики содержат в себе информацию о каждом из пакетов списка страниц. Это необходимо понимать, чтобы иметь представление о том, какой объем данных можно внести в кеш без размещения новых страниц. Кроме того, это помогает определить искажения в использовании списков страниц.
CACHE_GROUP_PAGE_LISTS#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
int |
ID группы кэшей |
|
int |
ID партиции |
|
string |
Имя списка страниц |
|
int |
Номер контейнера |
|
long |
Число страниц в контейнере |
|
int |
Число дорожек, используемых контейнером. Дорожки используются для предотвращения возникновения конфликтов. |
|
int |
Число страниц в on-heap-кэше списка страниц конкретного контейнера. |
DATA_REGION_PAGE_LISTS#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя списка страниц |
|
int |
Номер контейнера |
|
long |
Число страниц в контейнере |
|
int |
Число дорожек, используемых контейнером. Дорожки используются для предотвращения возникновения конфликтов. |
|
int |
Число страниц в on-heap-кэше списка страниц конкретного контейнера. |
PARTITION_STATES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
int |
ID группы кэшей |
|
int |
ID партиции |
|
UUID |
ID узла |
|
string |
Состояние (статус) партиций. Партиция может иметь следующие состояния: |
|
boolean |
Метка основной партиции |
BINARY_METADATA#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
int |
ID типа |
|
string |
Имя типа |
|
string |
Имя поля affinity-ключа |
|
int |
Число полей |
|
string |
Записанные поля объектов |
|
string |
ID схем, зарегистрированные для конкретного типа |
|
boolean |
Метрика показывает, является ли тип перечисляемым (enum) |
METASTORAGE#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя |
|
string |
Строковое или простое бинарное (в случае невозможности десериализации данных)представление элемента |
DS_QUEUES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
UUID |
ID |
|
string |
Имя структуры данных |
|
int |
Пропускная способность |
|
int |
Текущий размер |
|
boolean |
|
|
boolean |
|
|
string |
Имя группы кэшей для сохранения структуры данных |
|
int |
ID группы кэщей для сохранения структуры данных |
|
boolean |
|
DS_SETS#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
UUID |
ID |
|
string |
Имя структуры данных |
|
int |
Текущий размер |
|
boolean |
|
|
string |
Имя группы кэшей для хранения структуры данных |
|
int |
ID группы кэшей для хранения структуры данных |
|
boolean |
|
DS_ATOMICSEQUENCES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
long |
Текущее значение последовательности |
|
long |
Размер локального пакета |
|
string |
Имя группы кэшей для хранения структуры данных |
|
int |
ID группы кешей, используемой для сохранения структуры данных |
|
boolean |
|
DS_ATOMICLONGS#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
long |
Текущее значение последовательности |
|
string |
Имя группы кэшей для хранения структуры данных |
|
int |
ID группы кешей, используемой для сохранения структуры данных |
|
boolean |
|
DS_ATOMICREFERENCES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
long |
Текущее значение последовательности |
|
string |
Имя группы кэшей для хранения структуры данных |
|
int |
ID группы кешей, используемой для сохранения структуры данных |
|
boolean |
|
DS_ATOMICSTAMPED#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
long |
Текущее значение последовательности |
|
string |
Текущее значение метки |
|
string |
Имя группы кэшей для хранения структуры данных |
|
int |
ID группы кешей, используемой для сохранения структуры данных |
|
boolean |
|
DS_COUNTDOWNLATCHES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
int |
Текущее число |
|
int |
Изначальное число |
|
boolean |
Для автоматического снятия блокировки с кеша, когда счетчик близится к нулю должно быть установлено значение |
|
string |
Имя группы кешей для сохранения структуры данных |
|
int |
ID группы кешей для сохранения структуры данных |
|
boolean |
|
DS_SEMAPHORES#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
имя структуры данных |
|
long |
Количество доступных разрешений |
|
boolean |
|
|
int |
Определенное число узлов, ожидающих блокировки |
|
boolean |
|
|
boolean |
|
|
string |
Имя группы кешей для сохранения структуры данных |
|
int |
ID группы кешей для сохранения структуры данных |
|
boolean |
|
DS_REENTRANTLOCKS#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
string |
Имя структуры данных |
|
boolean |
|
|
boolean |
|
|
boolean |
|
|
boolean |
|
|
boolean |
|
|
string |
Имя группы кешей для сохранения структуры данных |
|
int |
ID группы кешей для сохранения структуры данных |
|
boolean |
|
STATISTICS_CONFIGURATION#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
VARCHAR |
Имя схемы |
|
VARCHAR |
Типа объекта |
|
VARCHAR |
Имя объекта |
|
VARCHAR |
Имя колонки |
|
TINYINT |
Максимальный процент устаревающих строк в статистике |
|
BIGINT |
Если не |
|
BIGINT |
Если не |
|
BIGINT |
Если не |
|
INT |
Если не |
|
BIGINT |
Версия конфигурации |
STATISTICS_LOCAL_DATA#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
VARCHAR |
Имя схемы |
|
VARCHAR |
Тип объекта |
|
VARCHAR |
Имя объекта |
|
VARCHAR |
Имя колонки |
|
BIGINT |
Число строк в колонке |
|
BIGINT |
Число уникальных не |
|
BIGINT |
Число |
|
BIGINT |
Общее число значений в колонке |
|
INTEGER |
Средний размер значения в байтах |
|
BIGINT |
Версия статистики |
|
VARCHAR |
Максимальное время, в течение которого вся статистика по партициям использовалась для создания локальной статистики |
STATISTICS_PARTITION_DATA#
Колонка |
Тип данных |
Описание |
|---|---|---|
|
VARCHAR |
Имя схемы |
|
VARCHAR |
Тип объекта |
|
VARCHAR |
Имя объекта |
|
VARCHAR |
Имя колонки |
|
BIGINT |
Число строк в колонке |
|
BIGINT |
Обновление счетчика партиций после сбора статистики |
|
BIGINT |
Число уникальных не |
|
BIGINT |
Число |
|
BIGINT |
Общее число значений в колонке |
|
INTEGER |
Средний размер значения в байтах |
|
BIGINT |
Версия статистики |
|
VARCHAR |
Максимальное время, в течение которого вся статистика по партициям использовалась для создания локальной статистики |
События системного журнала#
Событие |
Запись |
Описание |
|---|---|---|
|
|
Успешное завершение обмена топологиями с узлом-координатором |
Added new node to topology |
|
В топологию добавлен новый узел |
Node left topology |
|
Узел покинул топологию |
Sending activate request |
|
Запрос на активацию кластера |
`Sending deactivate request |
|
Запрос на деактивацию кластера |
Partition Map Exchange crd node |
|
PME. Логи узла-координатора |
Starting rebalance routine |
|
Начало процесса ребалансировки |
Completed rebalance future |
|
|
>>>Transaction |
|
LRT |
deadlock |
|
Взаимная блокировка |
Cluster-wide snapshot operation started |
|
Запуск операции создания снепшота |
Cluster-wide snapshot operation finished successfully |
|
Завершение операции создания снепшота |
Часто встречающиеся проблемы и пути их устранения#
Раздел предусмотрен для будущих обновлений.