griddb.github.io

— はじめに —

本書の目的

本書ではGridDB Dockerfileサンプルの利用方法について説明します。

注意事項

本サンプルはインターネットへの接続ができることを前提とします。プロキシ経由でインターネットに接続する環境の場合、Dockerfileサンプルのプロキシ設定箇所のコメントを解除してご利用ください。

— GridDB Dockerfileサンプル —

概要

GridDB DockerfileサンプルはGridDBクラスタやクライアントのDockerコンテナを作成するサンプルです。 Dockerホスト上でGridDBクラスタやクライアントを動作させることができます。

アーキテクチャ

GridDB Dockerfileサンプルは以下の2種類のDockerfileサンプルを提供します。

ユーザはDockerfileサンプルをビルドしてコンテナイメージを生成します。 コンテナイメージをコンテナ実行環境で起動することで、GridDBを動作させます。 また、コンテナレジストリにコンテナイメージを登録し、コンテナ実行環境に呼び出すことができます。

GridDB Dockerコンテナの利用形態

ファイル構成

動作環境

本サンプルは以下の環境で動作を確認しています。

本サンプルはGridDB V5.0 Enterprise Editionで動作を確認しています。

— オンプレミスサーバ上のGridDB Dockerfileサンプル利用方法 —

Dockerコンテナをビルドする

GridDBサーバコンテナをビルドする

下記のrpmファイルをDocker_server\rpmディレクトリにコピーします。

$ ls rpm
griddb-ee-client-5.0.0-linux.x86_64.rpm
griddb-ee-server-5.0.0-linux.x86_64.rpm

Docker_serverディレクトリ内で以下のコマンドを実行し、Dockerfileをビルドします。

$ docker build -t griddb/griddb-server:5.0 -f Dockerfile_server .

GridDBクライアントコンテナをビルドする

下記のrpmファイルをDocker_client\rpmディレクトリにコピーします。

$ ls rpm
griddb-ee-client-5.0.0-linux.x86_64.rpm
griddb-ee-java-lib-5.0.0-linux.x86_64.rpm
griddb-ee-webapi-5.0.0-linux.x86_64.rpm
griddb-ee-webui-5.0.0-linux.x86_64.rpm

以下のソフトウェアのモジュールをDocker_client\3rdディレクトリにコピーします。

Docker_clientディレクトリ内で以下のコマンドを実行し、Dockerfileをビルドします。

$ docker build -t griddb/griddb-client:5.0 -f Dockerfile_client .

Dockerコンテナを起動する

GridDBサーバコンテナを起動する

以下のコマンドにより、前節でビルドしたGridDBサーバコンテナを起動します。

$ docker run -d --name <docker_container_name> \
    -e GRIDDB_CLUSTERNAME=<cluster_name> \
    -e GRIDDB_NODE_NUM=<node_number> \
    -e NOTIFICATION_ADDRESS=<notification_address> \
    griddb/griddb-server:5.0

サーバコンテナの起動時には、以下の環境変数を指定します。

環境変数名 説明 デフォルト値
GRIDDB_CLUSTERNAME クラスタ名 myCluster
GRIDDB_NODE_NUM クラスタに所属するノード数 1
NOTIFICATION_ADDRESS 【マルチキャスト方式で指定】マルチキャストアドレス (*1)
NOTIFICATION_MEMBER 【固定リスト方式で指定】各ノードのネットワーク通信IPアドレス一覧(半角カンマ区切り) (*1)
NOTIFICATION_PROVIDER 【プロバイダ方式で指定】プロバイダのURL (*1)
SERVICE_ADDRESS GridDBノードのIPアドレス(クラスタ内、クライアント間通信用) -

(*1) いずれか1種類のみ指定必須

GridDBクライアントコンテナを起動する

以下のコマンドにより、前節でビルドしたGridDBクライアントコンテナを起動します。

$ docker run -d --name <docker_container_name> \
    -e GRIDDB_NODE=<node_ip> \
    -e GRIDDB_PORT=<node_operation_port> \
    griddb/griddb-client:5.0

クライアントコンテナの起動時には、以下の環境変数を指定します。

