GridDB Dockerfileサンプル 説明書
Revision: 3960
1 はじめに
1.1 本書の目的
本書ではGridDB Dockerfileサンプルの利用方法について説明します。
1.2 注意事項
本サンプルはインターネットへの接続ができることを前提とします。プロキシ経由でインターネットに接続する環境の場合、Dockerfileサンプルのプロキシ設定箇所のコメントを解除してご利用ください。
2 GridDB Dockerfileサンプル
2.1 概要
GridDB DockerfileサンプルはGridDBクラスタやクライアントのDockerコンテナを作成するサンプルです。 Dockerホスト上でGridDBクラスタやクライアントを動作させることができます。
2.2 アーキテクチャ
GridDB Dockerfileサンプルは以下の2種類のDockerfileサンプルを提供します。
GridDBサーバコンテナ用Dockerfile
GridDBのサーバモジュールが起動するコンテナです。
GridDBクライアントコンテナ用Dockerfile
GridDBの運用ツール、NewSQLインタフェース、Javaライブラリ、WebAPIを利用できるコンテナです。
ユーザはDockerfileサンプルをビルドしてコンテナイメージを生成します。コンテナイメージをコンテナ実行環境で起動することで、GridDBを動作させます。また、コンテナレジストリにコンテナイメージを登録し、コンテナ実行環境に呼び出すことができます。

