概要
Couchbase の検証用環境を作成してみます。マニュアルを参考に Docker を利用してコンテナ上に 3 ノードのクラスタを構成しますが、マニュアルに手順がきちんと書いてあるので、あえてコンソールを使わずにcouchbase-cliを利用してみました。
参考:Couchbase Server 6.6マニュアル - Deploy a Multi-Node Cluster with Containers
作業手順
環境
以下の環境で作業を実施しました。
$ cat /etc/centos-release
CentOS Linux release 8.3.2011
$ docker -v
Docker version 20.10.6, build 370c289
コンテナの起動
公式の Couchbase Server のコンテナイメージの取得と実行を行います。Couchbase のコンテナイメージは docker run コマンドの初回実行時にダウンロードされます。ここでは使用しませんが、コンソールからの操作ができるようマニュアル準拠でポートマッピングを 1 コンテナで指定しておきます。
# コンテナの起動
$ docker run -d --name cb1 -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase
$ docker run -d --name cb2 couchbase
$ docker run -d --name cb3 couchbase
# 起動状態の確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2506eb07bf2c couchbase "/entrypoint.sh couc…" 4 seconds ago Up 2 seconds 8091-8096/tcp, 11207/tcp, 11210-11211/tcp, 18091-18096/tcp cb3
e4059b1a5457 couchbase "/entrypoint.sh couc…" 4 seconds ago Up 3 seconds 8091-8096/tcp, 11207/tcp, 11210-11211/tcp, 18091-18096/tcp cb2
34b717d68b3c couchbase "/entrypoint.sh couc…" 10 seconds ago Up 8 seconds 0.0.0.0:8091-8096->8091-8096/tcp, :::8091-8096->8091-8096/tcp, 11207/tcp, 0.0.0.0:11210-11211->11210-11211/tcp, :::11210-11211->11210-11211/tcp, 18091-18096/tcp cb1
コンソールを使用する場合、URL は以下から確認可能です。
$ docker logs cb1
Starting Couchbase Server -- Web UI available at http://<ip>:8091
and logs available in /opt/couchbase/var/lib/couchbase/logs
CLIを使用してCouchbase クラスタを構成する際には各コンテナのIPアドレスを指定するので、確認しておきます。
$ for name in {cb1,cb2,cb3}; do
ipaddr=`docker inspect --format '{{.NetworkSettings.IPAddress}}' ${name}`
echo "${name} : ${ipaddr}"
done
cb1 : 172.17.0.2
cb2 : 172.17.0.3
cb3 : 172.17.0.4
クラスタの初期構成
まずはいずれか 1 ノードでクラスタの初期構成(名前やメモリ割り当ての設定など)を行います。初期構成は couchbase-cli cluster-init で行います。ここでは、cb1 に接続して実施しています。
# コンテナに接続
$ docker exec -it cb1 /bin/bash
# クラスタの初期構成
root@34b717d68b3c:/# couchbase-cli cluster-init \
--cluster couchbase://localhost \ # 初期クラスタを構成するノードのホスト(couchbase://<addr>)
--cluster-username Administrator \ # 管理ユーザの名前。
--cluster-password password \ # 管理ユーザのパスワード
--cluster-name TestCluter \ # クラスタ名
--cluster-port 8091 \ # クラスタのポート番号。デフォルトは8091
--services data,index,query,fts \ # ノードで有効化するサービス。あとからの変更不可。最初のノードにはdataが必須
--cluster-ramsize 2048 \ # Data Serviceで使用するメモリの上限値(MB)、クラスタ内の共通設定で新規ノード追加時にも適用されます
--cluster-index-ramsize 512 \ # Index Serviceで使用するメモリの上限値(MB)、同上
--cluster-fts-ramsize 512 \ # Full-Text Serviceで使用するメモリの上限値(MB)、同上
--index-storage-setting default # インデックスのストレージモードをdefault/memoptから選択、デフォルトはdefault
# クラスタ構成の確認
root@34b717d68b3c:/# couchbase-cli server-list -c couchbase://172.17.0.2 -u Administrator -p password
ns_1@cb.local 172.17.0.2:8091 healthy active
クラスタへのノード追加
クラスタの初期構成が完了したので、残る cb2, cb3 もクラスタへ追加します。クラスタへの追加は couchbase-cli server-add で行います。実行時にはユーザ情報と追加するノード、および稼働させるサービスを指定します。
※ 引数の指定順が入れ替わるとエラーになったので、マニュアル準拠の指定順としたほうがよさそうです。
# ノードの追加
root@34b717d68b3c:/# couchbase-cli server-add \
--cluster couchbase://172.17.0.2 \ # ノードを追加する対象クラスタ
--username Administrator \ # 管理ユーザの名前
--password password \ # 管理ユーザのパスワード
--server-add-username Administrator \ # サーバ追加に応じたクラスタ構成変更が可能なユーザの名前
--server-add-password password \ # サーバ追加に応じたクラスタ構成変更が可能なユーザのパスワード
--server-add http://172.17.0.3:8091,http://172.17.0.4:8091 \ # 追加するサーバをカンマ区切りで指定
--services data,index # 有効化するサービスを指定
# 追加を確認
root@34b717d68b3c:/# couchbase-cli server-list -c couchbase://172.17.0.2 -u Administrator -p password
ns_1@172.17.0.2 172.17.0.2:8091 healthy active
ns_1@172.17.0.3 172.17.0.3:8091 healthy inactiveAdded
ns_1@172.17.0.4 172.17.0.4:8091 healthy inactiveAdded
サーバ一覧に追加したノードがリストされるため、クラスタへの追加が完了しました。
リバランスの実行
ノード追加後のリバランスを実行していないため、追加ノードは "inactiveAdded" 状態になっています(詳細はマニュアル:Add a Node and Rebalance を参照)。そのため、couchbase-cli rebalance でリバランスを実行します。
# リバランスの実行
root@34b717d68b3c:/# couchbase-cli rebalance -c couchbase://172.17.0.2 -u Administrator -p password
これにより、追加ノードがアクティブとなります。クラスタ状態を couchbase-cli server-info から確認してみます。これにより、ノードで稼働するサービス一覧などのより詳細ない情報を確認することができます。couchbase-cli server-info 実行時には確認対象ノードへの接続情報が必要になるため、まずはそれらを couchbase-cli host-list で取得し、while で順次ノードへ問い合わせています。couchbase-cli server-info コマンドで取得される情報は JSON 形式で帰ってくるため、ここでは jq で一部の情報のみを抽出しています。
# コンテナにjqがなかったのでexit
root@34b717d68b3c:/# exit
# リバランス後のサーバ状態の確認
$ docker exec cb1 couchbase-cli host-list -c couchbase://172.17.0.2 -u Administrator -p password | \
while read line ; do
docker exec cb1 couchbase-cli server-info -c ${line} -u Administrator -p password | jq -cr '{host: .hostname, status: .status, clusterMembership: .clusterMembership, services: .services}'
done
{"host":"172.17.0.2:8091","status":"healthy","clusterMembership":"active","services":["fts","index","kv","n1ql"]}
{"host":"172.17.0.3:8091","status":"healthy","clusterMembership":"active","services":["index","kv"]}
{"host":"172.17.0.4:8091","status":"healthy","clusterMembership":"active","services":["index","kv"]}
ノードの状態がすべて"active"であり、稼働サービスもコマンド実行時と一致していることが確認できました。以上で、3 ノードからなるCouchbase クラスタ環境の構成が完了です。