環境変数名 説明 デフォルト値
GRIDDB_NODE クラスタに属するGridDBサーバノードのIPアドレス(いずれか一つ) -(必須)
GRIDDB_PORT GridDB運用管理操作用ポート -(必須)

GridDBクラスタを起動する(同一Dockerホスト上)

単一ノード構成の場合

複数ノード構成の場合

以下では、3つのGridDBサーバコンテナを起動し、3ノード構成のクラスタを構築します。 同一Dockerホスト上にクライアントコンテナも起動します。また、コンテナそれぞれのGridDBホームディレクトリをDockerボリュームとして永続化します。

同一Dockerホスト上のGridDBクラスタ

同梱のdocker-compose.ymlを用いて、Docker composeによってクライアントを含む複数コンテナを一度に起動することができます。

version: '3'
services:
    griddb1:
        container_name: myNode1
        image: griddb-server:${GRIDDB_VERSION}
        build:
            context: ./Docker_server
            dockerfile: Dockerfile_server
        env_file: .env
        networks:
            griddb_net:
                ipv4_address: ${IPADDR_NODE1}
        volumes:
            - "node1:/var/lib/gridstore/"
    griddb2:
        container_name: myNode2
        image: griddb-server:${GRIDDB_VERSION}
        env_file: .env
        networks:
            griddb_net:
                ipv4_address: ${IPADDR_NODE2}
        volumes:
            - "node2:/var/lib/gridstore/"
    griddb3:
        container_name: myNode3
        image: griddb-server:${GRIDDB_VERSION}
        env_file: .env
        networks:
            griddb_net:
                ipv4_address: ${IPADDR_NODE3}
        volumes:
            - "node3:/var/lib/gridstore/"
    client:
        container_name: client
        image: griddb-client:${GRIDDB_VERSION}
        build:
            context: ./Docker_client
            dockerfile: Dockerfile_client
        env_file: .env
        networks:
            griddb_net:
                ipv4_address: ${IPADDR_CLIENT}
        volumes:
            - "client:/var/lib/gridstore/log"
        depends_on:
            - "griddb1"
            - "griddb2"
            - "griddb3"
        ports:
            - 8080:8080
            - 8081:8081

volumes:
    node1:
    node2:
    node3:
    client:

networks:
    griddb_net:
        driver: bridge
        ipam:
            config:
                - subnet: ${SUBNET}

GridDB Dockerfileサンプルでは、3.2節で説明したコンテナ起動用の環境変数およびdocker-compose実行時に使用する環境変数を.envファイルに定義できます。 構築するGridDBクラスタの接続方式(マルチキャスト、固定リスト、プロバイダ)に応じて、対応する環境変数を定義してください。 .envファイルに定義できる環境変数は以下です。

環境変数名 説明
GRIDDB_NODE_NUM クラスタに所属するノード数 3
GRIDDB_CLUSTERNAME クラスタ名 dockerCluster
GRIDDB_VERSION バージョン 5.0
NOTIFICATION_ADDRESS 【マルチキャスト方式で指定】マルチキャストアドレス 239.0.0.1
NOTIFICATION_MEMBER 【固定リスト方式で指定】各ノードのネットワーク通信IPアドレス一覧(半角カンマ区切り) 172.18.0.2,172.18.0.3,172.18.0.4
NOTIFICATION_PROVIDER 【プロバイダ方式で指定】プロバイダのURL http://providerhost/provider.json
GRIDDB_NODE クラスタに属するGridDBノードのIPアドレス(いずれか一つ) 172.18.0.2
GRIDDB_PORT GridDB運用管理操作用ポート 10040
IPADDR_NODE1 myNode1のIPアドレス 172.18.0.2
IPADDR_NODE2 myNode2のIPアドレス 172.18.0.3
IPADDR_NODE3 myNode3のIPアドレス 172.18.0.4
IPADDR_CLIENT clientのIPアドレス 172.18.0.5
SUBNET クラスタが属するサブネット 172.18.0.0/24

GridDBクラスタを起動する(複数Dockerホスト上)

前節の同一Dockerホスト上に複数コンテナを起動する方法は、以下の点でクラスタリングのメリットを十分に得られません。

複数のDockerホスト上でGridDBクラスタを構築することで、これらのメリットをより得られるようになります。

