Восстановление согласованности партиций с помощью cli-утилит#
Предусловия#
Установленный продукт DataGrid. Подробнее об установке продукта написано в документе «Руководство по установке».
Введение#
DataGrid предоставляет гарантии согласованности данных, означающие, что все копии партиций будут содержать одни и те же значения для каждого из ключей.
Однако по различным причинам эти гарантии могут быть нарушены. Такими причинами могут быть:
дефекты;
сбои;
неидемпотентные операции над данными, выполняемые более одного раза.
Для восстановления согласованности данных существует cli-утилита, использующая специальный режим чтения из всех копий партиции и проверяющая, что значения в них одинаковы. Если значения в основной и резервной партициях отличаются, утилита исправит это при помощи одной из стратегий восстановления согласованности. Стратегии описываются далее в разделе «Стратегии проверки и восстановления согласованности данных».
Стратегии проверки и восстановления согласованности данных#
Существует пять стратегий проверки и восстановления согласованности данных:
LWW — Last Write Wins — побеждает последняя (самая новая) запись:
Использование данной стратегии может приводить к исключению
IgniteExceptionв случае, если восстановление согласованности данных невозможно (невозможно определить самую новую запись). Это происходит в следующих случаях:для одного и того же ключа найдены значения
nullи отличное отnull. У пропущенной записи (null) нет версии и сравнить ее с версионированной записью невозможно;записи одной версии имеют различные значения.
PRIMARY — Value from the primary node wins — побеждает значение, полученное с основной копии партиции;
RELATIVE_MAJORITY — Relative majority wins — побеждает относительное большинство (самое часто встречающееся значение):
Внимание
Данная стратегия, в отличие от стратегии с «абсолютным большинством», работает для четного числа копий. Использование данной стратегии может приводить к исключению
IgniteException, если определить самое часто встречающееся значение не представляется возможным.Например, даны 5 копий партиции (из них 1 копия — основная, 4 копии — резервные):
Если значение
Aвстречается 2 раза, а значенияX,YиZ— по 1 разу, то в результате побеждает значениеA.Если значения
AиBвстречаются по 2 раза, а значениеX— 1 раз, то такая стратегия не сможет определить победителя.
Если даны 4 копии партиции (из них 1 копия — основная, 3 копии — резервные), то любое значение, найденное два или более раз, когда другие найдены только один раз, является победителем.
REMOVE — Inconsistent values will be removed — несогласованные значения будут удалены. Это означает потерю несогласованных данных;
CHECK_ONLY — Only check will be performed — будет проведена только проверка согласованности.
Проверка и восстановление согласованности с помощью утилиты control#
Проверка и восстановление согласованности осуществляются с помощью утилиты control, которая включает в себя набор команд. Описание команд приведено в разделе «Проверка и восстановление данных».
Пример целевого использования механизма#
Внимание
Мониторинг события нарушения согласованности на кластере по умолчанию отключен.
Чтобы включить обработку события нарушения согласованности EVT_CONSISTENCY_VIOLATION, добавьте в конфигурацию класса org.apache.ignite.configuration.IgniteConfiguration следующее свойство (указывается в serverExampleConfig.xml).
<property name="includeEventTypes">
<list>
<util:constant static-field="org.apache.ignite.events.EventType#EVT_CONSISTENCY_VIOLATION"/>
</list>
</property>
Это необходимо для работы механизма восстановления согласованности.
Подход к целевому использованию механизма восстановления согласованности включает в себя использование утилиты idle_verify для проверки согласованности данных. Такой подход позволяет избежать излишнего перемещения данных по сети. Вместо этого по сети перемещается лишь вычисленный локальный хеш, что повышает производительность работы механизма.
Алгоритм работы механизма при таком подходе:
Утилита
idle_verifyпроверяет согласованность данных на кластере без нагрузки (иначе есть риск ложного срабатывания).Утилита
idle_verifyпредоставляет информацию о наличии несогласованности.Каждое расхождение логируется при помощи стратегии
CHECK_ONLY.log-файл (например,
consistency.log) анализируется администратором.Примечание
По умолчанию запись происходит в общий лог DataGrid. Однако можно сконфигурировать запись в любой другой файл по усмотрению пользователя. Для этого измените путь к файлу на желаемый в конфигурации logger (переменная
filename), например:XML#<File name="CONSISTENCY" fileName="${sys:IGNITE_HOME}/work/log/consistency.log"> <PatternLayout> <Pattern>"[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"</Pattern> </PatternLayout> </File>Для устранения случаев несогласованности используются стратегии LWW, PRIMARY, RELATIVE_MAJORITY, REMOVE.
Для реализации подхода:
Запустите утилиту
idle_verifyна проверку согласованности данных с необходимыми вам аргументами:control.sh --cache idle_verify --host localhost --user user --password ***** --keystore /path/to/keystore.jks --keystore-password ***** --truststore /path/to/truststore.jks --truststore-password *****Утилита
idle_verifyобнаруживает несогласованность:idle_verify check has finished, found 2 conflict partitions. Conflict partition: PartitionKey [grpId=xxxxxxxxxx, grpName=default, partId=x] Partition instances: [PartitionHashRecord [isPrimary=true, partHash=xxxxxxxxxx, updateCntr=3, size=3, consistentId=xxxxxxxx], PartitionHashRecord [isPrimary=false, partHash=xxxxxxxxxx, updateCntr=3, size=2, consistentId=xxxxxxxx]] Conflict partition: PartitionKey [grpId=xxxxxxxxxx, grpName=default, partId=x] Partition instances: [PartitionHashRecord [isPrimary=true, partHash=xxxxxxxxxx, updateCntr=3, size=3, consistentId=xxxxxxxx], PartitionHashRecord [isPrimary=false, partHash=xxxxxxxxxx, updateCntr=3, size=2, consistentId=xxxxxxxx]]Запустите проверку согласованности при помощи стратегии
CHECK_ONLYдля оценки расхождений; подробнее о проверки согласованности с помощью control.sh смотрите в разделе «Восстановление согласованности кешей».Просмотрите log-файл, оцените его и примите решение относительно выбора стратегии восстановления согласованности.
Запустите команду
repairдля запуска механизма Read repair на устранение расхождений, используя одну из описанных выше стратегий; подробнее о выполнении команды с помощью control.sh смотрите в разделе «Восстановление согласованности кешей».