sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

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_hostnametrueに設定してください。

デフォルトポート

ポート 説明
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
ライセンス
mit
ダウンロード
23.2k
所有者