3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CouchbaseAdvent Calendar 2015

Day 22

IDCFクラウドのDebian JessieでMulti-Host Docker Networking - Part 4: Couchbase Serverをスケールしてみる

Last updated at Posted at 2015-12-21

 JSONベースでドキュメント指向のデータベースでスケールするCouchbase Serverのように、最初からスケールする設計のNoSQLを選択した方がRDBMSよりも適しているケースが増えていると思います。今回はIDCFクラウドにDockerのMulti-host networkを構築したのでCouchbaseもセットアップしてみます。

このシリーズ

Multi-host network

 Docker 1.9から採用されたMulti-host networkとDocker SwarmのセットアップはIDCFクラウドのDebian JessieでMulti-Host Docker Networking - Part 2: Docker Swarmクラスタの作成を参考にしてください。

仮想マシン

 Swarmクラスタは以下の仮想マシンで構成しています。

Dockerホストのhostname Dockerホストのeth0 Docker Swarm
minion-1 10.3.0.101 Swarm Manager/Agent
minion-2 10.3.0.102 Swarm Agent
minion-3 10.3.0.103 Swarm Agent

docker-compose.yml

 Docker Swarmに参加しているノードでDockcer Composeのディレクトリを作成します。どこでも構いませんが今回はminion-1 (10.3.0.101)の仮想マシンで作業します。デフォルトではこのディレクトリ名がDockerネットワーク名として自動的に作成されます。

$ mkdir ~/couch
$ cd !$

 Dockerイメージは公式のcouchbaseを使います。ライセンスについてはEnterprise版でも以下の条件で無償で使うことができるのでDockerイメージもEnterprise版にします。

非商用利用では無制限のノード、商用利用2ノードまで無償で利用

 docker-compose.ymlを作成します。couchbaseサービスはDocker ComposeとDocker Swarmを使ってスケールさせるコンテナです。anti-affinityを設定して同じDockerホストでは起動を避けるようにします。proxyサービスもCouchbase Server クラスタに参加しますが、DockerホストにマップしてパブリックIPアドレスから管理画面などを操作できるように公開します。

~/couch/docker-compose.yml
couchbase:
  image: couchbase:enterprise
  environment:
    - "affinity:container!=couch_couchbase_*"
proxy:
  image: couchbase:enterprise
  environment:
    - constraint:node==minion-3
  ports:
    - 8091:8091
    - 8092:8092
    - 8093:8093
    - 11210:11210

up

 ~/couchディレクトリに移動します。DOCKER_HOST環境変数にSwarm Manager (10.3.0.101) を指定してupします。--x-networkingフラグでDocker Composeからnetworkを有効にします。--x-network-driver=overlayフラグでOverlayネットワークドライバを指定します。

$ cd ~/couch
$ export DOCKER_HOST=tcp://10.3.0.101:3333
$ docker-compose \
  --x-networking \
  --x-network-driver=overlay \
  up -d

 minion-1の仮想マシンでupしましたがDocker Swarm環境なので、minion-3/couch_proxy_1minion-2/couch_couchbase_1にコンテナが起動しました。

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                                                                                     NAMES
4bc37df3ff03        couchbase:enterprise   "/entrypoint.sh couch"   6 seconds ago       Up 4 seconds        10.3.0.103:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 10.3.0.103:11210->11210/tcp, 18091-18092/tcp   minion-3/couch_proxy_1
5c4f9006df94        couchbase:enterprise   "/entrypoint.sh couch"   8 seconds ago       Up 6 seconds        8091-8093/tcp, 11207/tcp, 11210-11211/tcp, 18091-18092/tcp                                                minion-2/couch_couchbase_1

 またMulti-host network構成にしているので異なるDockerホストのコンテナが同じネットワークアドレスにつながっています。

$ docker inspect --format="{{ .NetworkSettings.Networks.couch.IPAddress }}"  minion-2/couch_couchbase_1
10.0.1.2
$ docker inspect --format="{{ .NetworkSettings.Networks.couch.IPAddress }}"  minion-3/couch_proxy_1
10.0.1.3

Couchbase Server クラスタへのノードの追加

 RethinkDBの時はDocker Composeでscaleさせるとコンテナが自動的にクラスタが追加されたのですがCouchbaseの場合は管理画面かREST APIを使う必要があります。proxyサービスのコンテナ自身もCouchbase Server クラスタに参加していますが、パブリックIPアドレスから接続する役割をもたせました。

docker-compose.yml
proxy:
  image: couchbase:enterprise
  environment:
    - constraint:node==minion-3

 proxyサービスのコンテナをブラウザからCouchbaseの管理画面を8091ポートで開きます。

couch-index.png

 初期設定を行います。テスト用にサンプルのバケットを作成してデータを投入しておきます。