2.3 ファイル構成
- Docker_server/: GridDBサーバコンテナビルド用ディレクトリ
- rpm/: GridDBインストーラ格納用ディレクトリ
- Dockerfile_server
- docker-entrypoint_server.sh
- Docker_client/: GridDBクライアントコンテナビルド用ディレクトリ
- 3rd/: 外部ソフトウェア格納用ディレクトリ
- rpm/: GridDBインストーラ格納用ディレクトリ
- Dockerfile_client
- docker-entrypoint_client.sh
- Provider/:
- Provider
- provider.json
- sample/:
- JDBCClient.java
- MultiNodesClient.java
- docker-compose.yml: Docker compose用コンテナ起動設定ファイル
- .env: GridDBコンテナ用環境変数設定ファイル
2.4 動作環境
本サンプルは以下の環境で動作を確認しています。
オンプレミス環境
- ホストOS: RHEL / CentOS 7.6
- コンテナランタイム: Docker CE 19.03(Docker composeを含む)
Microsoft Azure環境
- Azure VM (CentOS 7.5)
- Azure Container Instance (ACI)
- Azure Container Registry (ACR)
本サンプルはGridDB SE / AE 4.3で動作を確認しています。
3 オンプレミスサーバ上のGridDB Dockerfileサンプル利用方法
3.1 Dockerコンテナをビルドする
3.1.1 GridDBサーバコンテナをビルドする
下記のrpmファイルをDocker_server\rpmディレクトリにコピーします。
$ ls rpm
griddb-client-4.2.0-linux.x86_64.rpm
griddb-server-4.2.0-linux.x86_64.rpm
Docker_serverディレクトリ内で以下のコマンドを実行し、Dockerfileをビルドします。
$ docker build -t griddb/griddb-server:4.2 -f Dockerfile_server .
3.1.2 GridDBクライアントコンテナをビルドする
下記のrpmファイルをDocker_client\rpmディレクトリにコピーします。
$ ls rpm
griddb-client-4.2.0-linux.x86_64.rpm
griddb-java_lib-4.2.0-linux.x86_64.rpm
griddb-webapi-4.2.0-linux.x86_64.rpm
griddb-newsql-4.2.0-linux.x86_64.rpm (GridDB AEのみ)
以下の2種類のソフトウェアのモジュールをDocker_client\3rdディレクトリにコピーします。
- Apache Tomcat 8 (apache-tomcat-8.X.XX.tar.gz)
- Java SE 8 (jdk-8uXXX-linux-x64.rpm)
Docker_clientディレクトリ内で以下のコマンドを実行し、Dockerfileをビルドします。
$ docker build -t griddb/griddb-client:4.2 -f Dockerfile_client .
3.2 Dockerコンテナを起動する
3.2.1 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:4.2
サーバコンテナの起動時には、以下の環境変数を指定します。
環境変数名 | 説明 | デフォルト値 |
---|---|---|
GRIDDB_CLUSTERNAME | クラスタ名 | myCluster |
GRIDDB_NODE_NUM | クラスタに所属するノード数 | 1 |
NOTIFICATION_ADDRESS | 【マルチキャスト方式で指定】マルチキャストアドレス | (*1) |
NOTIFICATION_MEMBER | 【固定リスト方式で指定】各ノードのネットワーク通信IPアドレス一覧(半角カンマ区切り) | (*1) |
NOTIFICATION_PROVIDER | 【プロバイダ方式で指定】プロバイダのURL | (*1) |
SERVICE_ADDRESS | GridDBノードのIPアドレス(クラスタ内、クライアント間通信用) | - |
(*1) いずれか1種類のみ指定必須
3.2.2 GridDBクライアントコンテナを起動する
以下のコマンドにより、前節でビルドしたGridDBクライアントコンテナを起動します。
$ docker run -d --name <docker_container_name> \
-e GRIDDB_NODE=<node_ip> \
-e GRIDDB_PORT=<node_operation_port> \
griddb/griddb-client:4.2
クライアントコンテナの起動時には、以下の環境変数を指定します。
環境変数名 | 説明 | デフォルト値 |
---|---|---|
GRIDDB_NODE | クラスタに属するGridDBサーバノードのIPアドレス(いずれか一つ) | -(必須) |
GRIDDB_PORT | GridDB運用管理操作用ポート | -(必須) |
3.3 GridDBクラスタを起動する(同一Dockerホスト上)
3.3.1 単一ノード構成の場合
GridDBクラスタ起動
単一のGridDBサーバコンテナを起動し、単一ノード構成のクラスタを構築します。
以下のコマンドを実行します。コンテナ名はgriddbになります。
$ docker run -d --name griddb \ -e GRIDDB_CLUSTERNAME=<cluster_name> \ -e GRIDDB_NODE_NUM=1 \ -e NOTIFICATION_ADDRESS=<notification_address> \ griddb/griddb-server:4.2
GridDBホームディレクトリをDockerボリュームとして永続化する場合は、"--mount"オプションを追加します。
$ docker run -d --name griddb \ -e GRIDDB_CLUSTERNAME=<cluster_name> \ -e GRIDDB_NODE_NUM=1 \ -e NOTIFICATION_ADDRESS=<notification_address> \ --mount source=<volume_name>,target=/var/lib/gridstore/ \ griddb/griddb-server:4.2
GridDBクライアントから接続
NoSQL APIで接続:
$ cd sample $ javac -cp /usr/share/java/gridstore.jar SingleNodeClient.java $ java -cp .:/usr/share/java/gridstore.jar SingleNodeClient <IP Address> 10001 myCluster
JDBCで接続:
$ cd sample $ javac JDBCClient.java $ java -cp .:/usr/share/java/gridstore-jdbc.jar JDBCClient <IP Address> 20001 myCluster
GridDBクライアントコンテナから接続
起動済みのGridDBサーバを指定し、GridDBクライアントコンテナを起動します。
$ docker run -d --name griddb-client \ --link <container_name>:griddb \ griddb/griddb-client:4.2
3.3.2 複数ノード構成の場合
以下では、 三つのGridDBサーバコンテナを起動し、3ノード構成のクラスタを構築します。同一Dockerホスト上にクライアントコンテナも起動します。また、コンテナそれぞれのGridDBホームディレクトリをDockerボリュームとして永続化します。

