Получение прав Superuser'а в ZooKeeper'е Cloudera CDH 6.3.2
2021-08-11
Введение
При удалении ноды /solr
через zookeeper-client
выводилась ошибка:
[zk: localhost:2181(CONNECTED) 0] rmr /solr
The command 'rmr' has been deprecated. Please use 'deleteall' instead.
Authentication is not valid : /solr/security
Решение этой проблемы нашёл здесь: https://community.cloudera.com/t5/Support-Questions/How-to-delete-an-acl-in-zookeeper/td-p/292421
Алгоритм получения прав superuser’а
Переходим в домашний каталог Zookeeper’а и запускаем генерацию дайджеста пароля для только что придуманного логина, под которым возобладаем superuser-правами в Zookeeper’е, например ‘zoosu:TsKlydBdycdq’:
# cd /usr/lib/zookeeper && \
/usr/java/jdk1.8.0_181-cloudera/bin/java -cp "./zookeeper.jar:lib/slf4j-api-1.7.25.jar" org.apache.zookeeper.server.auth.DigestAuthenticationProvider zoosu:TsKlydBdycdq
В выводе команды видим дайджест ‘zoosu:LC4PzmQLqFSlkfUMsN4oYrUGaM8=’:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
zoosu:TsKlydBdycdq->zoosu:LC4PzmQLqFSlkfUMsN4oYrUGaM8=
Вставляем эти учётные данные (‘zoosu:LC4PzmQLqFSlkfUMsN4oYrUGaM8=’) в строку параметров для java-машины ZooKeeper’а (’-Dzookeeper.DigestAuthenticationProvider.superDigest=zoosu:LC4PzmQLqFSlkfUMsN4oYrUGaM8=’), которую размещаем в настройках ZooKeeper’а в Cloudera Manager.
В настройках ZooKeeper, используя фильтр ‘Java Configuration Options for Zookeeper Server’, изменяем следующие параметры:
Property | Value | Description |
---|---|---|
Java Configuration Options for Zookeeper Server | -Dzookeeper.DigestAuthenticationProvider.superDigest= zoosu:LC4PzmQLqFSlkfUMsN4oYrUGaM8= |
These arguments will be passed as part of the Java command line. Commonly, garbage collection flags, PermGen, or extra debugging flags would be passed here. Note: When CM version is 6.3.0 or greater, {{JAVA_GC_ARGS}} will be replaced by JVM Garbage Collection arguments based on the runtime Java JVM version. |
Нажимаем Save Changes.
Перезапускаем все зависимые сервисы по приглашению Cloudera Manager Console.
Или останавливаем кластер и запускаем только сервис ZooKeeper’а, если, конечно, хотим удалить вышеуказанную строку из настроек, после выполнения удаления ноды. После чего останавливаем ZooKeeper и запускаем весь кластер.
Удаление ноды
На ZooKeeper-узле запускаем zookeeper-client
, авторизуемся с помощью команды addauth digest zoosu:TsKlydBdycdq
, и выполняем удаление ноды /solr
:
[zk: localhost:2181(CONNECTED) 0] ls /solr
[configs, overseer, security.json, solr.xml, autoscaling.json, security, aliases.json, live_nodes, collections, overseer_elect, clusterstate.json, autoscaling, clusterprops.json]
[zk: localhost:2181(CONNECTED) 1] addauth digest zoosu:TsKlydBdycdq
[zk: localhost:2181(CONNECTED) 2] deleteall /solr
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, hadoop-ha, kafka, hive_zookeeper_namespace_hive, hbase]
[zk: localhost:2181(CONNECTED) 4]