Ubuntu 18.04 に single-node Apache ZooKeeper をインストールする手順

ZooKeeper は分散システム向けの設定管理、命名、同期、グループサービスを提供するミドルウェアです。本稿では Ubuntu 18.04 上に単一ノード ZooKeeper をインストールして systemd で起動・管理するまでの手順を示します。Java のインストール、専用ユーザー作成、バイナリ配置、設定、起動確認、運用チェックリストまで含みます。
重要: 本手順は「単一ノード(テスト・検証用途)」向けです。本番可用性を確保するには 3 ノード以上のクラスタ構成を検討してください。
目的と対象読者
目的: Ubuntu 18.04 サーバで ZooKeeper(単一ノード)を動かせるようにする。対象読者: Linux 管理者、DevOps、開発者でコマンドラインと基本的なシステム管理に慣れている方。
重要用語(1行定義)
- ZooKeeper: 分散システムの調整や設定を扱う Apache のサービス。
- Znode: ZooKeeper 内の階層的なデータノード。
主な前提条件
- Ubuntu 18.04 が動作するサーバ。
- root 権限(または sudo を使えるユーザー)。
- ネットワーク接続(外部リポジトリからパッケージを取得できること)。
要件(チェックリスト)
- Ubuntu 18.04 が最新状態である。
- root パスワードまたは sudo 権限がある。
- ポート 2181(クライアント用)が必要に応じてファイアウォールで解放されている。
準備: システムの更新
まずシステムを最新の状態にします。管理者権限で次を実行してください。
apt-get update -y
apt-get upgrade -y
アップグレード後、必要に応じて再起動してください。
Java のインストール
ZooKeeper は Java で動作するため Java が必要です。Ubuntu 18.04 のデフォルトリポジトリに最新の Oracle Java が無い場合は PPA を追加してからインストールします:
add-apt-repository ppa:linuxuprising/java
リポジトリを更新して Java をインストールします。
apt-get update -y
apt-get install oracle-java11-set-default
インストール後、バージョン確認:
java --version
期待される出力例(環境により異なります):
java 11.0.2 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)
注: OpenJDK 11 を使用しても構いません。組織ポリシーに合わせて選択してください。
ZooKeeper 用ユーザーの作成
サービス専用の非特権ユーザーを作成します。
useradd zookeeper -m
usermod --shell /bin/bash zookeeper
パスワードを設定し、sudo グループに追加します(必要な場合)。
passwd zookeeper
usermod -aG sudo zookeeper
セキュリティ上の注意: 本番環境では sudo 権限は不要にするか最小権限に制限してください。
ZooKeeper のダウンロードと配置
ZooKeeper はディスクに設定やステートを保持します。まずデータディレクトリを作成し、所有権を付与します。
mkdir -p /data/zookeeper
chown -R zookeeper:zookeeper /data/zookeeper
/opt に移動してアーカイブを取得、展開します(この例では 3.4.9 を使用)。
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
tar -xvzf zookeeper-3.4.9.tar.gz
mv zookeeper-3.4.9 zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper
注: このチュートリアルで使うバージョンはアーカイブから取得した例です。セキュリティや機能要件に応じて最新の安定版を検討してください(3.5.x / 3.6.x 以降で機能が追加されています)。
ZooKeeper の基本設定
設定ファイルを作成します。
nano /opt/zookeeper/conf/zoo.cfg
次の最小限の設定を記述します。
tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80
保存してエディタを閉じます。dataDir は既に作成済みで、適切な所有権があることを確認してください。
手動での起動と接続確認
まず ZooKeeper を起動します。
cd /opt/zookeeper
bin/zkServer.sh start
期待される起動ログ例:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
クライアントから接続してプロンプトが出ることを確認します。
bin/zkCli.sh -server 127.0.0.1:2181
接続成功時のプロンプト例:
[zk: 127.0.0.1:2181(CONNECTED) 1]
プロンプトで help を実行すると利用可能なコマンド一覧が表示されます。
help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
...(略)
終了するには quit と入力します。
停止するには:
bin/zkServer.sh stop
停止ログ例:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
systemd ユニットファイルでサービス化
永続的に管理するために systemd ユニットを作成します。
nano /etc/systemd/system/zookeeper.service
以下を記述します。
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target
保存後、デーモンをリロード、起動、ブート時有効化します。
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
ステータス確認:
systemctl status zookeeper
出力例(抜粋):
? zookeeper.service - Zookeeper Daemon
Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2019-03-06 15:03:01 UTC; 5s ago
Docs: http://zookeeper.apache.org
Process: 3909 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
Main PID: 3926 (java)
重要: systemd のログは journalctl -u zookeeper で確認できます。
検証手順(受け入れ基準)
受け入れ基準 (Критерии приёмки):
- systemctl status zookeeper が active (running) を返す。
- bin/zkCli.sh で 127.0.0.1:2181 に接続できる。
- create/get/ls 操作で基本的な Znode 操作が成功する。
簡単な検証例:
# 接続
bin/zkCli.sh -server 127.0.0.1:2181
# クライアントプロンプトで
create /mytest "hello"
get /mytest
ls /
成功すればインストール完了です。
運用上のチェックリスト(ロール別)
運用担当者(オペレーター):
- systemctl status と journalctl -u zookeeper を定期確認
- ディスク使用量(dataDir)監視
- ZooKeeper のログローテーション設定
開発者:
- クライアントのタイムアウト/リトライ戦略を確認
- session timeout と tickTime の関係を理解
セキュリティ担当者:
- 管理用ポートへのアクセス制限(ファイアウォール)
- 認証(SASL/ACL)を有効化する計画
セキュリティとハードニングのヒント
- ファイアウォール: 2181(クライアント)、2888/3888(クラスタ間)など必要に応じて開放する。
- 認可: ZooKeeper の ACL を使用して Znode へのアクセスを制限する。
- 認証: 本番では SASL や TLS といった認証・暗号化検討。
- ユーザー/権限: zookeeper ユーザーは最小権限で運用。
注意: 本手順は HTTP/TLS 設定や SASL の詳細を含みません。導入時は組織のセキュリティ方針に従って追加設定してください。
トラブルシューティング(よくある問題と対処)
- Java が見つからない: java –version を実行して PATH を確認。systemd ユニットで User 環境変数の問題がある場合はフルパス指定。
- ポート衝突: 既に 2181 を使用するプロセスがある場合は clientPort を変更するか競合プロセスを停止。
- ディスク権限エラー: dataDir の所有者が zookeeper になっているか確認。
マルチノード(本番)への簡易移行メモ
- 最低 3 台のノードを用意する(可用性確保の一般的な目安)。
- zoo.cfg に server.N=host:peerPort:leaderElectionPort を設定。
- 各ノードで dataDir/myid にノード固有の ID を記述。
- クラスタ起動後、各ノードのステータスを確認しリーダ/フォロワの役割を検証。
ミニ手法: まず単一ノードで動作確認 → テストクラスタ(3ノード)で設定検証 → 本番展開。
互換性とバージョン注意点
- 3.4 系は古い実装で、3.5/3.6 系では設定や機能が拡張されています。新機能やセキュリティ修正が必要な場合は新しい安定版を選んでください。
- クラスタ間のバージョン差は互換性問題を起こす場合があるため、アップグレード計画を作成して段階的に実施してください。
受け入れテストケース(簡易)
- systemctl start zookeeper を実行 → サービスが起動する。
- zkCli で接続 → create /testnode “v” → get /testnode が期待値を返す。
- サービス再起動後も dataDir によってノードデータが保持される。
1行用語集
- tickTime: ZooKeeper の基本タイムアウト単位(ミリ秒)。
- clientPort: クライアントが接続するポート(デフォルト 2181)。
- Znode: ZooKeeper の階層的なデータ格納単位。
まとめ
- このガイドでは Ubuntu 18.04 に単一ノード ZooKeeper をインストールし、systemd で管理する手順を示しました。検証手順と運用チェックリスト、基本的なセキュリティ注意点も合わせて提供しています。
重要: 単一ノード構成はテストや開発用途に適しています。本番での可用性が必要な場合は 3 ノード以上のクラスタ化を行ってください。
ソーシャルプレビュー(例): Apache ZooKeeper を Ubuntu 18.04 に単一ノードで導入するための手順ガイド。Java インストールから systemd サービス化、検証、運用チェックリストまで。