同梱のdocker-compose.ymlを用いて、Docker composeによってクライアントを含む複数コンテナを一度に起動することができます。
version: '3'
services:
griddb1:
container_name: myNode1
image: griddb-server:4.2
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:4.2
env_file: .env
networks:
griddb_net:
ipv4_address: ${IPADDR_NODE2}
volumes:
- "node2:/var/lib/gridstore/"
griddb3:
container_name: myNode3
image: griddb-server:4.2
env_file: .env
networks:
griddb_net:
ipv4_address: ${IPADDR_NODE3}
volumes:
- "node3:/var/lib/gridstore/"
client:
container_name: client
image: griddb-client:4.2
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 |
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 |
3.4 GridDBクラスタを起動する(複数Dockerホスト上)
前節の同一Dockerホスト上に複数コンテナを起動する方法は、以下の点でクラスタリングのメリットを十分に得られません。
- ノードの冗長性による可用性の担保
- 独立したリソースの並列利用による高速処理
複数のDockerホスト上でGridDBクラスタを構築することで、これらのメリットをより得られるようになります。
3.4.1 マルチキャスト方式によるクラスタ構築
マルチキャスト方式でクラスタを構築する場合は、Dockerネットワークをhostモードで構築してください。
以下はhostネットワークによる三台のDockerホスト上に、ノード構成のクラスタをマルチキャスト方式で構築する場合のコマンド例です。

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:4.2
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:4.2
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:4.2
3.4.2 固定リスト方式によるクラスタ構築
固定リスト方式では、MACVLANネットワークとoverlayネットワークのいずれかのDockerネットワークを使用することができます。 MACVLANネットワークでは、各コンテナはネットワーク外と共通のサブネットを用いるため、ポートの露出(expose)は不要ですが、 overlayネットワークでは、10001、20001(NewSQL使用時)、10040の3種類のポートを露出する必要があります。
以下はoverlayネットワークによる三台のDockerホスト上に、3ノード構成のクラスタを固定リスト方式で構築する場合のコマンド例です。

