Apache ZooKeeper プラグインは、GrantForge にアンサンブルへの接続、znode パスの検索、ポリシー管理を提供します。プラグイン ID とサービスタイプはどちらも 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:ACL の digest ユーザー(コロン不可)。Kerberos:principal(例:grantforge@EXAMPLE.COM) |
password |
digest ユーザーのパスワード。暗号化して保存 |
keytab |
Kerberos:GrantForge サーバー上の principal の keytab のパス |
zookeeper.sasl.client.username |
Kerberos:サーバー principal の先頭部分。既定は zookeeper(zookeeper/<host>@<REALM>) |
zookeeper.server.principal |
Kerberos:サーバー principal がその形式でない場合の完全な 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 ms、範囲 1000..60000。接続後の同期リクエストには適用しません |
request.timeout.ms |
1 回の同期リクエストの待機上限。既定 8000 ms、範囲 1000..60000 |
lookup.path |
chroot 以下で検索と参照を始める znode。既定 /(例:/brokers)。参照はこの znode 内に限られます |
lookup.max.entries |
1 つの znode から一度に読む子ノードの上限。既定 10000、範囲 1..100000 |
認証
- none:サインインしません。ACL が
world:anyoneに開いている znode だけを読めます。 - digest:
username:passwordでサインインし、ZooKeeper ACL のdigestID に対応します。パスワードが誤っていてもサインインは拒否されず別の ID になるため、保護された znode はアクセス拒否として表示されます。 - kerberos:keytab で SASL サインインします。サーバーの
krb5.confから KDC に到達できる必要があります。principal と keytab ごとに、プロセスの既存設定とは別の JAAS セクションを持つため、1 つの GrantForge が異なる principal で複数のアンサンブルに接続できます。パスワードだけの Kerberos サインインはまだサポートしていません。
保存時に、接続文字列の形式、digest のユーザーとパスワード、Kerberos の principal と keytab、Kerberos 専用の keytab とサーバー principal、各タイムアウトと上限の範囲を検査します。
TLS を無効にする場合、トラストストアとキーストアのパスとパスワードは空にしてください。ストアのパスワードを指定するには、対応するストアのパスも必要です。両ストアの種類には jks、pkcs12、pem のみを指定できます。
TLS ストアのパスワードの先頭と末尾の空白は、そのまま保持されます。サービス設定によって、この接続の TLS モードと使用するストアが決まり、JVM に既存の ZooKeeper TLS とストアの設定を上書きします。サーバー証明書とホスト名の検証は引き続き行います。
znode の参照
データ権限 → ポリシー でサービスを選び、path の横の 参照 を使用します。
- 子ノードを名前順にページ単位で一覧します。子ノードを持つ znode はさらに開けます。
- 各 znode の ACL(ZooKeeper 標準ツールと同じ
scheme:id:cdrwa)、データサイズ、更新日時を表示します。 - 検索ユーザーが ACL を読めない znode も名前は一覧され、開くと拒否の理由が表示されます。
ページ分割中に znode が削除されても、カーソルは最後に走査した子ノード名から進み、その子ノードが残っている必要はありません。子ノード一覧はスナップショットではなく、同時に行われる追加や削除は ZooKeeper のセマンティクスに従うため、後続ページの内容が変わる場合があります。
パスを入力すると候補が表示されます。存在しない親には候補がなく、lookup.path の外のパスは拒否されます。子ノードが lookup.max.entries を超える znode は、一部だけを表示せずエラーになります。
ポリシーの適用
リソースは path の 1 階層のみで、アクセスタイプは ZooKeeper の ACL 権限と同じ read、write、create、delete、admin です。パスのポリシーは再帰と除外に対応します。
サービスプラグインは管理、検索、参照を担当し、ポリシーの適用にはサーバー内のエージェントが追加で必要です。エージェントは SASL 認証プロバイダーを通じてマーカー ACL にポリシーを適用し、アンサンブルの全ノードに配置する必要があります。デプロイの手順、マーカー ACL と制限はエージェントガイドを参照してください。