couch-beer.png

 Enterprise版を利用しているのでライセンスに同意します。非商用の場合ノードは無制限で利用できます。

couch-agree.png

 Server Nodesタブからノードの追加をします。minion-2/couch_couchbase_1コンテナのIPアドレス、10.0.1.2を登録します。

couch-addserver.png

 Pending Rebalanceボタンを押してクラスタのリバランスをします。クラスタにサーバーを追加してデータやRAM、CPU利用の再配置が簡単にできるのがCouchbaseの魅力です。

couch-rebalance.png

scale

 Docker Composeを使ってscaleしてみます。couchbaseサービスを3に変更します。コンテナが2つ追加されました。

$ docker-compose \
  --x-networking \
  --x-network-driver=overlay \
  scale couchbase=3
Creating and starting 2 ... done
Creating and starting 3 ... done
$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                                                                                     NAMES
d0c34609c697        couchbase:enterprise   "/entrypoint.sh couch"   57 seconds ago      Up 56 seconds       8091-8093/tcp, 11207/tcp, 11210-11211/tcp, 18091-18092/tcp                                                minion-3/couch_couchbase_3
dd3aca431d53        couchbase:enterprise   "/entrypoint.sh couch"   57 seconds ago      Up 56 seconds       8091-8093/tcp, 11207/tcp, 11210-11211/tcp, 18091-18092/tcp                                                minion-1/couch_couchbase_2
4bc37df3ff03        couchbase:enterprise   "/entrypoint.sh couch"   39 minutes ago      Up 39 minutes       10.3.0.103:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 10.3.0.103:11210->11210/tcp, 18091-18092/tcp   minion-3/couch_proxy_1
5c4f9006df94        couchbase:enterprise   "/entrypoint.sh couch"   39 minutes ago      Up 39 minutes       8091-8093/tcp, 11207/tcp, 11210-11211/tcp, 18091-18092/tcp                                                minion-2/couch_couchbase_1

 minion-1/couch_couchbase_2minion-3/couch_couchbase_3のコンテナのIPアドレスを確認します。

$ docker inspect --format="{{ .NetworkSettings.Networks.couch.IPAddress }}"  minion-1/couch_couchbase_2
10.0.1.4
$ docker inspect --format="{{ .NetworkSettings.Networks.couch.IPAddress }}"  minion-3/couch_couchbase_3
10.0.1.5

 scaleした2つのコンテナをCouchbase管理画面から先ほどと同様に追加してrebalanceします。サーバーの追加もとても簡単です。

couch-add.png

 minion-3の仮想マシンにはminion-3/couch_proxy_1 (10.0.1.3)minion-3/couch_couchbase_3 (10.0.1.3)が起動していますが、DockerのMulti-host networkのおかげでこれまでDocker単体では難しかったMultiple hosts, multiple containers per hostもとても簡単になりました。

┌─────────────────────────────────────────┐  ┌─────────────────────────────────────────┐
│            Host OS (Linux)              │  │            Host OS (Linux)              │
│ ┌─────────────────┐ ┌─────────────────┐ │  │ ┌─────────────────┐ ┌─────────────────┐ │
│ │  Container OS   │ │  Container OS   │ │  │ │  Container OS   │ │  Container OS   │ │
│ │    (Ubuntu)     │ │    (Ubuntu)     │ │  │ │    (Ubuntu)     │ │    (Ubuntu)     │ │
│ │  ┌───────────┐  │ │  ┌───────────┐  │ │  │ │  ┌───────────┐  │ │  ┌───────────┐  │ │
│ │  │ Couchbase │  │ │  │ Couchbase │  │ │  │ │  │ Couchbase │  │ │  │ Couchbase │  │ │
│ │  │  Server   │  │ │  │  Server   │  │ │  │ │  │  Server   │  │ │  │  Server   │  │ │
│ │  └───────────┘  │ │  └───────────┘  │ │  │ │  └───────────┘  │ │  └───────────┘  │ │
│ └─────────────────┘ └─────────────────┘ │  │ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────┘  └─────────────────────────────────────────┘

 Couchbase Serverクラスタは以下のように構成されました。

コンテナのhostname コンテナのIPアドレス Dockerホスト DockerホストのIPアドレス
couch_couchbase_1 10.0.1.2 minion-2 10.3.0.102
couch_proxy_1 10.0.1.3 minion-3 10.3.0.103
couch_couchbase_2 10.0.1.4 minion-1 10.3.0.101
couch_couchbase_3 10.0.1.5 minion-3 10.3.0.103

XCDR

 IDCFクラウドのリージョンは白河の東日本リージョンと北九州の西日本リージョンが選択できます。リージョン間の接続も簡単にできそうなので、CouchbaseのCross Datacenter Replication (XCDR)機能も使ってみたいと思います。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?