3台のホストをDocker swarmを用いてクラスタ化します。
host1上で実行:
$ docker swarm init --advertise-addr=192.168.56.101
このコマンドにより、ホストを参加させるのに必要なトークンが表示されます。
host2上で実行:
$ docker swarm join --token <TOKEN> \ --advertise-addr 192.168.56.102 192.168.56.101:2377
host3上で実行:
$ docker swarm join --token <TOKEN> \ --advertise-addr 192.168.56.103 192.168.56.101:2377
overlayネットワーク(griddb-net)を作成します。
$ docker network create -d overlay \ --subnet 10.0.1.0/24 --attachable griddb-net
GridDBサーバコンテナを起動します。
machine1ノード上で実行:
$ docker run \ -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_MEMBER=10.0.1.4,10.0.1.5,10.0.1.6 \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.4 \ --name myNode1 griddb/griddb-server:4.2
machine2ノード上で実行:
$ docker run -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_MEMBER=10.0.1.4,10.0.1.5,10.0.1.6 \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.5 \ --name myNode2 griddb/griddb-server:4.2
machine3ノード上で実行:
$ docker run -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_MEMBER=10.0.1.4,10.0.1.5,10.0.1.6 \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.6 \ --name myNode3 griddb/griddb-server:4.2
各コンテナ内で
gs_node.json
とgs_cluster.json
を編集します。myNode1の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.101"にmyNode2の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.102"にmyNode3の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.103"にmyNode1~3の
gs_cluster.json
:{ ... "cluster": { ... "notificationMember": [ { "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} } ] ... } ... }
3.4.3 プロバイダ方式によるクラスタ構築
プロバイダ方式の場合は固定リスト方式の場合と同様です。 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}
}
]
3台のホストをDocker swarmを用いてクラスタ化します。
host1上で実行:
$ docker swarm init --advertise-addr=192.168.56.101
このコマンドにより、ホストを参加させるのに必要なトークンが表示されます。
host2上で実行:
$ docker swarm join --token <TOKEN> \ --advertise-addr 192.168.56.102 192.168.56.101:2377
host3上で実行:
$ docker swarm join --token <TOKEN> \ --advertise-addr 192.168.56.103 192.168.56.101:2377
overlayネットワーク(griddb-net)を作成します。
$ docker network create -d overlay \ --subnet 10.0.1.0/24 --attachable griddb-net
GridDBサーバコンテナを起動します。
host1ノード上で実行:
$ docker run -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_PROVIDER=http://192.168.56.104/provider.json \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.4 \ --name myNode1 griddb/griddb-server:4.2
host2ノード上で実行:
$ docker run -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_PROVIDER=http://192.168.56.104/provider.json \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.5 \ --name myNode2 griddb/griddb-server:4.2
host3ノード上で実行:
$ docker run -e GRIDDB_NODE_NUM=3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e NOTIFICATION_PROVIDER=http://192.168.56.104/provider.json \ -p 10001:10001 -p 10040:10040 -p 20001:20001 \ --network griddb-net --ip 10.0.1.6 \ --name myNode3 griddb/griddb-server:4.2
各コンテナ内でgs_node.jsonを編集します。(gs_cluster.jsonは不要)
myNode1の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.101"にmyNode2の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.102"にmyNode3の
gs_node.json
:/transaction/serviceAddress
と/sql/serviceAddress
を"192.168.56.103"に
4 Microsoft Azureサービス上のGridDB Dockerfileサンプル利用方法
4.1 ACRでコンテナレジストリを利用する
Azure Container Registry (ACR)はコンテナイメージを管理するためのDockerプライベートレジストリを提供する、Microsoft Azureのマネージドサービスです。以下では、ACR上のコンテナイメージレジストリに対してGridDBコンテナを登録、取得する方法を説明します。
4.1.1 事前準備
- 作業環境にAzure CLIをインストールします。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest
- GridDBコンテナイメージをビルドします。(3.1節を参照)
4.1.2 (参考)ACRに新しいレジストリを作成する
必要があれば、新しいリソースグループを作成します。
$ az group create --name <resource-group-name> --location <resource-group-location>
新しいレジストリを作成します。
$ az acr create --resource-group <resource-group-name> --name <container-registry-name> --sku Premium --admin-enabled true
作成したレジストリの認証情報を取得します。
$ az acr credential show --name <container-registry-name>
(参考)ACRのアクセス制限設定
ACRのレジストリについて、特定のIPアドレスからのみアクセスを許可し、それ以外からのアクセスを禁止する設定を行う方法を説明します。同様の手順で、特定のAzure仮想ネットワークからのみアクセスを許可する設定にすることもできます。
デフォルトでレジストリへのアクセスを禁止します。
$ az acr update --name <container-registry-name> --default-action Deny
サービスエンドポイントを削除します。
$ az network vnet subnet update \ --name <subnet-name> \ --vnet-name <virtual-network-name> \ --resource-group <resource-group-name> \ --service-endpoints ""
既存のネットワークルールを削除します。
$ az acr network-rule remove --name <container-registry-name> --subnet <subnet-resource-id>
特定のIPからのアクセスのみ許可する、新しいネットワークルールを作成します。
$ az acr network-rule add --name <container-registry-name> --ip-address <your-public-IP-address>
4.1.3 レジストリにコンテナイメージを登録する
ローカルのコンテナイメージのエイリアスをレジストリに作成します。
$ az acr login --name <registry-path> $ docker tag <image-name> <registry-path>/<image-name-in-registry>
コンテナイメージをレジストリに登録します。
$ docker push <registry-path>/<image-name-in-registry>
4.1.4 レジストリからコンテナイメージを取得する
- レジストリからコンテナイメージを取得します。
$ az acr login --name <registry-path> $ docker pull <registry-path>/<image-name-in-registry>
4.2 ACI上でGridDBクラスタを起動する
Azure Container Instance(ACI)はDockerコンテナの実行環境を提供するMicrosoft Azureのマネージドサービスです。
以下では、GridDBコンテナをAzure Container Instance (ACI)で動作させる方法を説明します。
なお、ACI上では、GridDBのクラスタネットワーク方式のうちプロバイダ方式のみを使用できます。本書で説明する手順で構築するシステム構成を以下の図に示します。

GridDBクラスタは3ノードで構成され、それぞれが別々のコンテナグループに属します。また、プロバイダ方式でクラスタを構成するため、プロバイダホスト用のコンテナを別途起動します。本書ではhttpdを使用します。
また、 nginx を用いたリバースプロキシ用のVMを別途用意し、ネットワーク外のGridDB WebAPIや統合運用管理GUI(gs_admin)からGridDBクラスタにアクセスできるようにしています。
4.2.1 事前準備
- 作業環境にAzure CLIをインストールします。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest
- GridDBサーバ、クライアントのコンテナイメージをビルドします。(3.1節を参照)
- プロバイダホストのコンテナイメージをビルドします。
$ docker build -t providerhost:1.0 -f Provider .
- 各コンテナイメージをACR上のレジストリに登録します。(4.1節を参照)
4.2.2 必要なリソースを作成する
Azure CLIにおいてAzureにログインします。
$ az login
プロキシ経由でインターネットに接続する環境の場合、環境変数にプロキシ情報を登録します。
$ export http_proxy=http://<user name>:<password>@<proxy address>:<proxy port> $ export https_proxy=http://<user name>:<password>@<proxy address>:<proxy port>
必要があれば、新しいコンテナグループを作成します。
$ az group create --name <resource-group-name> --location <location>
必要があれば、Azure Filesを使用するための新しいストレージアカウントを作成します。
$ az storage account create --name <storage_account_name> --resource-group <resource-group-name> $ az storage share create --name node1 --account-name <storage_account_name> $ az storage share create --name node2 --account-name <storage_account_name> $ az storage share create --name node3 --account-name <storage_account_name>
作成したストレージアカウントの認証キーを取得します。
$ az storage account keys list --resource-group <resource-group-name> \ --account-name <storage_account_name> --query "[0].value" --output tsv
Azure仮想ネットワークを作成します。
$ az network vnet create --resource-group <resource-group-name> \ --name <vnet-name> --address-prefix 10.0.0.0/16
GridDBコンテナイメージが登録されたACRのコンテナレジストリにログインします。(認証情報が必要)
$ docker login <registry-path>
プロバイダホストを起動します。
プロバイダホスト用のサブネット(10.0.0.0/24)を作成します。
$ az network vnet subnet create --resource-group <resource-group-name> \ --vnet-name <vnet-name> --name providerhost --address-prefix 10.0.0.0/24
プロバイダホストのインスタンスを作成、起動します。
$ az container create --name providerhost --resource-group <resource-group-name> \ --image <registry-path>/providerhost:1.0 \ --registry-username <registry-name> --registry-password <registry-password> \ --vnet <vnet-name> --subnet providerhost --port 80
4.2.3 GridDBクラスタを起動する
サーバコンテナ用のサブネット(10.0.1.0/24)を作成します。
$ az network vnet subnet create --resource-group <resource-group-name> \ --vnet-name <vnet-name> --name servernodes --address-prefix 10.0.1.0/24
3サーバー分のコンテナを起動します。
$ az container create --name myNode1 \ --image <registry-name-on-azurecr.io>/griddb-server:4.2 \ --registry-username <registry-name> --registry-password <registry-password> \ --resource-group <resource-group-name> \ --vnet <vnet-name> --subnet servernodes \ --ports 10001 10010 10020 10040 20001 \ --environment-variables 'GRIDDB_CLUSTERNAME'='<cluster-name>' 'GRIDDB_NODE_NUM'='3' 'NOTIFICATION_PROVIDER'='http://10.0.0.4/provider.json' \ --azure-file-volume-account-name <gridDB_storage_account> \ --azure-file-volume-account-key <volume-account-key> \ --azure-file-volume-share-name myNode1 \ --azure-file-volume-mount-path /var/lib/gridstore/data $ az container create --name myNode2 \ --image <registry-name-on-azurecr.io>/griddb-server:4.2 \ --registry-username <registry-name> --registry-password <registry-password> \ --resource-group <resource-group-name> \ --vnet <vnet-name> --subnet servernodes \ --ports 10001 10010 10020 10040 20001 \ --environment-variables 'GRIDDB_CLUSTERNAME'='<cluster-name>' 'GRIDDB_NODE_NUM'='3' 'NOTIFICATION_PROVIDER'='http://10.0.0.4/provider.json' \ --azure-file-volume-account-name <gridDB_storage_account> \ --azure-file-volume-account-key <volume-account-key> \ --azure-file-volume-share-name myNode2 \ --azure-file-volume-mount-path /var/lib/gridstore/data $ az container create --name myNode3 \ --image <registry-name-on-azurecr.io>/griddb-server:4.2 \ --registry-username <registry-name> --registry-password <registry-password> \ --resource-group <resource-group-name> \ --vnet <vnet-name> --subnet servernodes \ --ports 10001 10010 10020 10040 20001 \ --environment-variables 'GRIDDB_CLUSTERNAME'='<cluster-name>' 'GRIDDB_NODE_NUM'='3' 'NOTIFICATION_PROVIDER'='http://10.0.0.4/provider.json' \ --azure-file-volume-account-name <gridDB_storage_account> \ --azure-file-volume-account-key <volume-account-key> \ --azure-file-volume-share-name myNode3 \ --azure-file-volume-mount-path /var/lib/gridstore/data
4.2.4 GridDBクライアントを起動する
クライアントコンテナ用のサブネット(10.0.2.0/24)を作成します。
$ az network vnet subnet create --resource-group <resource-group-name> \ --vnet-name <vnet-name> --name client --address-prefix 10.0.2.0/24
クライアントコンテナを起動します。
$ az container create --name client \ --image <registry-name-on-azurecr.io>/griddb-client:4.2 \ --registry-username <registry-name> --registry-password <registry-password> \ --resource-group <resource-group-name> \ --vnet <vnet-name> --subnet client \ --ports 8080 8081 \ --environment-variables 'GRIDDB_NODE'='10.0.1.4' 'GRIDDB_PORT'='10040'
コンテナにローカルからログインするためには、以下のコマンドを実行します。
$ az container exec --resource-group <resource-group-name> --name <container-name> --exec-command "/bin/bash"
GridDB運用ツール(gs_admin、WebAPI)にアクセスするためには、以下の手順を実行します。
CentOSのAzure VMを1台作成します。
VMをサブネット(10.0.0.0/16)に登録します。
VMにパブリックIPを付与します。
VMにnginxをインストールし、リバースプロキシサーバを作成します。
nginxをインストールします。
https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/
以下の記述を含むgriddb.confを/etc/nginx/conf.d/の下に作成します。
server { listen 80; server_name <dns-server-name-of-virtual-machine>; location /gs_admin { proxy_pass http://10.1.2.4:8080/gs_admin; } location /webapi { proxy_pass http://10.1.2.4:8081/; } }
nginxを再起動します。
sudo systemctl reload nginx
gs_adminにアクセスします。
<dns-server-name-of-virtual-machine>/gs_admin
WebAPIのBase URLは以下です。
<dns-server-name-of-virtual-machine>/webapi
4.3 Azure VM上でGridDBクラスタを起動する
ACIを使用せずに、Azure VM上にインストールしたDocker CE上にGridDBクラスタを構築することもできます。
以下では、GridDBコンテナをAzure VM上のDocker CEで動作させる方法を説明します。
4.3.1 事前準備
- 作業環境にAzure CLIをインストールします。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest
- GridDBサーバ、クライアントのコンテナイメージをビルドします。(3.1節を参照)
- コンテナイメージをACR上のレジストリに登録します。(4.1節を参照)
4.3.2 必要なリソースを作成する
必要があれば、新しいコンテナグループを作成します。
$ az group create --name <resource-group-name> --location <resource-group-location>
Azure仮想ネットワークを作成します。
$ az network vnet create --resource-group <resource-group-name> \ --name <virtual_network_name> --address-prefix 10.0.0.0/16 $ az network vnet subnet create --resource-group <resource-group-name> \ --vnet-name <virtual_network_name> --name <subnet_name> --address-prefix 10.0.0.0/24
Azure VMインスタンスを作成します。 (サーバ用3台、クライアント用1台)
$ az vm create --resource-group <resource-group-name> \ --name machine1 --public-ip-address-dns-name <machine1-public-dns-name> \ --image CentOS --admin-username <user-name> --admin-password <password> \ --vnet-name <virtual_network_name> --subnet <subnet_name> --private-ip-address 10.0.0.4 $ az vm create --resource-group <resource-group-name> \ --name machine2 --public-ip-address-dns-name <machine2-public-dns-name> \ --image CentOS --admin-username <user-name> --admin-password <password> \ --vnet-name <virtual_network_name> --subnet <subnet_name> --private-ip-address 10.0.0.5 $ az vm create --resource-group <resource-group-name> \ --name machine3 --public-ip-address-dns-name <machine3-public-dns-name> \ --image CentOS --admin-username <user-name> --admin-password <password> \ --vnet-name <virtual_network_name> --subnet <subnet_name> --private-ip-address 10.0.0.6 $ az vm create --resource-group <resource-group-name> --name machineclient \ --public-ip-address-dns-name <client-public-dns-name> \ --image CentOS --admin-username <user-name> --admin-password <password> \ --vnet-name <virtual_network_name> --subnet <subnet_name> --private-ip-address 10.0.0.7
VMインスタンスにDocker CEをインストールします。
4.3.3 GridDBクラスタを起動する
それぞれのVM上で、レジストリからコンテナイメージを取得します。
machine1, machine2, machine3ノード上で実行:
$ docker login <registry-name-on-azurecr.io> $ docker pull <registry-name-on-azurecr.io>/griddb-server:4.2
それぞれのVM上で、サーバコンテナを起動します。
machine1ノード上で実行:
$ docker run -d --name myNode1 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e GRIDDB_NODE_NUM=3 \ -e NOTIFICATION_MEMBER=10.0.0.4,10.0.0.5,10.0.0.6 \ -e SERVICE_ADDRESS=10.0.0.4 \ -p 10001:10001 -p 10010:10010 -p 10020:10020 -p 10040:10040 -p 20001:20001 \ <registry-path>/griddb-server:4.2
machine2ノード上で実行:
$ docker run -d --name myNode2 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e GRIDDB_NODE_NUM=3 \ -e NOTIFICATION_MEMBER=10.0.0.4,10.0.0.5,10.0.0.6 \ -e SERVICE_ADDRESS=10.0.0.5 \ -p 10001:10001 -p 10010:10010 -p 10020:10020 -p 10040:10040 -p 20001:20001 \ <registry-path>/griddb-server:4.2
machine3ノード上で実行:
$ docker run -d --name myNode3 \ -e GRIDDB_CLUSTERNAME=dockerCluster \ -e GRIDDB_NODE_NUM=3 \ -e NOTIFICATION_MEMBER=10.0.0.4,10.0.0.5,10.0.0.6 \ -e SERVICE_ADDRESS=10.0.0.6 \ -p 10001:10001 -p 10010:10010 -p 10020:10020 -p 10040:10040 -p 20001:20001 \ <registry-path>/griddb-server:4.2
4.3.4 GridDBクライアントを起動する
レジストリからコンテナイメージを取得します。
machineclientノード上で実行:
$ docker login <registry-name-on-azurecr.io> $ docker pull <registry-name-on-azurecr.io>/griddb-client:4.2
クライアントコンテナを起動します。
machineclientノード上で実行:
$ docker run -d --name client \ -e GRIDDB_NODE=10.0.0.4 \ -e GRIDDB_PORT=10040 \ -p 8080:8080 -p 8081:8081 \ <registry-name-on-azurecr.io>/griddb-client:4.2
5 主な操作
5.1 コンテナ内でシェルを起動する
$ docker exec -it <node_name> bash
5.2 GridDBクラスタのステータスを確認する
$ docker exec -it <node_name> bash
$ su - gsadm
$ gs_stat -u admin/admin
5.3 GridDBクラスタへのアクセス
5.3.1 Dockerホスト上からマルチキャスト接続でGridDBクラスタにアクセスする
hostネットワークからコンテナのdocker0インタフェースにマルチキャストルートを設定します。
$ ip route add 239.0.0.1/32 dev docker0
マルチキャストルートに対してクライアントからアクセスします。
$ cd sample $ javac -cp /usr/share/java/gridstore.jar MultiNodesClient.java $ java -cp .:/usr/share/java/gridstore.jar MultiNodesClient 239.0.0.1 31999 myCluster
5.3.2 Dockerホスト外のGridDBクライアントからアクセスする
コンテナ起動時に必要なポートを露出しておきます。
$ docker run -P -d --name griddb griddb/griddb-server:4.2
ポートフォワードすることもできます。
$ docker run -p 40001:10001 -d --name griddb griddb/griddb-server:4.2
露出されたポートは以下のコマンドで確認できます。
$ docker port griddb
露出されているポートに対してクライアントからアクセスします。
$ cd sample $ javac -cp /usr/share/java/gridstore.jar SingleNodeClient.java $ java -cp .:/usr/share/java/gridstore.jar SingleNodeClient <Docker Host IP Address> 40001 myCluster
6 商標
- GridDBは日本国内における東芝デジタルソリューションズ株式会社の登録商標です。
- DockerはDocker Inc.の米国およびその他の国における登録商標です。
- MicrosoftおよびAzureは米国Microsoft Corporationの米国およびその他の国における登録商標です。