У меня запущено несколько кластеров zookeeper, моя цель — объединить данные об этих кластерах zk в один кластер zookeeper.
Поэтому копирование всех данных и журналов одного кластера zk в другой кластер zk для меня невозможно. Кроме того, мне может потребоваться изменить базу всего пути к каталогу, например, мне может потребоваться скопировать данные для /service1 в кластере zk1 в /c1/service1 в кластере zk 2.
в настоящее время я выполняю эту работу, пишу код клиента zk для чтения всего дерева каталогов с данными и информацией ACL в кластере zk 1 и записываю его в кластер zk 2.
Однако при таком подходе остаются некоторые проблемы:
- Трудно определить, какой узел обновляется в процессе копирования.
- последовательный узел может быть проблемой, я могу написать его только как обычный непоследовательный узел, в то время как для дальнейшего создания последовательного узла в новом кластере, поскольку порядковый номер последовательного узла создается в соответствии с информацией Cversion родительского узла (код выглядит как это, но кажется, что если какая-то операция удаления будет выполнена, значение немного сдвинется), так как я не мог контролировать Cversion родительского узла ( Могу ли я? ). Если Cversion меньше, чем порядковый номер существующего последовательного узла (это может произойти, поскольку мы копируем данные в новый кластер и игнорируем операцию истории), дальнейшее создание последовательного узла может привести к ошибке node.exist.
Так есть ли лучший способ достичь моей цели?