Плагин Apache ZooKeeper обеспечивает в GrantForge подключение к ансамблям, поиск путей znode и управление политиками. Идентификатор плагина и тип сервиса — zookeeper.
Установка
Дистрибутив содержит плагин в plugins/zookeeper. Убедитесь в разделе Управление платформой → Плагины, что zookeeper включён; после обновления повторно просканируйте каталог плагинов. Плагин использует клиент ZooKeeper 3.9 в собственном загрузчике классов, отдельно от библиотек сервера.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите ZooKeeper (
zookeeper). - Укажите строку подключения: серверы ансамбля с необязательным chroot, например
zk1:2181,zk2:2181,zk3:2181/kafka. Клиент сам переключается между серверами. - Выберите аутентификацию, задайте znode для поиска и проверьте подключение (проверяется, что znode существует и его дочерние узлы можно перечислить), затем сохраните сервис.
| Параметр | Назначение |
|---|---|
zookeeper.connect |
Обязательная строка подключения: host[:port] через запятую, при необходимости с /chroot; chroot не может оканчиваться на / |
authentication |
none (по умолчанию), digest или kerberos |
username |
Digest: пользователь digest из ACL (без двоеточия); Kerberos: principal, например grantforge@EXAMPLE.COM |
password |
Пароль пользователя digest; хранится в зашифрованном виде |
keytab |
Kerberos: путь к keytab principal на сервере GrantForge |
zookeeper.sasl.client.username |
Kerberos: первая часть principal серверов, по умолчанию zookeeper, как в zookeeper/<host>@<REALM> |
zookeeper.server.principal |
Kerberos: полный principal серверов, если он другого вида, например zookeeper/zk.example.com@EXAMPLE.COM |
zookeeper.client.secure |
Подключаться ли к TLS-порту клиентов серверов, по умолчанию false |
zookeeper.ssl.trustStore.location / .password / .type |
Хранилище доверенных сертификатов для проверки серверов; пустое — доверять тому, чему доверяет Java сервера; тип jks, pkcs12 или pem |
zookeeper.ssl.keyStore.location / .password / .type |
Хранилище ключей с клиентским сертификатом для серверов, которые его требуют |
session.timeout.ms |
Тайм-аут сеанса, по умолчанию 15000, диапазон 2000..120000 |
connection.timeout.ms |
Ожидание только первоначального подключения и аутентификации, по умолчанию 10000 мс, диапазон 1000..60000; не ограничивает последующие синхронные запросы |
request.timeout.ms |
Максимальное ожидание одного синхронного запроса, по умолчанию 8000 мс, диапазон 1000..60000 |
lookup.path |
Начальный znode для поиска и просмотра внутри chroot, по умолчанию /; например /brokers, просмотр ограничен им |
lookup.max.entries |
Максимум дочерних узлов, читаемых из одного znode за раз, по умолчанию 10000, диапазон 1..100000 |
Аутентификация
- none: без входа; читаются только znode, ACL которых открыт для
world:anyone. - digest: вход как
username:password, что соответствует идентичностямdigestв ACL ZooKeeper. Неверный пароль не отклоняется при входе: это другая идентичность, и защищённые znode показываются как доступ запрещён. - kerberos: вход по SASL с keytab;
krb5.confсервера должен указывать на KDC. Каждый principal со своим keytab получает собственную секцию JAAS рядом с конфигурацией процесса, поэтому один GrantForge подключается к нескольким ансамблям под разными principal. Вход в Kerberos только по паролю пока не поддерживается.
При сохранении проверяются: формат строки подключения, пользователь и пароль для digest, principal и keytab для Kerberos, keytab и principal сервера только для Kerberos, а также диапазоны тайм-аутов и лимита.
При отключённом TLS пути и пароли хранилищ доверенных сертификатов и ключей должны быть пустыми. Для пароля хранилища требуется путь к соответствующему хранилищу. Для обоих хранилищ допустимы только типы jks, pkcs12 и pem.
Пробелы в начале и конце паролей хранилищ TLS сохраняются. Конфигурация сервиса определяет режим TLS и хранилища для этого подключения, заменяя уже заданные в JVM параметры TLS и хранилищ ZooKeeper; сертификаты и имена хостов серверов по-прежнему проверяются.
Просмотр znode
Выберите сервис в разделе Права на данные → Политики и нажмите Обзор рядом с path:
- Дочерние узлы выводятся постранично, по имени; znode со своими дочерними узлами можно открыть дальше.
- Для каждого znode показываются его ACL (
scheme:id:cdrwa, как в инструментах ZooKeeper), размер данных и время изменения. - Znode, ACL которого пользователь поиска не может прочитать, всё равно выводится по имени; при открытии показывается причина отказа.
Если znode удаляются во время постраничного просмотра, курсор всё равно продвигается по последнему просмотренному имени дочернего узла, даже если сам узел уже не существует. Список дочерних узлов не является снимком: одновременные добавления и удаления следуют семантике ZooKeeper и могут изменить последующие страницы.
При вводе пути предлагаются варианты; у несуществующего родителя их нет, а пути вне lookup.path отклоняются. Znode с числом дочерних узлов больше lookup.max.entries приводит к ошибке, а не к частичному выводу.
Применение политик
Уровень ресурса один — path, типы доступа соответствуют правам ACL ZooKeeper: read, write, create, delete и admin; политики путей поддерживают рекурсию и исключения.
Плагин сервиса отвечает за управление, поиск и просмотр; для применения политик дополнительно нужен агент внутри сервера, который применяет их к ACL-маркерам через провайдер аутентификации SASL и должен быть развёрнут на каждом узле ансамбля. Шаги развёртывания, ACL-маркер и его ограничения описаны в руководстве по агенту.
