sleighzy.zookeeper
Apache ZooKeeper
Apache ZooKeeperのインストールと設定のためのAnsibleロール
このロールは、複数のZooKeeperノードをインストールしてクラスタリングするために使用できます。また、デフォルトではインベントリファイルの「zookeeper-nodes」グループに定義されたすべてのホストを使用します。すべてのサーバーは、リーダーと選挙ポートとともに、zoo.cfgファイルに追加されます。zookeeper_firewalld
変数にtrue
を設定した後、ファイアウォールポートを開くことができます。
対応プラットフォーム
- Debian 10.x
- RedHat 7
- RedHat 8
- Ubuntu 18.04.x
- Ubuntu 20.04.x
要件
Java: Java 8 / 11
Ansibleのバージョンは最低でも2.9.16または2.10.4が必要です。これは、特定のカーネルでsysteamctl
のステータスチェックが壊れている問題を回避するためです。このロールを使用してサービスを起動しようとすると「Service is in unknown state
」というエラーメッセージが表示され、タスクは失敗します。しかし、物理ホストでsystemctl start
コマンドを実行すると、サービスは期待通りに起動します。詳細はhttps://github.com/ansible/ansible/issues/71528をご覧ください。
ロール変数
変数 | デフォルト | コメント |
---|---|---|
zookeeper_mirror | https://dlcdn.apache.org/zookeeper | |
zookeeper_version | 3.9.1 | |
zookeeper_package | apache-zookeeper-{{ zookeeper_version }}-bin.tar.gz | |
zookeeper_group | zookeeper | |
zookeeper_user | zookeeper | |
zookeeper_root_dir | /usr/share | |
zookeeper_install_dir | '{{ zookeeper_root_dir}}/apache-zookeeper-{{zookeeper_version}}' | |
zookeeper_dir | '{{ zookeeper_root_dir }}/zookeeper' | |
zookeeper_log_dir | /var/log/zookeeper | |
zookeeper_data_dir | /var/lib/zookeeper | |
zookeeper_data_log_dir | /var/lib/zookeeper | |
zookeeper_client_port | 2181 | |
zookeeper_id | 1 | サーバーごとにユニークで、インベントリファイルに宣言すべき |
zookeeper_leader_port | 2888 | |
zookeeper_election_port | 3888 | |
zookeeper_servers | zookeeper-nodes | 下記参照 |
zookeeper_servers_use_inventory_hostname | false | 下記参照 |
zookeeper_environment | "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar" | |
zookeeper_config_params | zoo.cfgにテンプレート化されるキーと値の辞書 | |
zookeeper_firewalld | false |
インベントリとzookeeper_servers変数
上記のzookeeper_servers変数は、インベントリのホスト名のリストを受け付けます。これらは、zoo.cfg
でマルチサーバークラスタを設定するために使用され、ホストが互いに見つけられるようにします。デフォルトでは、zoo.cfg
で使用されるホスト名は、サーバー上でのhostname
コマンドによって報告されるホスト名(ansible_nodename
変数によって提供される)です。以下の例をご覧ください。
以下のインベントリファイルを仮定し、hostname
コマンドがドメイン名を含まないホスト名のみを返すとします。
[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1 #hostnameコマンドは「zoo1」を返す
zoo2.foo.com zookeeper_id=2 #hostnameコマンドは「zoo2」を返す
zoo3.foo.com zookeeper_id=3 #hostnameコマンドは「zoo3」を返す
次に、以下のロール変数を仮定します。
---
- role: sleighzy.zookeeper
zookeeper_servers:
- zoo1.foo.com
- zoo2.foo.com
- zoo3.foo.com
テンプレート化されたzoo.cfg
ファイルには、以下のエントリが含まれます。
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
この動作を望まない場合は、zoo.cfg
にインベントリのホスト名をテンプレート化するように、zookeeper_servers_use_inventory_hostname
をtrue
に設定してください。
デフォルトポート
ポート | 説明 |
---|---|
2181 | クライアント接続ポート |
2888 | クラスタリング用のクオラムポート |
3888 | クラスタリング用のリーダー選挙ポート |
デフォルトのディレクトリとファイル
説明 | ディレクトリ / ファイル |
---|---|
インストールディレクトリ | /usr/share/apache-zookeeper-<version> |
インストールディレクトリへのシンボリックリンク | /usr/share/zookeeper |
設定へのシンボリックリンク | /etc/zookeeper/zoo.cfg |
ログファイル | /var/log/zookeeper |
スナップショットとmyidファイル用のデータディレクトリ | /var/lib/zookeeper |
トランザクションログファイル用のデータディレクトリ | /var/lib/zookeeper |
Systemdサービス | /usr/lib/systemd/system/zookeeper.service |
システムデフォルト | /etc/default/zookeeper |
ZooKeeperサービスの開始と停止
- ZooKeeperサービスは、
systemctl start zookeeper
で開始できます。 - ZooKeeperサービスは、
systemctl stop zookeeper
で停止できます。
四文字コマンド
ZooKeeperは四文字のコマンドに基づくコマンドを使用できます。詳細はhttps://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lwを参照してください。
以下の例は、statコマンドを使用して、どのインスタンスがリーダーかを調べるものです:
for i in 1 2 3 ; do
echo "zookeeper0$i is a "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done
依存関係
依存関係なし
例プレイブック
- hosts: zookeeper-nodes
roles:
- sleighzy.zookeeper
リンティング
リンティングはansible-lintを使用して行うべきです。
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
テスト
このモジュールはAnsible Moleculeテストフレームワークを使用します。このテストスイートは、3つのノードで構成されるZooKeeperクラスタをDockerコンテナ内に作成します。各コンテナは異なるOSを実行し、サポートされているプラットフォームをテストします。
[モレキュールインストールガイド]に従い、これは仮想環境で行うべきです。以下のコマンドは、Pythonの仮想環境を作成し、Dockerドライバを含むモレキュールをインストールします。
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
プレイブックとテストを実行します。リンティングエラーは、Moleculeがテストを実行する前に修正する必要があります。これによりすべてのテストが実行され、その後Dockerコンテナが破棄されます。
molecule test
テストなしでプレイブックを実行するためのコマンドは以下の通りです。ロールの変更時に複数回実行でき、操作が冪等であることを確認します。
molecule converge
すべてを破棄せずにテストを実行するためのコマンドは以下の通りです。コマンドmolecule verify
は、各テスト実行のために繰り返し実行できます。
molecule create
molecule converge
molecule verify
モレキュールのテストとDockerコンテナを破棄します。
molecule destroy
ライセンス
![MITライセンス]
Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.zookeeper