マルチキャスト方式によるクラスタ構築

マルチキャスト方式でクラスタを構築する場合は、Dockerネットワークをhostモードで構築してください。

以下はhostネットワークによる三台のDockerホスト上に、ノード構成のクラスタをマルチキャスト方式で構築する場合のコマンド例です。

複数Dockerホスト上のGridDBクラスタ(マルチキャスト方式)

host1上で実行:

$ docker run --net=host \
    -e GRIDDB_NODE_NUM=3 \
    -e GRIDDB_CLUSTERNAME=dockerCluster \
    -e NOTIFICATION_ADDRESS=239.0.0.2 \
    -e SERVICE_ADDRESS=192.168.56.101 \
    --name myNode1 griddb/griddb-server:5.0

host2上で実行:

$ docker run --net=host \
    -e GRIDDB_NODE_NUM=3 \
    -e GRIDDB_CLUSTERNAME=dockerCluster \
    -e NOTIFICATION_ADDRESS=239.0.0.2 \
    -e SERVICE_ADDRESS=192.168.56.102 \
    --name myNode2 griddb/griddb-server:5.0

host3上で実行:

$ docker run --net=host \
    -e GRIDDB_NODE_NUM=3 \
    -e GRIDDB_CLUSTERNAME=dockerCluster \
    -e NOTIFICATION_ADDRESS=239.0.0.2 \
    -e SERVICE_ADDRESS=192.168.56.103 \
    --name myNode3 griddb/griddb-server:5.0

固定リスト方式によるクラスタ構築

固定リスト方式では、MACVLANネットワークとoverlayネットワークのいずれかのDockerネットワークを使用することができます。 MACVLANネットワークでは、各コンテナはネットワーク外と共通のサブネットを用いるため、ポートの露出(expose)は不要ですが、 overlayネットワークでは、10001、20001(NewSQL使用時)、10040の3種類のポートを露出する必要があります。

以下はoverlayネットワークによる三台のDockerホスト上に、3ノード構成のクラスタを固定リスト方式で構築する場合のコマンド例です。

複数Dockerホスト上のGridDBクラスタ(固定リスト方式)

プロバイダ方式によるクラスタ構築

プロバイダ方式の場合は固定リスト方式の場合と同様です。 overlayネットワークのDockerホスト上では、10001、20001(NewSQL使用時)、10040ポートを露出する必要があります。

以下はoverlayネットワークによる三台のDockerホスト上に、3ノード構成のクラスタをプロバイダ方式で構築する場合のコマンド例です。

なお、ホストプロバイダがhttp://192.168.56.104/provider.json で、以下のホスト情報を提供しているとします。

$ curl http://192.168.56.104/provider.json
[
  {
    "cluster": {"address": "10.0.1.4","port": 10010},
    "sync": {"address": "10.0.1.4","port": 10020},
    "system": {"address": "10.0.1.4","port": 10040},
    "transaction": {"address": "192.168.56.101","port": 10001},
    "sql": {"address": "192.168.56.101","port": 20001}
  },
  {
    "cluster": {"address": "10.0.1.5","port": 10010},
    "sync": {"address": "10.0.1.5","port": 10020},
    "system": {"address": "10.0.1.5","port": 10040},
    "transaction": {"address": "192.168.56.102","port": 10001},
    "sql": {"address": "192.168.56.102","port": 20001}
  },
  {
    "cluster": {"address": "10.0.1.6","port": 10010},
    "sync": {"address": "10.0.1.6","port": 10020},
    "system": {"address": "10.0.1.6","port": 10040},
    "transaction": {"address": "192.168.56.103","port": 10001},
    "sql": {"address": "192.168.56.103","port": 20001}
  }
]

— 主な操作 —

コンテナ内でシェルを起動する

$ docker exec -it <node_name> bash

GridDBクラスタのステータスを確認する

$ docker exec -it <node_name> bash
$ su - gsadm
$ gs_stat -u admin/admin

GridDBクラスタへのアクセス

Dockerホスト上からマルチキャスト接続でGridDBクラスタにアクセスする

Dockerホスト外のGridDBクライアントからアクセスする

— 商標 —